Code ẩn sheet theo nội dung của ô A1 làm mất tính năng undo

Liên hệ QC

alex-luu

Thành viên thường trực
Tham gia
10/3/15
Bài viết
300
Được thích
52
Chào các anh chị,
Em có đoạn code này , em để nó vào Sheet1 , ý em muốn là nếu giá trị ô A1 = chữ ABC thì mở file abc.xlsx , nếu khác chữ ABC hoặc =0 thì ẩn sheet 3 đi
Code chạy tốt, chỉ có điều là sheet 1 mất luôn tính năng undo (dù trong quá trình làm việc, em không hề thay đổi nội dung ô A1. (nội dung ô A1 là mình nhập tay, không phải công thức)
có cách nào vẫn có thể undo trong quá trình làm việc ở sheet1 này không ạ ?


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Sheet2.Range("A1").Value = "ABC" Then
Call open_file1
Else
Call hide_sheet3
End If
End Sub
 
Dùng code thì chấp nhận sheet không undo thôi bạn.
Hoặc bạn thay sự kiện trên bằng 1 nút chạy sub, khi nào thực hiện thì click vào nút và kèm theo code backup file (sao lưu ra 1 bản dự phòng lỡ có gì không đúng ý thì mở ra xem lại)
 
Chào các anh chị,
Em có đoạn code này , em để nó vào Sheet1 , ý em muốn là nếu giá trị ô A1 = chữ ABC thì mở file abc.xlsx , nếu khác chữ ABC hoặc =0 thì ẩn sheet 3 đi
Code chạy tốt, chỉ có điều là sheet 1 mất luôn tính năng undo (dù trong quá trình làm việc, em không hề thay đổi nội dung ô A1. (nội dung ô A1 là mình nhập tay, không phải công thức)
có cách nào vẫn có thể undo trong quá trình làm việc ở sheet1 này không ạ ?


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Sheet2.Range("A1").Value = "ABC" Then
Call open_file1
Else
Call hide_sheet3
End If
End Sub
Thay cái ẩn sheets này.
xlSheetVeryHidden
thành cái này
xlSheetHidden
 
Thay cái ẩn sheets này.
xlSheetVeryHidden
thành cái này
xlSheetHidden
Vấn đề không nằm ở chổ VeryHidden hay Hidden ạ, em thậm chí thử kiểu nếu ô A1="ABC" thì call macro1, không thì thoát.
Sau đó em làm việc với sheet1, không đụng chạm gì đến ô A1 cả , nó cũng mất luôn tính năng undo.

Em nghĩ sự kiện Worksheet SelectionChange tức là khi nào mình thay đổi nội dung của ô A1 , thì nó mới kích hoạt Code lúc đó mất undo thì ok, chấp nhận. Nhưng khi mình không động vào ô A1 thì code không chạy sao nó cũng không cho undo các thao tác khác ?
 
Lần chỉnh sửa cuối:
Vấn đề không nằm ở chổ VeryHidden hay Hidden ạ, em thậm chí thử kiểu nếu ô A1="ABC" thì call macro1, không thì thoát.
Sau đó em làm việc với sheet1, không đụng chạm gì đến ô A1 cả , nó cũng mất luôn tính năng undo.

Em nghĩ sự kiện Worksheet SelectionChange tức là khi nào mình thay đổi nội dung của ô A1 , thì nó mới kích hoạt Code lúc đó mất undo thì ok, chấp nhận. Nhưng khi mình không động vào ô A1 thì code không chạy sao nó cũng không cho undo các thao tác khác ?
Bạn đưa cái code ẩn sheets lên xem nào.
 
Bạn đưa cái code ẩn sheets lên xem nào.
Đây ạ. Sheet DS DU THI , Ô A1.
Mật khẩu đang dùng là AdminHO
File này sẽ được gởi cho 2 nhóm người sử dụng :
1. là user bình thường, khi mở file lên, họ chỉ thấy duy nhất 1 sheet DS DU THI để nhập dữ liệu vào. Hết.
2. là Admin : khi mở file lên, họ nhập pas vào ô A1, pass là AdminHO , lúc này sẽ hiện ra các Sheet khác để làm việc

nhưng khi đưa code Worksheet SelectionChange vào thì mất luôn tính năng undo.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
If Sheet2.Range("A1").Value = Sheet2.Range("I1").Value Then ' dòng này muc dich là cho admin thay doi password theo ý muon
Call unhide
Else
Call hide
End If
End Sub

-------------------------------------------------------------------

Sub hide()
On Error Resume Next
Sheet3.Visible = xlSheetVeryHidden
Sheet4.Visible = xlSheetVeryHidden
Sheet5.Visible = xlSheetVeryHidden
Sheet6.Visible = xlSheetVeryHidden
Sheet2.Shapes.Range(Array("Group 1")).Visible = False

ActiveSheet.Protect Password:="AdminHO", DrawingObjects:=False, Contents:=True, Scenarios:= _
False, AllowFormattingCells:=True, AllowFormattingColumns:=True, _
AllowFormattingRows:=True, AllowInsertingColumns:=True, AllowInsertingRows _
:=True, AllowDeletingColumns:=True, AllowDeletingRows:=True, AllowSorting _
:=True, AllowFiltering:=True, AllowUsingPivotTables:=True
End Sub

--------------------------------------------------------------

Sub unhide()
On Error Resume Next
Sheet3.Visible = xlSheetVisible
Sheet4.Visible = xlSheetVisible
Sheet2.Shapes.Range(Array("Group 1")).Visible = True
End Sub
 

File đính kèm

  • Danh sach du thi lop ARFC.xlsm
    1.2 MB · Đọc: 2
Lần chỉnh sửa cuối:
Đây ạ. Sheet DS DU THI , Ô A1.
Mật khẩu đang dùng là AdminHO
File này sẽ được gởi cho 2 nhóm người sử dụng :
1. là user bình thường, khi mở file lên, họ chỉ thấy duy nhất 1 sheet DS DU THI để nhập dữ liệu vào. Hết.
2. là Admin : khi mở file lên, họ nhập pas vào ô A1, pass là AdminHO , lúc này sẽ hiện ra các Sheet khác để làm việc

nhưng khi đưa code Worksheet SelectionChange vào thì mất luôn tính năng undo.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
If Sheet2.Range("A1").Value = Sheet2.Range("I1").Value Then
Call unhide
Else
Call hide
End If
End Sub

-------------------------------------------------------------------

Sub hide()
On Error Resume Next
Sheet3.Visible = xlSheetVeryHidden
Sheet4.Visible = xlSheetVeryHidden
Sheet5.Visible = xlSheetVeryHidden
Sheet6.Visible = xlSheetVeryHidden
Sheet2.Shapes.Range(Array("Group 1")).Visible = False

ActiveSheet.Protect Password:="AdminHO", DrawingObjects:=False, Contents:=True, Scenarios:= _
False, AllowFormattingCells:=True, AllowFormattingColumns:=True, _
AllowFormattingRows:=True, AllowInsertingColumns:=True, AllowInsertingRows _
:=True, AllowDeletingColumns:=True, AllowDeletingRows:=True, AllowSorting _
:=True, AllowFiltering:=True, AllowUsingPivotTables:=True
End Sub

--------------------------------------------------------------

Sub unhide()
On Error Resume Next
Sheet3.Visible = xlSheetVisible
Sheet4.Visible = xlSheetVisible
Sheet2.Shapes.Range(Array("Group 1")).Visible = True
End Sub
Thay cái sub hide thành thế này xem sao.
Mã:
Sub hide()
On Error Resume Next
Sheet3.Visible = xlSheetHidden
Sheet4.Visible = xlSheetHidden
Sheet5.Visible = xlSheetHidden
Sheet6.Visible = xlSheetHidden
Sheet2.Shapes.Range(Array("Group 1")).Visible = False

ActiveSheet.Protect Password:="AdminHO", DrawingObjects:=False, Contents:=True, Scenarios:= _
False, AllowFormattingCells:=True, AllowFormattingColumns:=True, _
AllowFormattingRows:=True, AllowInsertingColumns:=True, AllowInsertingRows _
:=True, AllowDeletingColumns:=True, AllowDeletingRows:=True, AllowSorting _
:=True, AllowFiltering:=True, AllowUsingPivotTables:=True
End Sub
 
Thay cái sub hide thành thế này xem sao.
Mã:
Sub hide()
On Error Resume Next
Sheet3.Visible = xlSheetHidden
Sheet4.Visible = xlSheetHidden
Sheet5.Visible = xlSheetHidden
Sheet6.Visible = xlSheetHidden
Sheet2.Shapes.Range(Array("Group 1")).Visible = False

ActiveSheet.Protect Password:="AdminHO", DrawingObjects:=False, Contents:=True, Scenarios:= _
False, AllowFormattingCells:=True, AllowFormattingColumns:=True, _
AllowFormattingRows:=True, AllowInsertingColumns:=True, AllowInsertingRows _
:=True, AllowDeletingColumns:=True, AllowDeletingRows:=True, AllowSorting _
:=True, AllowFiltering:=True, AllowUsingPivotTables:=True
End Sub
Vẫn vậy anh à.
Không hề click gì vào Ô A1 luôn. mà nút undo nó cứ mờ , bấm CTRL Z không được luôn
 
anh ơi, code của anh sửa là nó khóa luôn pass là AdminHO ở ô A1, nếu em muốn sửa

If Target.Address(0, 0) = "A1" Then
If Target.Value = "AdminHO" Then

thành : nếu giá trị ở ô A1 = giá trị ở ô H1 thì phải sửa như thế nào vậy anh ? Mục đích là để cho các admin có thể tự mình thay đổi password theo ý muốn bằng cách : họ nhập password mới vào ô H1 . Sau đó ô A1 là ô để đối chiếu. Nếu giá trị 2 ô khớp nhau ==> đúng pass==> mở các sheet kia.
Nếu không khớp ==> không phải admin ==> ẩn các sheet kia
 
Web KT
Back
Top Bottom