用户表单子看不到全局变量
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
我已经设置了一个全局字典对象来跟踪文件路径(键是 "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