Какой тип данных VBA лучше всего использовать: ключ = ›значение для сохранения данных, как в массиве PHP

Я работаю с VBA, и мне нужно сохранять данные типа _1 _ => _ 2_, чтобы работать быстрее; Этот тип данных помогает мне кэшировать ответный текст из HTTP-запроса, увеличивая скорость запроса. Но я не знаю, как лучше это сделать? Мне нужен такой же тип данных, как и массив php с key=>value! Спасибо за помощь!


person Davuz    schedule 13.07.2012    source источник
comment
возможный дубликат Имеется ли в VBA структура словаря?   -  person Filip Roséen - refp    schedule 13.07.2012


Ответы (2)


Вы смотрели объект словаря?

Он доступен как часть среды выполнения сценариев Microsoft. Наглядный пример того, как это добавить, дается этим SO-ответом.

Sub DictExample1()

Dim dict As Dictionary
Dim v As Variant

    'Create the dictionary          
    Set dict = New Dictionary

   'Add some (key, value) pairs
    dict.Add "John", 34
    dict.Add "Jane", 42
    dict.Add "Ted", 402

    'How many items do we have?
    Debug.Print "Number of items stored: " & dict.Count

    'We can retrieve an item based on the key
    Debug.Print "Ted is " & dict.Item("Ted") & " years old"


   'We can test whether an item exists
    Debug.Print "We have Jane's age: " & dict.Exists("Jane")
    Debug.Print "We have Zak's age " & dict.Exists("Zak")

    'We can update a value by replacing it
   dict.Item("Ted") = dict.Item("Ted") / 10

    Debug.Print "Ted's real age is: " & dict.Item("Ted")

   'We can add more items
    dict.Add "Carla", 23

   'And we can iterate through the complete dictionary
    For Each v In dict.Keys
        Debug.Print "Name: " & v & "Age: "; dict.Item(v)
    Next

End Sub

(Источник: http://www.techbookreport.com/tutorials/vba_dictionary.html )

person Irfarino    schedule 13.07.2012
comment
Пожалуйста, не делайте ссылок на другие сайты. Это место, где вы можете написать решение. - person Pawel Miechowiecki; 14.10.2015
comment
@PawelMiechowiecki: Что плохого в предоставлении URL с дополнительной информацией? Специально потому, что для того, чтобы этот код работал, вам нужно включить ссылку на Microsoft Scripting Runtime, шаг которой описан в данном URL-адресе ... - person Zé Carlos; 05.04.2017
comment
Он сообщает мне о недопустимом использовании нового ключевого слова для Set dict = New Dictionary - person Zanidd; 23.02.2018
comment
Включение среды выполнения сценариев Microsoft в справочные материалы решит эту проблему. - person Nagarajan Sathish; 04.03.2018
comment
Поскольку среда выполнения сценариев Microsoft должна быть включена, означает ли это, что это может вызвать проблемы при совместном использовании вашей книги с кем-то еще, у кого она не включена, или находится в другой системе (например, Mac)? - person kojow7; 06.10.2018
comment
К сожалению, он недоступен в MAC - person Si8; 13.03.2019
comment
@ kojow7, да - поскольку необходимо указать среду выполнения сценариев, существует вероятность того, что при совместном использовании вашей книги у кого-то не будет той же версии среды выполнения, на которую вы ссылались. Однако есть два способа добавить ссылку, и один из них может в этом помочь. Если для добавления ссылки используется раннее связывание, другому пользователю потребуется такая же версия среды выполнения. При использовании позднего связывания программа может решить, какую среду выполнения использовать. - person David Mays; 15.01.2021

Вышеуказанный ответ не будет работать из-за неправильного синтаксиса, вам нужно добавить Scripting Keword, прежде чем также включить Microsoft Sripting Run Time. Я пробовал его с использованием сценария и без него. до Dictionary в MS Word (2016) и без дозы не работает, даже если вы включили среду выполнения Microsoft Scripting

 Dim dict As Scripting.Dictionary
 Set dict = New Scripting.Dictionary
 dict.Add "John", 34
 dict.Add "Jane", 42
 dict.Add "Ted", 402

 Debug.Print "Number of items stored: " & dict.Count
 Debug.Print "Ted is " & dict.Item("Ted") & " years old"
person abdullah    schedule 10.12.2020
comment
Это неверно, вам не нужно добавлять Scripting., чтобы это работало. Кроме того, сценарии не являются Ключевое слово. Упоминается необходимость добавления среды выполнения сценариев Microsoft к ссылкам и даже прекрасно объясняется в связанном сообщении. - person GWD; 10.12.2020
comment
хорошо, я сделал это, но это вызвало ошибку недопустимое использование нового ключевого слова - person abdullah; 13.12.2020
comment
Привет, GWD. Вы проверили код в Ms. Word 2016 без скриптов. - person abdullah; 13.12.2020
comment
Вы правы, кажется, Scripting. нужен в Word, потому что там есть другой словарь. Вы тоже правы насчет ошибки! Просто для вашего сведения: ключевые слова, о которых идет речь, не Dictionary, а скорее New :) - person GWD; 13.12.2020
comment
просто новичок в vba, но когда я попробовал, сказал, что поэтому я подумал, что должен очистить его для кого-либо еще, спасибо за информацию об ошибке, теперь не о том, что это была за ошибка или почему она показывала - person abdullah; 13.12.2020
comment
@GWD - здесь используется метод с использованием Scripting.Dictionary из-за использования позднего связывания для ссылки на версию Microsoft Scripting Runtime. Существует еще один метод, также называемый ранним связыванием. При использовании позднего связывания требуется создание сценария, как показано здесь. Возможно, вы не смогли использовать Scripting.Dictionary, но использовали ли вы вместо этого раннее связывание? - person David Mays; 15.01.2021
comment
@DavidМожет нет, используемый здесь метод является примером раннее связывание. В нашем обсуждении возникла путаница, потому что в Excel VBA словарь может быть создан с ранним связыванием с использованием Set dict = New Dictionary, тогда как в Word VBA с ранним связыванием необходимо использовать Set dict = New Scripting.Dictionary. - person GWD; 16.01.2021
comment
@GWD спасибо за разъяснения! - person David Mays; 05.02.2021