Public Sub CheckBoxCaller()
On Error Resume Next
SetDateByCheckBox Application.Caller(1)
End Sub
Private Sub SetDateByCheckBox(ByVal LabelName As String)
Const PixelsPer# = 1.3333333333333
On Error Resume Next
Dim X As Single, Y As Single, Sp As Object, RNG As Range
Set Sp = ActiveSheet.Shapes(LabelName)
X = (Sp.Left + Sp.Width + 4) * PixelsPer + Application.ActiveWindow.Panes(1).PointsToScreenPixelsX(Application.ActiveWindow.Panes(1).VisibleRange.Left)
Y = (Sp.Top) * PixelsPer + Application.ActiveWindow.Panes(1).PointsToScreenPixelsY(Application.ActiveWindow.Panes(1).VisibleRange.Top)
Set RNG = Application.Windows(1).RangeFromPoint(X, Y)
If ActiveSheet.CheckBoxes(LabelName).value = 1 Then
RNG.value = VBA.Now()
Else
RNG.value = ""
End If
Set Sp = Nothing: Set RNG = Nothing
End Sub
Dạ, anh ơi nó báo như này ạ,Copy Code bên dưới vào một Public Module bất kì.
Sau đó chuột phải vào CheckBox chọn Gán Macro (Assign Macro)
Chọn hoặc dán CheckBoxCaller vào và chọn OK.
---------------------------
PHP:Public Sub CheckBoxCaller() On Error Resume Next SetDateByCheckBox Application.Caller(1) End Sub Private Sub SetDateByCheckBox(ByVal LabelName As String) Dim X As Single, Y As Single, Sp As Object, RNG As Range Set Sp = ActiveSheet.Shapes(LabelName) X = Sp.Left: Y = Sp.Top Set RNG = Application.ActiveWindow.RangeFromPoint(X, Y) RNG(1, 2).value = VBA.Now() Set Sp = Nothing: Set RNG = Nothing End Sub
lúc em click vào ạCopy Code bên dưới vào một Public Module bất kì.
Sau đó chuột phải vào CheckBox chọn Gán Macro (Assign Macro)
Chọn hoặc dán CheckBoxCaller vào và chọn OK.
---------------------------
PHP:Public Sub CheckBoxCaller() On Error Resume Next SetDateByCheckBox Application.Caller(1) End Sub Private Sub SetDateByCheckBox(ByVal LabelName As String) Dim X As Single, Y As Single, Sp As Object, RNG As Range Set Sp = ActiveSheet.Shapes(LabelName) X = Sp.Left: Y = Sp.Top Set RNG = Application.ActiveWindow.RangeFromPoint(X, Y) RNG(1, 2).value = VBA.Now() Set Sp = Nothing: Set RNG = Nothing End Sub
Public Sub CheckBoxCaller()
On Error Resume Next
SetDateByCheckBox Application.Caller(1), "G"
End Sub
Public Sub AssignMacroCheckBoxes()
Dim CB As Shape
For Each CB In ActiveSheet.Shapes
If CB.Type = 8 Then
CB.OnAction = "CheckBoxCaller"
End If
Next
End Sub
Private Sub SetDateByCheckBox(ByVal LabelName As String, Optional ByVal ColName$ = "G")
On Error Resume Next
Dim X As Single, Y As Single, Sp As Object, RNG As Range,Tmp
Set Sp = ActiveSheet.Shapes(LabelName)
X = 2 + Application.ActiveWindow.Panes(1).PointsToScreenPixelsX(Application.ActiveWindow.Panes(1).VisibleRange.Left)
Y = Application.ActiveWindow.Panes(1).PointsToScreenPixelsY(Sp.Top + Application.ActiveWindow.Panes(1).VisibleRange.Top)
Set RNG = Application.Windows(1).RangeFromPoint(X, Y)
Set RNG = ActiveSheet.Range(ColName & RNG.Row)
Tmp = RNG .Value
If ActiveSheet.CheckBoxes(LabelName).value = 1 Then
RNG.value = VBA.Now()
Else
RNG.value = Tmp
End If
Set Sp = Nothing: Set RNG = Nothing
End Sub
1. Code chắc chắn chưa chuẩn. Xem hình dưới, chú ý là dòng nhìn thấy đầu tiên là dòng 3.Copy code dưới vào module
Sửa cột "G" trong CheckBoxCaller thành cột mong muốn
Chọn Sheet cần thực hiện và Click con trỏ chuột vào dòng code AssignMacroCheckBoxes và bấm F5