Excel VBA表单复选框
嘿,我是Excel VBA新手,需要别人的帮助。以下是我正在寻找的: 如果选中某个未链接(表单)复选框(topleftcell?),则 其下方的某些复选框(.offset?)将被勾选(如果尚未勾选) 我不能使用单元格名称,因为上面的代码将应用于一堆列 这就是我所拥有的Excel VBA表单复选框,excel,vba,checkbox,Excel,Vba,Checkbox,嘿,我是Excel VBA新手,需要别人的帮助。以下是我正在寻找的: 如果选中某个未链接(表单)复选框(topleftcell?),则 其下方的某些复选框(.offset?)将被勾选(如果尚未勾选) 我不能使用单元格名称,因为上面的代码将应用于一堆列 这就是我所拥有的 Set aaa = ActiveSheet.CheckBoxes(Application.Caller) With aaa.TopLeftCell If aaa.Value = 1 Then rsp
Set aaa = ActiveSheet.CheckBoxes(Application.Caller)
With aaa.TopLeftCell
If aaa.Value = 1 Then
rsp = MsgBox("Check boxes below?", 4)
If rsp = vbYes Then
certain checkboxes(.offset?) below will be unchecked &
.offset(0,0).value= "na"
假设您的复选框如下图所示。我故意没有把它们对齐 好的,这里有一个小技巧,我们将使用。依次右键单击
第1列中的所有复选框
,然后单击格式控制
。接下来转到Alt Text
选项卡并键入1
。对于第2列复选框,在Alt文本中键入2
。对所有15列重复此操作
现在,将下面的宏指定给所有顶部复选框
Sub CheckBox_Click()
Dim shp As Shape, MainShp As Shape
Dim Alttext As String
'~~> Get the checkbox which called the macro
Set MainShp = ActiveSheet.Shapes(Application.Caller)
'~~> Get it's alternate text
Alttext = MainShp.AlternativeText
'~~> Loop through all checkboxes except the checkbox which called it
'~~> and check for their alt text
For Each shp In ActiveSheet.Shapes
If shp.Name <> MainShp.Name And shp.AlternativeText = Alttext Then
'~~> If the top checkbox is checked then set the rest as checked
If MainShp.OLEFormat.Object.Value = 1 Then
shp.OLEFormat.Object.Value = 1
Else
shp.OLEFormat.Object.Value = 0
End If
End If
Next
End Sub
子复选框\u单击()
变暗shp为形状,主shp为形状
将文本设置为字符串
“~~>获取调用宏的复选框
Set MainShp=ActiveSheet.Shapes(Application.Caller)
“~~>获取它的备用文本
Alttext=MainShp.AlternativeText
“~~>循环遍历所有复选框,但调用它的复选框除外
“~~>并检查其alt文本
对于ActiveSheet.Shapes中的每个shp
如果shp.Name MainShp.Name和shp.AlternativeText=Alttext,则
“~~>如果选中了顶部复选框,则将其余复选框设置为选中
如果MainShp.OLEFormat.Object.Value=1,则
shp.OLEFormat.Object.Value=1
其他的
shp.OLEFormat.Object.Value=0
如果结束
如果结束
下一个
端接头
现在,当您单击最上面的复选框时,它将选中下面所有复选框,这些复选框具有与顶部复选框相同的Alt text
。使用。topleftcell
是不可靠的,因为如果行/列收缩/增长,则代码将失败。一列中有多少个复选框?实际上,如果列增大或缩小,则不会影响上面模块链接到的复选框的位置。该复选框将始终位于顶部。现在,我有15列,但是如果选中了最上面的复选框,我只想选中某些列。如果行增长/收缩呢?这不重要。我最上面的单元格将始终在那里,每当我选中它时,我希望下面的某些复选框(其位置不会改变)也被选中。好吧,那么,一列中有多少个复选框?我非常感谢您的时间。我不太担心,因为正如我所提到的,我并没有把下面所有的复选框都挂在墙上。只有“确定”的。虽然您的方法有效,但我希望继续使用我的代码,或许可以使用intersect、topleftcell.offset之类的东西。可以在这里简单地使用偏移量,而不必链接到我的单元格,或者使用包含支票盒的单元格的左侧、顶部、高度和重量。我不会将下面的所有单元格都围起来进行核对。
单元格?或者复选框?如果没有,我可以继续使用您的代码,但它需要工作,所以只有某些已定义的复选框不被选中。例如,如果选中了top复选框,则也需要选中3和5复选框。再次感谢您将3和5的alt text
复选框与顶部复选框相同。正如我前面提到的,将.topleftcell
与一起使用。offset
将非常不可靠。我给你的代码不会失败,不管你把复选框放在哪里。当然。所以代码的工作方式和我想的一样。唯一的问题是,我没有15列,但有几十列,所以看起来我将处理和粘贴一堆复选框。但更重要的是,这是可行的。谢谢你,希德!!