-1

我有一个带有多个列表框的用户窗体。我需要按名称访问 ListBox(而不是直接通过对象引用)。

我正在尝试遵循这篇文章的建议:

Dim ws As Worksheet, Field As String, lbName As String, lb As MSForms.ListBox
Field = "SomeString"
lbName = "SomePattern_" & Field
Set lb = ws.OLEObjects(lbName).Object ' Run-time error '1004': Method 'OLEObjects' of object '_Worksheet' failed

我确定我正在寻找正确的名称,因为 ListBox 也是按名称添加的:

' inside the UserForm code
With Me.Controls
    Dim lstbox As MSForms.ListBox
    Set lstbox = .Add("Forms.ListBox.1", Name:="SomePattern_" & Field, Visible:=True)
    Debug.Print lstbox.Name ' prints an exact match to lbName
End With

我试图循环通过控件而不是 OLEObjects,但它也失败了。

4

1 回答 1

0

在@Rory 上面的评论的帮助下,我在我的代码中修复了一些问题。这个工作正常(如果 ListBox 被添加到用户窗体,而不是工作表):

Dim lbName As String, lb As MSForms.Control

lbName = "SomePattern"
Set lb = MyUserForm.Controls(lbName)
于 2019-12-16T08:01:18.900 回答