选择/取消选择EXCEL VBA宏范围中的所有复选框
我正在创建一个VBA宏来选择工作表中的所有复选框,它可以正常工作,但现在我想调整代码以仅选择和取消选择特定范围内的复选框 这是我的密码选择/取消选择EXCEL VBA宏范围中的所有复选框,vba,excel,checkbox,Vba,Excel,Checkbox,我正在创建一个VBA宏来选择工作表中的所有复选框,它可以正常工作,但现在我想调整代码以仅选择和取消选择特定范围内的复选框 这是我的密码 Sub Select_all() Dim Cbox As CheckBox Dim Rng As Range Set Rng = ActiveWorkbook.Sheets("Sheet4").Range("B7, B104") For Each Cbox In ActiveSheet.CheckBoxes If Not Intersect(Cbox.T
Sub Select_all()
Dim Cbox As CheckBox
Dim Rng As Range
Set Rng = ActiveWorkbook.Sheets("Sheet4").Range("B7, B104")
For Each Cbox In ActiveSheet.CheckBoxes
If Not Intersect(Cbox.TopLeftCell, Rng) Is Nothing Then
If Cbox.name <> ActiveSheet.CheckBoxes("Check Box 104").name Then
Cbox.Value = ActiveSheet.CheckBoxes("Check Box 104").Value
End If
End If
Next Cbox
End Sub
Sub-Select_-all()
将Cbox设置为Dim复选框
变暗Rng As范围
设置Rng=ActiveWorkbook.Sheets(“Sheet4”).范围(“B7,B104”)
对于ActiveSheet.checkbox中的每个Cbox
如果不相交(Cbox.TopLeftCell,Rng)则为空
如果Cbox.name ActiveSheet.checkbox(“复选框104”).name则
Cbox.Value=ActiveSheet.checkbox(“复选框104”).Value
如果结束
如果结束
下一个Cbox
端接头
我补充说
如果不相交(Cbox.TopLeftCell,Rng)则为空
但它不会改变任何东西,当我删除这个部分时,它会选择表中的所有复选框,我只需要范围(“B7:B104”)
有什么建议吗?非常感谢。这对我很有用。但我把cb改为“1”,因为我的测试表上没有104个。B7:B104范围内的任何cb都将更改为cb1的值,您可以在脚本中将其更改为cb104
Sub Link_Checkboxes_To_Cells()
Dim cBox As CheckBox
For Each cBox In Sheet1.CheckBoxes
If Not Intersect(cBox.TopLeftCell, Range("B7:B104")) Is Nothing Then
If cBox.Name <> ActiveSheet.CheckBoxes("Check Box 1").Name Then
cBox.Value = ActiveSheet.CheckBoxes("Check Box 1").Value
End If
End If
Next cBox
End Sub
子链接\u复选框\u到\u单元格()
将cBox设置为Dim复选框
对于Sheet1.1中的每个cBox复选框
如果不相交(cBox.TopLeftCell,Range(“B7:B104”))则为零
如果cBox.Name ActiveSheet.checkbox(“复选框1”).Name则
cBox.Value=ActiveSheet.checkbox(“复选框1”).Value
如果结束
如果结束
下一个cBox
端接头
这对我很有用。但我把cb改为“1”,因为我的测试表上没有104个。B7:B104范围内的任何cb都将更改为cb1的值,您可以在脚本中将其更改为cb104
Sub Link_Checkboxes_To_Cells()
Dim cBox As CheckBox
For Each cBox In Sheet1.CheckBoxes
If Not Intersect(cBox.TopLeftCell, Range("B7:B104")) Is Nothing Then
If cBox.Name <> ActiveSheet.CheckBoxes("Check Box 1").Name Then
cBox.Value = ActiveSheet.CheckBoxes("Check Box 1").Value
End If
End If
Next cBox
End Sub
子链接\u复选框\u到\u单元格()
将cBox设置为Dim复选框
对于Sheet1.1中的每个cBox复选框
如果不相交(cBox.TopLeftCell,Range(“B7:B104”))则为零
如果cBox.Name ActiveSheet.checkbox(“复选框1”).Name则
cBox.Value=ActiveSheet.checkbox(“复选框1”).Value
如果结束
如果结束
下一个cBox
端接头
@JuniorDev
上面的代码不适合您有几个原因。我会试着把它们列出来
以上代码适用于“表单控件”复选框,而不是ActiveX类型的复选框。ActiveX复选框需要不同的代码。或者您可能没有名为“复选框1”的表单复选框。但我认为这会给你一个错误。或者您的其他复选框可能不在范围内(“B7:B104”)。您可以尝试将其更改为范围(“A1:Z10000”),以确保您的复选框在该范围内
如果不确定复选框的类型,则可以运行以下代码来查找它们的名称以及它们是什么类型的控件(窗体或activex)。它将在VB编辑器的即时窗口中打印信息
Sub CheckboxLoop()
'PARTIAL SOURCE: www.TheSpreadsheetGuru.com/the-code-vault
Dim cb As Shape
'Loop through Form Checkboxes
For Each cb In ActiveSheet.Shapes
If cb.Type = msoFormControl Then
If cb.FormControlType = xlCheckBox Then
Debug.Print "Form Control: " & cb.Name
End If
End If
Next cb
'Loop through ActiveX Checkboxes
Dim ChkBx As OLEObject
For Each ChkBx In ActiveSheet.OLEObjects
If TypeName(ChkBx.Object) = "CheckBox" Then
Debug.Print "ActiveX Control: " & ChkBx.Name
End If
Next ChkBx
End Sub
@朱尼奥德夫
上面的代码不适合您有几个原因。我会试着把它们列出来
以上代码适用于“表单控件”复选框,而不是ActiveX类型的复选框。ActiveX复选框需要不同的代码。或者您可能没有名为“复选框1”的表单复选框。但我认为这会给你一个错误。或者您的其他复选框可能不在范围内(“B7:B104”)。您可以尝试将其更改为范围(“A1:Z10000”),以确保您的复选框在该范围内
如果不确定复选框的类型,则可以运行以下代码来查找它们的名称以及它们是什么类型的控件(窗体或activex)。它将在VB编辑器的即时窗口中打印信息
Sub CheckboxLoop()
'PARTIAL SOURCE: www.TheSpreadsheetGuru.com/the-code-vault
Dim cb As Shape
'Loop through Form Checkboxes
For Each cb In ActiveSheet.Shapes
If cb.Type = msoFormControl Then
If cb.FormControlType = xlCheckBox Then
Debug.Print "Form Control: " & cb.Name
End If
End If
Next cb
'Loop through ActiveX Checkboxes
Dim ChkBx As OLEObject
For Each ChkBx In ActiveSheet.OLEObjects
If TypeName(ChkBx.Object) = "CheckBox" Then
Debug.Print "ActiveX Control: " & ChkBx.Name
End If
Next ChkBx
End Sub
很抱歉让一篇旧文章死灰复燃,但我讨厌没有解决方案的时候,我知道答案,这是很少见的。谢谢,这对我目前正在做的一个项目很有帮助 如果你和我一样,为了清楚起见,我会更改所有的工作表名称
For Each cBox In Sheet1.CheckBoxes
John Muggins代码中的这一行将您限制为工作表名称“Sheet1”。我可以把线路改成
For Each cBox In ActiveSheet.CheckBoxes
…而且它工作得很好。很抱歉恢复了一篇旧帖子,但我讨厌它没有提供解决方案,而且我知道答案,而答案很少。谢谢,这对我目前正在做的一个项目很有帮助 如果你和我一样,为了清楚起见,我会更改所有的工作表名称
For Each cBox In Sheet1.CheckBoxes
John Muggins代码中的这一行将您限制为工作表名称“Sheet1”。我可以把线路改成
For Each cBox In ActiveSheet.CheckBoxes
…而且它工作得很好。您为什么将范围定义为
范围(“B7,B104”)
?这意味着它只有两个单元格B7和B104,而不是单元格B7:B104的范围。然后在你的代码下面,你把范围(“B7:B104”)
的正确定义放在下面,所以换个说法。它们是ActiveX复选框还是表单控件复选框?@tigeravatar我也这么做了,我只是错误地粘贴了代码。@RobinMackenzie表单控件复选框你为什么把范围定义为范围(“B7,B104”)
?这意味着它只有两个单元格B7和B104,而不是单元格B7:B104的范围。然后在你的代码下面,你把范围(“B7:B104”)
的正确定义放在下面,所以就换成它。它们是ActiveX复选框还是表单控件复选框?@tigeravatar我也这么做了,我只是错误地粘贴了代码。@RobinMackenzie表单控件复选框谢谢你的回答。但奇怪的是为什么它不起作用。我试过一本新的练习册,它是一样的。我需要添加一些参考资料吗?还是一些配置?谢谢你的回答。但奇怪的是为什么它不起作用。我试过一本新的练习册,它是一样的。我需要添加一些参考资料吗?还是一些配置?