首页 > 解决方案 > 将字符串转换为 VBA 全局变量

问题描述

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

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的那样,返回字符串example1_SlideNum和 NOT 25

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

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

标签: vbavariablespowerpoint

解决方案


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

首先转到工具>>参考并选择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窗格中打印出“25”和“26”。


推荐阅读