关于我的目标的一点背景。我有一个风险评估的电子表格需要自动化,我使用选项按钮为我已经过滤的选定数量的单元格提供标准是无选项,目前我遇到了两个主要问题。
首先是一组单选按钮并通过代码引用它们。使用表单控件,我可以将它们放在一个组框中,并给它们所有相同的名称,即。 radYes和radNo但是使用activeX我不能使用组合框来实现这一点。这会导致选择一个选项按钮以删除另一个选项按钮的预设选择。我能够通过给它们所有单独的组名来绕过它,但现在我不能在不同的组中使用名称radYes / radNo,因为它只引用了第一个。
这是我的审核代码:
Sub RadioController()
Dim total As Integer
Dim pass As Integer
Dim fail As Integer
Dim rng As Range, cell As Range
Set rng = Range("C4:C8")
Dim o As Object
For Each cell In rng
If Worksheets(2).radYes = True Then
pass = pass + 1
total = total + pass
Else
fail = fail + 1
End If
Next cell
Range("K4") = total
End Sub
其次,因为这意味着循环过滤的一组细胞。宏继续选择不可见的单元格并为不存在的选项按钮分配一个真值。我知道这是漫长的啰嗦,但我已经研究过所有关于修复的问题,Stack Overflow似乎是我最好的选择,以获得更多关于VBA的知识。
答案 0 :(得分:1)
给几个同名的对象是个坏主意。你可以像这样遍历所有对象。
With ActiveSheet
For Each objX In .OLEObjects
Debug.Print "Name = " & objX.Name & " Typ = " & TypeName(objX.Object)
Next
End With
要仅处理可见单元格,请使用
For Each cell In rng.SpecialCells(xlCellTypeVisible)
备注:每个问题仅提出一个问题。 Stackoverflow不仅可以帮助您,还可以帮助您解决相同或类似问题。
答案 1 :(得分:0)
由于您希望显示“通过”或“失败”(2个选项),因此每个评估只需要一个按钮,该按钮为TRUE或FALSE。但是,您也可以使用2个按钮,其中只有一个是真的。如果您有许多组 - 无论每个组是由1个按钮还是2个组成 - 您必须将GroupName
属性设置为每个属性的另一个值,以便它们彼此独立运行。
您可以使用LinkedCell
属性将每个按钮链接到一个单元格,也就是隐藏在按钮后面的单元格。此单元格将保持值TRUE或FALSE,具体取决于所选的选项。您可以让另一个可见单元格引用链接的单元格。使用像= IF(A1, "Passed", "Failed")
这样的公式。假设A1是链接的单元格,具有公式的单元格将不会显示“通过”或“失败”,具体取决于选项按钮的状态。
为了计数,您可以参考链接的单元格并计算有多少是TRUE。但您也可以直接参考选项按钮。以下代码将计算通过次数和失败次数。
Private Sub CountButtons()
Dim Btn As Shape
Dim Pass As Long, Fail As Long
For Each Btn In Worksheets("Sheet2").Shapes
With Btn
If .Type = 12 Then
If Worksheets("Sheet2").OLEObjects(Btn.Name).Object Then
Pass = Pass + 1
Else
Fail = Fail + 1
End If
End If
End With
Next Btn
End Sub
答案 2 :(得分:0)
这是@funthomas中示例的优化代码。它仅基于 Excel Training VBA 2 Lesson 21 - Creating Controls at Runtime, On the Fly
打印activeX选项按钮的名称。With ActiveSheet
For Each objX In .OLEObjects
If objX.progID = "Forms.OptionButton.1" then
Debug.Print "Name = " & objX.Name & " Typ = " & TypeName(objX.Object)
End If
Next
End With