【发布时间】:2013-11-16 09:53:11
【问题描述】:
我正在尝试编写一个 VBA 代码,该代码将取消选中 Excel 中工作表上的所有复选框,并删除复选框左侧单元格中的数据(这是一个从另一个宏填充的日期,当复选框已检查)。
我的复选框来自表单工具栏。我可以取消选中这些框,但只要我插入代码以删除我得到的日期
运行时错误“1004”“无法获取工作表类的复选框属性”。
这是我正在尝试使用的代码:
Sub ClearAllCheckboxes()
Dim Answer As String
Dim MyNote As String
Dim CB As Object
Dim LRange As String
Dim cBox As CheckBox
LName = Application.Caller
Set cBox = ActiveSheet.CheckBoxes(LName)
MyNote = "This will Clear all CheckBoxes Proceed? "
Answer = MsgBox(MyNote, vbQuestion + vbYesNo, "???")
LRange = "F" & CStr(LRow)
If Answer = vbNo Then
Exit Sub
Else
For Each CB In ActiveSheet.CheckBoxes
CB.Value = xlOff
If cBox.Value = 0 Then
ActiveSheet.Range(LRange).Value = Null
End If
Next CB
End If
End Sub
这是复选框中用于添加日期并将信息记录在另一个工作表中的代码:
Sub Process_CheckBox()
Dim cBox As CheckBox
Dim LRow As Integer
Dim LColumn As Integer
Dim RRow As Integer
Dim LRange As String
Dim RRange As String
Dim ERange As String
Dim FRange As String
LName = Application.Caller
Set cBox = ActiveSheet.CheckBoxes(LName)
'Find row that checkbox resides in
LRow = cBox.TopLeftCell.Row
LRange = "F" & CStr(LRow)
RRow = cBox.TopLeftCell.Row
RRange = "B" & CStr(RRow)
ERange = "E" & CStr(RRow)
FRange = "F" & CStr(RRow)
'Change date in column B, if checkbox is checked
If cBox.Value > 0 Then
ActiveSheet.Range(LRange).Value = Date
ActiveSheet.Range(RRange).Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Log").Select
Range("A" & ActiveSheet.Rows.Count). _
End(xlUp).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
Columns("A:A").EntireColumn.AutoFit
Sheets("Daily").Select
ActiveSheet.Range(ERange).Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Log").Select
Range("D" & ActiveSheet.Rows.Count). _
End(xlUp).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
Sheets("Daily").Select
ActiveSheet.Range(FRange).Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Log").Select
Range("C" & ActiveSheet.Rows.Count). _
End(xlUp).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
'Clear date in column B, if checkbox is unchecked
Else
ActiveSheet.Range(LRange).Value = Null
End If
End Sub
【问题讨论】:
-
变量LRow的值在哪里设置? LRange 永远不会等于仅显示代码的有效范围地址。
-
另外,什么在调用这个函数(正如@DavidZemens 在下面询问的那样,运行它会导致错误,除非调用它的对象与复选框同名)?而且这不会总是将 cBox 设置为 FALSE 并始终清除日期吗?
-
LRow 上的好消息。我已经调整为将 DIM LRow 添加为整数,但仍然出现错误。我通过表单工具栏创建的工作表上的按钮调用代码。我对 VBA 很陌生,所以我从我编写的代码中提取了很多这些内容,以添加选中复选框的日期并在未选中时将其删除。我希望按钮一次将其全部删除。
-
这是我用于复选框的代码。它在另一张表中添加日期和记录信息: