如何通过名称获取控件名称?

Dam*_* Aw 6 excel vba

我有一个简单的功能,其中有一个组合框.如果组合框的值等于"禁用",我将禁用文本框B.有许多组合框及其对应的文本框B,按行排列并手动命名.如果命名了组合框A Product1,则将命名文本框B.Product1_status

我想的是:

If value_of_a = "disable" Then 
 Dim name_of_b as String
 name_of_b = Me.Combo.Name + "_status"
 get_object_by_name(name_of_b).Enabled = False
End If
Run Code Online (Sandbox Code Playgroud)

我该怎么做呢?

Dou*_*ncy 5

我不确定你是怎么称呼这个,但这是一个自给自足的程序,应该有所帮助:

Sub test()

Dim ws As Excel.Worksheet
Dim ProductCombo As OLEObject
Dim ProductText As OLEObject

Set ws = ThisWorkbook.Sheets(1)
With ws
    Set ProductCombo = .OLEObjects("Product1")
    Set ProductText = .OLEObjects(ProductCombo.Name & "_status")
    ProductText.Enabled = ProductCombo.Object.Text <> "Disabled"
End With
End Sub
Run Code Online (Sandbox Code Playgroud)

编辑:我真的讨厌工作表控件 - 每次编程时我都会从头开始!尽管如此,根据配对的组合框,我想我会添加这个子程序,它重置每个文本框,其名称适合模式Product#_status.逻辑确实假设名称以Product1,Product2等开头,编号没有间隙:

Sub test2()

Dim ws As Excel.Worksheet
Dim ctl As OLEObject
Dim i As Long
Dim ProductComboboxesCount
Dim ProductCombo As OLEObject
Dim ProductText As OLEObject
Const ControlPrefix As String = "Product"

Set ws = ThisWorkbook.Sheets(1)
With ws
    For Each ctl In .OLEObjects
        If TypeOf ctl.Object Is MSForms.ComboBox And Left(ctl.Name, Len(ControlPrefix)) = ControlPrefix Then
            ProductComboboxesCount = ProductComboboxesCount + 1
        End If
    Next ctl
    For i = 1 To ProductComboboxesCount
        Set ProductCombo = .OLEObjects(ControlPrefix & i)
        Set ProductText = .OLEObjects(ControlPrefix & i & "_status")
        ProductText.Enabled = ProductCombo.Object.Text <> "Disabled"
    Next i
End With
End Sub
Run Code Online (Sandbox Code Playgroud)