我有一个简单的功能,其中有一个组合框.如果组合框的值等于"禁用",我将禁用文本框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)
我该怎么做呢?
我不确定你是怎么称呼这个,但这是一个自给自足的程序,应该有所帮助:
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)
| 归档时间: |
|
| 查看次数: |
15784 次 |
| 最近记录: |