vba - 将字符串转换为 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 语句。
解决方案
正如我在评论中提到的,字典是存储这些全局变量的好选择。
首先转到工具>>参考并选择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”。
推荐阅读
- node.js - 如何将 Nginx NJS 与本机 nodejs 模块和 webpack 一起使用?
- python-3.x - Python 3 - Scipy 和 KDEpy
- azure - LogicApps SFTP SSH 问题
- c++ - 将一个 std::optional 转换为另一个 std::optional
- node.js - 从 Express 中的 POST 端点检索特定值
- stored-procedures - 雪花使用存储过程进行错误处理
- javascript - 用 Javascript-Canvas 圆一个小费
- node.js - 自定义中间件 express.js 框架排序
- objective-c - NSButton 在运行时不显示图像或文本
- php - 在 php:7.4-fpm 映像上安装 PHP-zip