从 VBA 中的另一个模块调用字典及其变量
Calling a Dictionary and its Variables from Another Module in VBA
我在一个模块(模块 6)中存储了一本字典:
Sub WebcamDict()
Dim dict As Object, Key, val
Set dict = CreateObject("Scripting.Dictionary")
Key = "14 Mile Hill North": val = Array("URL", "Title")
dict.Add Key, val
Key = "14 Mile Hill South": val = Array("URL", "Title")
dict.Add Key, val
Key = "Ash Fork East": val = Array("URL", "Title")
dict.Add Key, val
...
End Sub
在另一个模块中,我试图像这样调用字典及其变量:
Sub Images()
Call Module6.WebcamDict
ComboBoxList = Array(CStr(ComboBox4), CStr(ComboBox5), CStr(ComboBox6), CStr(ComboBox7))
i = 1
For Each Ky In ComboBoxList
ActiveWindow.Selection.SlideRange.Shapes("Webcam" & CStr(i)).Fill.UserPicture (dict.Item(Ky)(0))
ActiveWindow.Selection.SlideRange.Shapes("Webcam" & CStr(i)).TextFrame.DeleteText
ActiveWindow.Selection.SlideRange.Shapes("Webcam" & CStr(i)).Line.Visible = msoFalse
ActiveWindow.Selection.SlideRange.Shapes("Webcam" & CStr(i) & "_Text").TextFrame.TextRange.Text = dict.Item(Ky)(1)
i = i + 1
Next
Set dict = Nothing
End Sub
变量 "i" 和 "Ky" 似乎都可以正常工作
Debug.Print
语句。但是,我收到此行的错误(需要对象):
ActiveWindow.Selection.SlideRange.Shapes("Webcam" & CStr(i)).Fill.UserPicture (dict.Item(Ky)(0))
如果我只是将字典包含在同一个模块中,它会完美运行,但我需要从多个不同的模块调用它,所以我需要能够以某种方式调用它及其变量。有任何想法吗?谢谢!
从 sub 中删除 Dim dict As Object
(保持其他一切不变)。在模块的顶部放置行
Public dict As Object
这会将 dict
变成一个全局变量,可以在项目的任何地方访问。在您当前的代码中,它是一个局部变量,当 WebCamdict
returns.
时超出范围
我在一个模块(模块 6)中存储了一本字典:
Sub WebcamDict()
Dim dict As Object, Key, val
Set dict = CreateObject("Scripting.Dictionary")
Key = "14 Mile Hill North": val = Array("URL", "Title")
dict.Add Key, val
Key = "14 Mile Hill South": val = Array("URL", "Title")
dict.Add Key, val
Key = "Ash Fork East": val = Array("URL", "Title")
dict.Add Key, val
...
End Sub
在另一个模块中,我试图像这样调用字典及其变量:
Sub Images()
Call Module6.WebcamDict
ComboBoxList = Array(CStr(ComboBox4), CStr(ComboBox5), CStr(ComboBox6), CStr(ComboBox7))
i = 1
For Each Ky In ComboBoxList
ActiveWindow.Selection.SlideRange.Shapes("Webcam" & CStr(i)).Fill.UserPicture (dict.Item(Ky)(0))
ActiveWindow.Selection.SlideRange.Shapes("Webcam" & CStr(i)).TextFrame.DeleteText
ActiveWindow.Selection.SlideRange.Shapes("Webcam" & CStr(i)).Line.Visible = msoFalse
ActiveWindow.Selection.SlideRange.Shapes("Webcam" & CStr(i) & "_Text").TextFrame.TextRange.Text = dict.Item(Ky)(1)
i = i + 1
Next
Set dict = Nothing
End Sub
变量 "i" 和 "Ky" 似乎都可以正常工作
Debug.Print
语句。但是,我收到此行的错误(需要对象):
ActiveWindow.Selection.SlideRange.Shapes("Webcam" & CStr(i)).Fill.UserPicture (dict.Item(Ky)(0))
如果我只是将字典包含在同一个模块中,它会完美运行,但我需要从多个不同的模块调用它,所以我需要能够以某种方式调用它及其变量。有任何想法吗?谢谢!
从 sub 中删除 Dim dict As Object
(保持其他一切不变)。在模块的顶部放置行
Public dict As Object
这会将 dict
变成一个全局变量,可以在项目的任何地方访问。在您当前的代码中,它是一个局部变量,当 WebCamdict
returns.