将字符串转换为 VBA 全局变量

Convert string to VBA Global Variable

我在 PowerPoint 中使用 VBA,一张幻灯片上有 50 多个形状,所有形状都已命名。为了更新形状的颜色,我在演示文稿后面引用了一张幻灯片。幻灯片编号存储为全局变量并在子中分配(幻灯片编号保持不变):

Sub getSlideNum()
    example1_SlideNum = 25
    example2_SlideNum = 26
    example3_SlideNum = 27
    etc.
End Sub

基于形状名称,我可以使用 "example1"、"example2"、"example3" 等。然后我将它与“_SlideNum”连接起来,得到变量名称.

我不想使用 If 语句或 Select Case 来为每个变量分配它们的幻灯片,我想要一个像这样的简短函数:

Function getSlide(shpName As String)

     Call getSlideNum    'get the slide num for each from the previously mentioned sub

     Dim p As Variant 
     p = shpName & "_SlideNum"

     getSlide = p

End Function

正如预期的那样,getSlide returns 字符串 example1_SlideNum 而不是 25

有没有办法将字符串转换为变量,以便它使用存储的值而不是字符串文本?

最好有一个像上面这样的简短函数,而不是输入 50 个左右 Select 个 Case 语句。

正如我在评论中提到的,字典是存储这些全局变量的不错选择。

首先转到工具>>参考并选择 Microsoft Scripting Runtime

使用字典对象:

Private SlideDict As Dictionary

Sub getSlideNum()
    Set SlideDict = New Scripting.Dictionary
    SlideDict.Add "example1_SlideNum", 25
    SlideDict.Add "example2_SlideNum", 26
    SlideDict.Add "example3_SlideNum", 27

End Sub

Sub UsingTheDictionaryExample()
    getSlideNum
    Debug.Print SlideDict("example1_SlideNum")

    'You can concatenate a variable into your dictionary key as well
    Dim mySlideNum As Integer
    mySlideNum = 2
    Debug.Print SlideDict("example" & mySlideNum & "_SlideNum")

End Sub

运行 最后一个子例程将在 immediate window 窗格中打印出“25”和“26”。