tuananhya2
Thành viên mới

- Tham gia
- 18/8/12
- Bài viết
- 8
- Được thích
- 0
Co ai chỉ dùm cách tạo pass marco với
Sub Khoa_Mo()
Dim sh As Worksheet, shapes
Application.ScreenUpdating = False
On Error Resume Next
With shapes("Button 1").TextFrame.Characters
For Each sh In ThisWorkbook.Worksheets
sh.Protect "hv" = .Text = "Khoa"
Next
.Text = IIf(.Text = "Khoa", "Mo", "Khoa")
End With
Application.ScreenUpdating = True
End Sub
Em có code Protect & unprotect toàn bộ các Sheet trong 1 File
Em có nút Button 1, để khi nhấn thì nó hiện chữ " Khoa", "Mo"Mã:Sub Khoa_Mo() Dim sh As Worksheet, shapes Application.ScreenUpdating = False On Error Resume Next With shapes("Button 1").TextFrame.Characters For Each sh In ThisWorkbook.Worksheets sh.Protect "hv" = .Text = "Khoa" Next .Text = IIf(.Text = "Khoa", "Mo", "Khoa") End With Application.ScreenUpdating = True End Sub
Không biết code còn sai chỗ nào mà nó kh chạy & nút Button 1 không hiện chữ " Khoa", "Mo"
Em nhờ Thầy cô & anh chị giúp em, em cảm ơn!
Sub WksProtected(ByVal isLock As Boolean, ByVal sPW As String)
Dim wks As Worksheet
For Each wks In ThisWorkbook.Worksheets
If isLock Then
wks.Protect sPW, [COLOR=#ff0000]False[/COLOR]
Else
wks.Unprotect sPW
End If
Next
End Sub
Sub Main()
With ActiveSheet.shapes("Button 1").TextFrame.Characters
WksProtected (.Text = "Khoa"), "hv"
.Text = IIf(.Text = "Khoa", "Mo Khoa", "Khoa")
End With
End Sub
Sub Khoa_Mo()
Dim sh As Worksheet, shp As Shape
Application.ScreenUpdating = False
Set shp = ActiveSheet.shapes("Button 1")
' On Error Resume Next
With shp.TextFrame.Characters
For Each sh In ThisWorkbook.Worksheets
If .Text = "Khoa" Then
sh.Protect "hv", [COLOR=#ff0000]False[/COLOR]
Else
sh.Unprotect "hv"
End If
Next
.Text = IIf(.Text = "Khoa", "Mo", "Khoa")
End With
Application.ScreenUpdating = True
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
If Target.Address = [g7].Address Then
If Target.Value <> Sheets("MuaVao").Range("G7").Value Then MsgBox " So Chua chinh xac"
End If
Application.ScreenUpdating = True
End Sub
Mình không rành lắm trong chuyện nhìn code đoán ý đồ nhưng mình thấy câu lệnh này kỳ kỳ bạn ạ :GIÚP EM SỬA LỖI CODE
--------------------
Trong File em có 2 sheet là "ToKhai" Và "MuaVao"
Tại G7 của Sheet "ToKhai" em có đặt List Validation
Trong Sheet "ToKhai" em có code như sau
Mục đích em khi chọn cell G7 của sheet "ToKhai" mà có giá trị khác với giá trị cell G7 của sheet "MuaVao" thì thông báo "So Chua chinh xac"Mã:Private Sub Worksheet_Change(ByVal Target As Range) Application.ScreenUpdating = False If Target.Address = [g7].Address Then If Target.Value <> Sheets("MuaVao").Range("G7").Value Then MsgBox " So Chua chinh xac" End If Application.ScreenUpdating = True End Sub
Nhưng code em chưa chính xác! nên nó kg thèm thông báo!
Nhờ Thầy cô & anh chị giúp em.Em cảm ơn!
Mình thấy code không sai. Có thể do nguyên nhân khác. Gởi file lên xem thử thì biết liềnGIÚP EM SỬA LỖI CODE
--------------------
Trong File em có 2 sheet là "ToKhai" Và "MuaVao"
Tại G7 của Sheet "ToKhai" em có đặt List Validation
Trong Sheet "ToKhai" em có code như sau
Mục đích em khi chọn cell G7 của sheet "ToKhai" mà có giá trị khác với giá trị cell G7 của sheet "MuaVao" thì thông báo "So Chua chinh xac"Mã:Private Sub Worksheet_Change(ByVal Target As Range) Application.ScreenUpdating = False If Target.Address = [g7].Address Then If Target.Value <> Sheets("MuaVao").Range("G7").Value Then MsgBox " So Chua chinh xac" End If Application.ScreenUpdating = True End Sub
Nhưng code em chưa chính xác! nên nó kg thèm thông báo!
Nhờ Thầy cô & anh chị giúp em.Em cảm ơn!
Câu lệnh này tương đương nhau bé Còi ơiIf Target.Address = [g7].Address
Sao không viết là :
If Target.Address = "$G$7"
Nếu có thể cho mình ngó cái file được không???
Cảm ơn HMTC, làm từ nãy đến giờ nó không thông báo, mở file định gởi lên mạng thì nó hiện thông báo!!!Mình không rành lắm trong chuyện nhìn code đoán ý đồ nhưng mình thấy câu lệnh này kỳ kỳ bạn ạ :
If Target.Address = [g7].Address
Sao không viết là :
If Target.Address = "$G$7"
Nếu có thể cho mình ngó cái file được không???
I see nhưng em cứ thích sửa thành thế đó, làm gì được nhau nào? he he...Nói vậy thôi chứ đó là thói quen của em mà, anh có công nhận sửa thế trông code nó đẹp hơn và chính tắc hơn không?Mình thấy code không sai. Có thể do nguyên nhân khác. Gởi file lên xem thử thì biết liền
Câu lệnh này tương đương nhau bé Còi ơi
+ + Ẹ..........Cảm ơn HMTC, làm từ nãy đến giờ nó không thông báo, mở file định gởi lên mạng thì nó hiện thông báo!!!
Chắc nó sợ HMTC!!!
Cảm ơn HMTC, làm từ nãy đến giờ nó không thông báo, mở file định gởi lên mạng thì nó hiện thông báo!!!
Chắc nó sợ HMTC!!!
Theo kyo nghĩ là tại dòng Application.ScreenUpdating = False nên nó mới bị trơ trơ đây. Do nó chưa được True (tức là chưa làm xong hết) thì hoặc là code lỗi và người dùng stop lại hoặc nó đang chạy giữa chừng đi break nó nên nó đơ luôn.Sự kiện Change nó hơi nhạy cảm! Đôi lúc ta test code bị lỗi, sửa lại code đúng rồi nhưng cái sự kiện Change ấy vẫn cứ trở trơ ra
Kinh nghiệm của tôi: Đóng và lưu file, xong mở lại rồi test tiếp
Sub Khoa_Mo()
Dim sh As Worksheet, shp As Shape
Application.ScreenUpdating = False
Set shp = ActiveSheet.Shapes("Button 2")
With shp.TextFrame.Characters
For Each sh In ThisWorkbook.Worksheets
If .Text = "Mo" Then
sh.Unprotect "HV"
Else
sh.Protect "HV", False
End If
Next
.Text = IIf(.Text = "Mo", "Khoa", "Mo")
End With
Application.ScreenUpdating = True
End Sub
Sub ShowAllShs_T() Dim sh As Worksheet
Application.ScreenUpdating = False
On Error Resume Next
With Sheet4.Shapes("Button 1").TextFrame.Characters
For Each sh In ThisWorkbook.Worksheets
If sh.Name <> "Main" Then
sh.Visible = .Text = "SHOW ALL"
End If
Next
.Text = IIf(.Text = "SHOW ALL", "HIDE ALL", "SHOW ALL")
End With
Application.ScreenUpdating = True
End Sub
Sub Auto_Open()
Dim wks As Worksheet, shp1 As Shape, shp2 As Shape
Set wks = Worksheets("Main")
Set shp1 = wks.Shapes("Button 1")
If shp1.TextFrame.Characters.Text = "HIDE ALL" Then ShowAllShs_T
'******************
Set shp2 = wks.Shapes("Button 2")
If shp2.TextFrame.Characters.Text = "Khoa" Then Khoa_Mo
End Sub
Theo kyo nghĩ là tại dòng Application.ScreenUpdating = False nên nó mới bị trơ trơ đây. Do nó chưa được True (tức là chưa làm xong hết) thì hoặc là code lỗi và người dùng stop lại hoặc nó đang chạy giữa chừng đi break nó nên nó đơ luôn.
Nếu thấy đơ cứ lôi Immediate Window ra cho nó True là xong.
Sửa đoạn màu đỏ thành vầy sh.Visible = (.Text = "SHOW ALL") + 2Em có sưu tầm 1 số code của Thầy Ndu như:
Nhưng khi mở File và Disable thì em vẫn có thể mở các sheet bằng cách Format/sheet/UnhideMã:Sub ShowAllShs_T() Dim sh As Worksheet Application.ScreenUpdating = False On Error Resume Next With Sheet4.Shapes("Button 1").TextFrame.Characters For Each sh In ThisWorkbook.Worksheets If sh.Name <> "Main" Then [COLOR=#ff0000][B]sh.Visible = .Text = "SHOW ALL"[/B][/COLOR] End If Next .Text = IIf(.Text = "SHOW ALL", "HIDE ALL", "SHOW ALL") End With Application.ScreenUpdating = True End Sub
Vậy cho em hỏi có cách nào khi mở File nếu không Enable thì không thể nào làm hiện các Sheet bằng Format/sheet/Unhide? Giống như các Sheet bị ẩn bởi Very Hidden !
Em cảm ơn!
If Array(I, 3) > 0,001 Or Array(I, 4) > 0,001 Then
Bạn đưa File chứa Code của bạn lên xem bị lỗi là do nào. Tôi tạm đoán do dấu cách thập phân của bạn không đúng với quy định trong máy (có thể thay dấu , bằng .).Trong code làm sao quy định nó lớn hơn 0,001 (Không phẩy không không một) được
Ex:Mình làm như trên thì báo lỗiMã:If Array(I, 3) > 0,001 Or Array(I, 4) > 0,001 Then
Vậy cho hỏi code trên sửa như thế nào?
Cảm ơn các bạn!
Bạn đưa File chứa Code của bạn lên xem bị lỗi là do nào. Tôi tạm đoán do dấu cách thập phân của bạn không đúng với quy định trong máy (có thể thay dấu , bằng .).
Dạ tại bạn ấy nói là "Lỗi" nhưng không nói là lỗi do công đoạn nào. VBA luôn hiểu dấu phân cách là dấu chấm nên nếu lỗi tại cửa sổ lập trình thì do bạn ấy dùng dấu phẩy (lỗi ngay tại quá trình viết Code chứ chưa có Run Code). Em đoán là như vậy thầy ah.Nếu tôi nhớ không lầm thì cho dù ta Set định dạng number trong Control Panel thế nào đi nữa thì trong VBA vẫn theo chuẩn Mỹ (tức dấu chấm là dấu thập phân và dấu phẩy là dấu phân cách ngàn)
Thí nghiệm xem!
1/ Định dạng number trong Control Panel của tôi là: dấu phẩy dùng ngăn cách số thập phân. Dấu chấm phẩy dùng để ngăn cách trong công thứcDạ tại bạn ấy nói là "Lỗi" nhưng không nói là lỗi do công đoạn nào. VBA luôn hiểu dấu phân cách là dấu chấm nên nếu lỗi tại cửa sổ lập trình thì do bạn ấy dùng dấu phẩy (lỗi ngay tại quá trình viết Code chứ chưa có Run Code). Em đoán là như vậy thầy ah.
1/ Định dạng number trong Control Panel của tôi là: dấu phẩy dùng ngăn cách số thập phân. Dấu chấm phẩy dùng để ngăn cách trong công thức
2/ Khi nhập 0,001 trong cửa sổ VBA thì bị báo lỗi dòng màu đỏ là "Expected Then or GoTo" (chứ không phải Run code mới báo lỗi)