用户表单子看不到全局变量

Global variable not seen by user form sub

我已经设置了一个全局字典对象来跟踪文件路径(键是 "project name",它是文件名的第一个单词)。这个程序的工作方式是打开一个表单,用户可以在其中打开一个文件对话框,将文件添加到列表框中。完成后,它应该将名称和路径添加到字典中。

初级代码:

Public project_dict As Scripting.Dictionary

Public Sub excelToPPT()
Set project_dict = New Scripting.Dictionary
...
Dim u As UserForm1
Set u = New UserForm1
u.Show
...
End Sub

用户表单代码:

Private Sub cmdAddProject_Click()
    Dim project_fd As FileDialog
    Set project_fd = Application.FileDialog(msoFileDialogFilePicker)
    Dim it As Variant
    Dim path_split() As String
    Dim f_split() As String
    Dim f As String

    With project_fd
        .AllowMultiSelect = True
        .Title = "Select project excel file(s)"
        .Filters.Clear

        If .Show = -1 Then
            For Each it In .SelectedItems
                path_split = Split(it, "\")
                f_split = Split(path_split(UBound(path_split)))
                f = f_split(0)

                ' WHERE ERROR OCCURS
                project_dict.Add f, it

                Me.ListBox1.AddItem f
            Next it
        End If
    End With
End Sub

当这是 运行 时,错误是

project_dict.Add f, it

不好,因为 project_dict 不是我认为在这种情况下是范围问题的对象。有什么想法吗?

通过在用户窗体代码中放置以下属性并将字典传递到窗体而不是使用全局变量,问题已得到解决。

Dim project_dict As Scripting.Dictionary

Public Property Get ProjectDictionary() As Scripting.Dictionary
    Set ProjectDictionary = project_dict
End Property

Public Property Let ProjectDictionary(ByVal pd As Scripting.Dictionary)
    Set project_dict = pd
End Property