【发布时间】:2019-02-10 11:56:08
【问题描述】:
我在 excel 上,我有大约 30 个用户窗体复选框,每个复选框都位于一个名为“摘要”的页面上的一个大列中。每一个都对应一个工作表。我正在尝试遍历这些复选框以查看哪些已勾选,哪些未勾选。我在所有工作表的循环中放了一些代码,这是不起作用的位:
Private Sub Run_Click()
Dim SummaryFirstBlankRow As Integer
Dim LastRow As Integer
Dim LastRowH As Integer
Dim rng As Range
Dim SumOfHours As Variant
Dim EndLoop As Boolean
Dim DupeRowNo As Integer
Dim RowNo2 As Integer
Dim ClearContent As Boolean
Dim cbtrue As Boolean
Dim ws As Worksheet
cbtrue = False
For Each ws In ActiveWorkbook.Worksheets
LastRowH = ws.Cells(Rows.Count, 8).End(xlUp).Offset(1, 0).Row
'If ActiveWorkbook.Sheets("Summary").CheckBoxes(ws.name).Value = False Then ' looks to see if ws.names' checkbox is checked or not
' ClearContent = True 'if not checked, sets clear content to true
'End If
For Each CheckBox In Sheets("Summary").CheckBoxes
If CheckBox.name = ws.name Then
If CheckBox.Value = False Then
ClearContent = True
End If
End If
Next CheckBox
If ClearContent = True Then
For c = 1 To LastRowH 'if not checked, looks on current worksheet (within loop) and if any "Y" or "y" vals, clears them
If ws.Range("H" & c).Value = "Y" Or ws.Range("H" & c).Value = "y" Then
ws.Range("H" & c).ClearContents
End If
Next
End If
...
cbtrue 只是一个用于查看复选框是否存在的变量,因此如果存在,它将转到 if 语句,此时它将确定该复选框是否被勾选,这取决于它保存 ClearContent 变量(我稍后会在代码中使用)。
问题是当涉及到 'Shapes("ws.Name")' 时,ws.name 只是每个循环上工作表的名称。所以在循环的第一轮,它将是“摘要”......但是,我认为它正在物理上搜索显然不存在的工作表“ws.name”。我尝试从引号中删除它以及其他各种方法,例如 'Checkboxes("ws.Name")' 但似乎它们都有相同的问题。
我发帖是想看看是否有人可以为我提供另一种方法,或者告诉我哪里出错了,因为我认为我没有完全理解语法。
任何帮助表示赞赏。在此先感谢:)
更新
我在@Xabier 的帮助下更改了代码(我添加了一个额外的 if 语句以确保 CheckBox 与工作表具有相同的名称。我现在没有收到任何错误,但是当我运行它时,它没有清除我请求的任何单元格的内容。我似乎无法发现它为什么这样做,如果有人能发现它并告诉我,那就太好了。谢谢:)
【问题讨论】:
-
使用
.Shapes(ws.Name)有什么问题? -
"对象不支持该属性或方法"
-
好吧,我们在您的代码中看不到
ws的来源。ws在哪里以及如何初始化? -
我已经更新了代码,所以你可以更容易地看到我做了什么/我想要做什么。我尝试将 Shapes(ws.Name) 更改为 CheckBoxes(ws.Name)... 但我仍然收到一条错误消息:“无法获取工作表类的 checkboxes 属性”
-
我再次更新了代码,我非常确信循环等没有任何问题。我唯一能想到的是以下内容不适用于表单控制复选框(仅适用于 ActiveX )。
CheckBox.name = ws.name Then If CheckBox.Value = False Then ClearContent = True
标签: vba excel checkbox userform