Excel VBA表单复选框

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

嘿,我是Excel VBA新手,需要别人的帮助。以下是我正在寻找的:

如果选中某个未链接(表单)复选框(topleftcell?),则 其下方的某些复选框(.offset?)将被勾选(如果尚未勾选)

我不能使用单元格名称,因为上面的代码将应用于一堆列

这就是我所拥有的

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列,但有几十列,所以看起来我将处理和粘贴一堆复选框。但更重要的是,这是可行的。谢谢你,希德!!