在excel VBA中循环列的行直到为空
我有一个带有列“N”的工作表,其中包含30行,每行中都有复选框 在vba中,我想做一个循环,在空单元格处停止,即第31行,我尝试了以下方法:在excel VBA中循环列的行直到为空,excel,vba,Excel,Vba,我有一个带有列“N”的工作表,其中包含30行,每行中都有复选框 在vba中,我想做一个循环,在空单元格处停止,即第31行,我尝试了以下方法: Private Sub CommandButton1_Click() Range("N9").Select Do If CheckBox1.Value = True Then Call do_OM ActiveCell.Offset(1, 0).Select Loop while ActiveCel
Private Sub CommandButton1_Click()
Range("N9").Select
Do
If CheckBox1.Value = True Then Call do_OM
ActiveCell.Offset(1, 0).Select
Loop while ActiveCell.value = ""
End Sub
这个循环只适用于一行,这意味着带有复选框的单元格是空单元格,而我想要的是在没有复选框的单元格处停止。。怎么办
+
如何说“如果复选框(行号).Value=True?”
提前感谢:)编辑 此部分将遍历非活动的X复选框
Dim nm As Object
Set nm = ActiveSheet.CheckBox1
nm.TopLeftCell.Row
'Iteration
For Each nm In ActiveSheet.OLEObjects
If TypeName(nm.Object) = "CheckBox" Then
debug.print nm.TopLeftCell.row
If nm.Object.Value = True Then ' do stuff
End If
Next nm
由于复选框没有绑定到工作表,因此实际上没有一种方式来表示复选框(行号)
。也有意义,因为一行上可能有多个框。但是,如果复选框的名称与行号对齐,则可以遍历它们。不管怎样,你都可以重复它们,但是是的 你可以这样做:
For i = 1 To 30
ActiveSheet.CheckBoxes(i).Value
Next i
或
循环遍历这些框。第二张显然会贯穿整张纸。我不认为您可以检查单元格中是否有框,但您可以使用
.TopLeftCell.Row
检查该框所在的单元格,该行应返回对象左上角的行。然后,您可以使用Intersect
将其与范围交叉引用(可能还有.TopLeftCell.Column
)
可能有兴趣。但正如我所说的,它并不是真的检查一个单元格是否有复选框,而是按照我的建议使用Intersect检查所有复选框,并检查其中是否有任何复选框在单元格中。然而,你可以说最终结果是一样的
编辑注释:这是用于活动X框的注释
Dim nm As Object
Set nm = ActiveSheet.CheckBox1
nm.TopLeftCell.Row
'Iteration
For Each nm In ActiveSheet.OLEObjects
If TypeName(nm.Object) = "CheckBox" Then
debug.print nm.TopLeftCell.row
If nm.Object.Value = True Then ' do stuff
End If
Next nm
ActiveX复选框
- 删除、替换或注释
调试。使用您需要的内容打印
行,例如
(doom
调用
被视为不推荐使用)
- 请注意:
,但ole.Name
ole.Object.Value
选项显式
子复选框示例()
将ole设置为对象
对于ActiveSheet.OLEObjects中的每个ole
如果TypeName(ole.Object)=“复选框”,则
调试。打印
Debug.Print ole.Name,ole.TopLeftCell.Address(0,0)_
ole.BottomRightCell.Address(0,0)
如果ole.Object.Value=True,则
“不要
Debug.Print“复选框”&勾选ole.Name&“
其他的
Debug.Print“复选框”&未勾选ole.Name&“
如果结束
如果结束
下一个ole
端接头
子复选框示例2()
将ole设置为对象
对于ActiveSheet.OLEObjects中的每个ole
如果TypeName(ole.Object)=“复选框”,则
Debug.Print ole.Name,ole.TopLeftCell.Address(0,0)_
ole.BottomRightCell.Address(0,0)
使用ole.Object
Debug.Print.Caption.Value
以
如果结束
下一个ole
端接头
在本例中,您的选择实际上与复选框无关。无论您选择的单元格是什么,您始终会检查复选框1的值。那么,如何验证其中是否没有复选框?复选框是形状
,形状位于叠加在工作表网格上的不同UI层上。形状的位置由其左上角到Excel屏幕左上角的距离(以点为单位)定义,以便点(0,0)等于单元格A1的左上角。由于单元和形状位于不同的层上,因此单元不能处于形状中,也不能处于单元中。您可以在同一坐标处定位多个形状,但无法看到所有形状。您可以使用Z顺序来确定哪一个应该“在顶部”。谢谢您的回答,我将尝试这一个,您能告诉我例如,我有Dim nm作为字符串,其中nm包含复选框的名称(chekbox1或checkbox2..),为什么我不能应用这一行代码:row_se=nm&TopLeftCell。row我得到一个错误,我想得到这样的结果(如果nm=checkbox3)row_se=checkbox3.TopLeftCell.RowExcel对使用字符串和名称很挑剔。Dim nm作为一个对象,它应该可以工作,请参见编辑。我在迭代中得到了奇怪的结果,我意识到他们迭代了表单控制复选框,而不是活动的x复选框。我仍然会得到一些错误,啊,真的,因为我使用的是活动的x复选框,我真的不知道这两种类型之间的区别,尽管activex有打开的“查看代码”是的,对不起,这也让我有点困惑。第一部分应适用于其他部分,最后一部分应适用于活动X。