【问题标题】:Convert string to VBA Global Variable将字符串转换为 VBA 全局变量
【发布时间】:2020-01-21 18:43:34
【问题描述】:

我在 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 而不是 25

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

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

【问题讨论】:

  • 任何时候你认为“变量变量名”都会想到数组、集合或字典。在这种情况下,Scripting.Dictionary 将是一个不错的选择。

标签: vba variables powerpoint


【解决方案1】:

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

首先转到工具>>参考并选择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”。

【讨论】:

  • 感谢字典速成课程!完全按照我的需要工作!
猜你喜欢
  • 2015-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-30
  • 1970-01-01
相关资源
最近更新 更多