Excel 单元格是否包含复选框?

Excel 单元格是否包含复选框?,excel,vba,Excel,Vba,我有两种复选框 每种类型的复选框都在其“列”中定义: 第一个被命名为“CheckBoxeMacro”&i(在第3列中),并且 第二个在(第5列)中命名为“CheckBox”&i 我想要第二种类型的复选框来描述我关于总和的指令,只要要添加的数据是在两个单元格之间的行中设置的,而第一种类型的复选框(“checkboxMacro”&I)是在两个单元格之间设置的 我试过了,但似乎“TypeOf”用错了 当单元格包含复选框而不是数字或什么都没有时,如何使用必须停止的事实停止到正确的行 Sub Somm

我有两种复选框

每种类型的复选框都在其“列”中定义:

  • 第一个被命名为
    “CheckBoxeMacro”&i
    (在第3列中),并且
  • 第二个在(第5列)中命名为
    “CheckBox”&i
我想要第二种类型的复选框来描述我关于总和的指令,只要要添加的数据是在两个单元格之间的行中设置的,而第一种类型的复选框(
“checkboxMacro”&I
)是在两个单元格之间设置的

我试过了,但似乎“
TypeOf
”用错了

当单元格包含复选框而不是数字或什么都没有时,如何使用必须停止的事实停止到正确的行

Sub SommerTest()
    Dim i As Byte
    For r = 1 To 178
        If TypeOf Sheets(2).Cells(r, 3) Is Object  Then
            For i = r + 1 To 178
                While IsNumeric(Sheets(2).Cells(i, 3)) _
                            And (Sheets(2).Cells(i, 3).Value <> "")
                    With Sheets(2)
                    If .OLEObjects("CheckBox" & i).Object.Value = True _
                           And ThisWorkbook.Worksheets(2).Cells(i, 4)="" Then
                        For Each j In Array(7, 8, 9, 10, 15, 16, 17)
                           ThisWorkbook.Worksheets(2).Cells(r, j).Value = _
                             ThisWorkbook.Worksheets(2).Cells(r, j).Value _
                             +(ThisWorkbook.Worksheets(2).Cells(i, j).Value) _
                             *(ThisWorkbook.Worksheets(2).Cells(i, 3).Value)
                            ThisWorkbook.Worksheets(2).Cells(i, 4).Value _
                                    = "Sélectionné"
                        Next j
                      ElseIf .OLEObjects("CheckBox" & i).Object.Value = False _
                                And ThisWorkbook.Worksheets(2).Cells(i, 4) _
                                        = "Sélectionné" Then
                          For Each j In Array(7, 8, 9, 10, 15, 16, 17)
                            ThisWorkbook.Worksheets(2).Cells(r, j).Value = _
                              ThisWorkbook.Worksheets(2).Cells(r, j).Value _
                              -(ThisWorkbook.Worksheets(2).Cells(i, j).Value) _
                              *(ThisWorkbook.Worksheets(2).Cells(i, 3).Value)
                            ThisWorkbook.Worksheets(2).Cells(i, 4).Value = ""
                          Next j
                      End If
                    End With
                Wend
            Next i
        End If
    Next r
End Sub
Sub-SommerTest()
作为字节的Dim i
对于r=1至178
如果表(2).单元格(r,3)的类型为对象,则
对于i=r+1至178
而数字(第(2)页、单元格(i、3))_
和(第(2)页。单元格(i,3)。值“”)
附页(2)
If.OLEObjects(“复选框”&i).Object.Value=True_
和这个工作簿。工作表(2)。单元格(i,4)=“然后
对于阵列中的每个j(7、8、9、10、15、16、17)
此工作簿。工作表(2)。单元格(r,j)。值=_
此工作簿。工作表(2)。单元格(r,j)。值_
+(本工作簿.工作表(2).单元格(i,j).值)_
*(此工作簿。工作表(2)。单元格(i,3)。值)
此工作簿。工作表(2)。单元格(i,4)。值_
=“选择”
下一个j
ElseIf.OLEObjects(“复选框”&i).Object.Value=False_
和本工作簿。工作表(2)。单元格(i,4)_
那么“选择”呢
对于阵列中的每个j(7、8、9、10、15、16、17)
此工作簿。工作表(2)。单元格(r,j)。值=_
此工作簿。工作表(2)。单元格(r,j)。值_
-(本工作簿.工作表(2).单元格(i,j).值)_
*(此工作簿。工作表(2)。单元格(i,3)。值)
ThisWorkbook.Worksheets(2).Cells(i,4).Value=“”
下一个j
如果结束
以
温德
接下来我
如果结束
下一个r
端接头

正如@Rory所说,您可以围绕
topleftcell
属性进行调查,不确定它相对于控件大小的准确性,但类似于

.shapes(“CheckBox21”).oleformat.object.topleftcell.address

Dim s as shape

for each s in activesheet.shapes
    if s.oleformat.object.topleftcell.address=activecell.address.......

    end if
next s
.oleobjects(“CheckBox21”).topleftcell.address

Dim s as shape

for each s in activesheet.shapes
    if s.oleformat.object.topleftcell.address=activecell.address.......

    end if
next s

希望这有帮助。

单元格不包含形状。您必须循环检查复选框并测试
TopLeftCell
属性以确定它们的位置。是的,我以前尝试过:Sub-SommerTest()将r作为整数Dim h作为整数Dim k作为整数l=1到178 r=l+1h=(Sheets(2).Shapes(“CheckBoxMacro”&l.Top)/(Sheets(2).Shapes(“CheckBoxMacro”&l.Width)+1k=(表(2).Shapes(“CheckBoxMacro”&r.Top)/(表(2).Shapes(“CheckBoxMacro”&r.Width)-1表示i=h到k…缩进代码时(尤其是嵌套严重的代码时)在理解代码方面会产生巨大差异。谢谢,什么是活动单元格?应该很少使用的东西,因为我想描述包含复选框的单元格行,以停止我的指示。为什么我们不能询问单元格是否包含复选框,而我们可以知道单元格是否包含数字数据或单元格是否为空?必须有复选框的跟踪在细胞中…特别是因为它是一个物体,我们可以用物体图像来做。我错在哪里?