Преобразовать строку в глобальную переменную VBA - PullRequest
1 голос
/ 21 января 2020

Я использую VBA в PowerPoint и у меня более 50 фигур на слайде, и все они названы. Чтобы обновить цвет фигуры, я ссылаюсь на слайд позже в презентации. Номера слайдов хранятся в виде глобальных переменных и присваиваются в подпрограмме (номера слайдов остаются постоянными):

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

Исходя из названия фигур, я могу использовать «пример1», «пример2», « example3 ", et c. Затем я объединяю его с "_SlideNum", дающим мне имя переменной.

Вместо того, чтобы использовать If Statements или 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.

1 Ответ

1 голос
/ 21 января 2020

Как упомянуто в моем комментарии, словарь был бы хорошим выбором для хранения этих глобалов.

Сначала go в Инструменты >> Ссылки и выберите Microsoft Scripting Runtime enter image description here

Используя объект словаря:

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

Запуск этой последней подпрограммы выведет «25» и «26» в вашей панели окна immediate.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...