VBA không tự động chạy

Liên hệ QC
Bác ạ, bác ơi bác giúp em thêm 1 vấn đề nữa được không ạ. Sau khi em là xong và khóa Protect Sheet lại, nhưng khi ấn Spinner 4 thì báo lỗi : " runtime error #1004 "unable to set hidden property of range class".
Cách 1.
Mở tập tin -> Alt + F11 -> đúp chuột trên ThisWorkbook -> dán code
Private Sub Workbook_Open()
Sheet3.Protect Password:="baybong", UserInterfaceOnly:=True
End Sub

Thay cho baybong thì nhập mật khẩu của mình.

Cách 2.
Mã:
Sub Spinner4_Change()
Dim Rng As Range
    Sheet3.Unprotect "baybong"
    Application.ScreenUpdating = False
    For Each Rng In [A39:A42]
        Rng.EntireRow.Hidden = Rng.Value = "0"
    Next Rng
    Application.ScreenUpdating = True
    Sheet3.Protect "baybong"
End Sub
-------------
Để người dùng không xem được code và thấy mật khẩu thì -> menu Tools -> chọn VBAProject Properties -> chọn thẻ Protection -> đánh dấu "Lock project for viewing" -> nhập mật khẩu 2 lần -> OK
 
Cách 1.
Mở tập tin -> Alt + F11 -> đúp chuột trên ThisWorkbook -> dán code


Thay cho baybong thì nhập mật khẩu của mình.

Cách 2.
Mã:
Sub Spinner4_Change()
Dim Rng As Range
    Sheet3.Unprotect "baybong"
    Application.ScreenUpdating = False
    For Each Rng In [A39:A42]
        Rng.EntireRow.Hidden = Rng.Value = "0"
    Next Rng
    Application.ScreenUpdating = True
    Sheet3.Protect "baybong"
End Sub
-------------
Để người dùng không xem được code và thấy mật khẩu thì -> menu Tools -> chọn VBAProject Properties -> chọn thẻ Protection -> đánh dấu "Lock project for viewing" -> nhập mật khẩu 2 lần -> OK
hì, em làm được rồi bác ạ. em chủ yếu là khóa không cho ai đổi số liệu thôi, chứ code vba thì em dấu làm gì đâu, mấy cái exell của em có gì là cao siêu đâu mà giấu, hì hì. Em chân thành cám ơn bác nhiều nhé, em chúc bác gặp nhiều thành công, may mắn và thắng lợi trong cuộc sống ạ
 
Như tôi đã đoán mò ở bài #3, bạn dùng Worksheet_Change. Nhưng sub Worksheet_Change không được gọi để thực thi khi sự thay đổi của ô/vùng là do công thức trong ô/vùng, và vài nguyên nhân khác. Trong A39:A42 có công thức mà như trên tôi viết sự thay đổi trong các ô đó không kéo theo việc thực thi Worksheet_Change. Sự thay đổi trong A39:A42 lại do K1 gây ra. Nhưng sự thay đổi trong K1 cũng không kéo theo việc thực hiện Worksheet_Change do K1 chỉ liên kết với "Spinner 4". Tuy nhiên sự thay đổi trong K1 là do việc nhấn "Spinner 4" gây ra. Vậy có thể gán macro cho "Spinner 4".

Cách 1.
- Xóa bỏ Worksheet_Change
- Phải chuột trên "Spinner 4" và chọn "Assign macro" -> chọn New -> sửa code vừa được tạo thành
Mã:
Sub Spinner4_Change()
Dim Rng As Range
    Application.ScreenUpdating = False
    For Each Rng In [A39:A42]
        Rng.EntireRow.Hidden = Rng.Value = "0"
    Next Rng
    Application.ScreenUpdating = True
End Sub

Cách 2.
Giữ nguyên Worksheet_Change nhưng không dùng "Spinner 4" mà tự nhập tay các giá trị vào K1. Khi K1 thay đổi do thao tác bằng tay thì Worksheet_Change được gọi ra để thực thi.
Sửa gọn Worksheet_Change thành
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range
    If Target.Address = "$K$1" Then
        Application.ScreenUpdating = False
        For Each Rng In [A39:A42]
            Rng.EntireRow.Hidden = Rng.Value = "0"
        Next Rng
        Application.ScreenUpdating = True
    End If
End Sub
Bác ơi em cũng gặp trường hợp tương tự nhưng em dùng Function. Nếu thay đổi giá trị cùng 1 sheet không sao, nhưng khi thay đổi giá trị khác sheet thì nó sẽ cho về giá trị 0. Bác giúp em với ạ

Em xin gửi mã:

Function LamCot(Target As Integer, rng As Range, ODau As Range)
Dim r As Range
Dim Mx As Single
Dim i As Long
Dim socot As Long
socot = ODau.Column
Mx = Application.Max(rng)
If Target > Mx * 2 Then
LamCot = "Gia tri khong phu hop"
Exit Function
Else
For Each r In rng
If Abs(Target - r) < Mx Then
Mx = Abs(Target - r)
i = r.Row
End If
Next r
End If
LamCot = Cells(i, socot)
End Function
 
Web KT

Bài viết mới nhất

Back
Top Bottom