在表单中使用时未定义用户定义的类型?

时间:2015-07-13 22:59:29

标签: excel-vba vba excel

在下面的建议后更新了问题,但仍然遇到同样的问题。

我正在尝试获取标签txtFullName标题,以便在组合框中选择客户ID时显示我的类型客户名称元素的名称,但是当我尝试从组合框更改子中访问类型元素时,它告诉我它是不是一个贬低的子或功能?

在模块中:

Type Customer
    Name as string
End Type

Dim Customer() as Customer
Dim size as Integer

Sub ExampleStart()

    size = Sheets("Customers").UsedRange.Rows.Count
    ReDim Customer(size)

    For i = 0 To size
        With Customer(i)
            .Name = cells(i + 1, 1).Value
        End With
    Next

    ExampleForm.Show

End Sub

在示例表格中:

Private Sub ExampleForm_Initialize()

    For i = 0 To size
        ExampleForm.comboboxCustomer.AddItem (Customer(i).Name) '<-Fails!
    Next

End Sub

编译错误告诉Sub或Function尚未定义,即使我明确将它定义在任何私有sub之外?

2 个答案:

答案 0 :(得分:2)

Customer()事件处理程序中声明UserForm_Initialize数组意味着无法从该事件处理程序之外的任何位置访问该数组。将Dim Customer() As Customer语句移到End Type行后面的模块顶部。这将使表单模块

中的每个事件处理程序都可以看到该数组

答案 1 :(得分:0)

通过将Customer()和size设置为Public

来解决问题
Type Customer
    Name as string
End Type

Public Customer() as Customer 'instead of Dim
Public size as Integer 'instead of Dim

现在可以在userform

中访问Customer类型的元素