Страницы: 1
RSS
VBA_объявление словаря ошибка
 
Добрый день. Есть учебный код, не мой, не работает у меня. Ошибка в самом начале Dim dicTemp As New Dictionary - User Difined type not difined
Что еще интересно, Intel Sense не выдает Dictionary после As (его нет в списке доступных методов и свойств)
Код
Option Explicit

Sub ShowDifferentKeys()
 
  On Error Resume Next
 
  Dim dicTemp As New Dictionary
  Dim strShow As String, key As Variant
 
  dicTemp.Add Date, "Date type" ' добавляем ключ с типом дата
   
  dicTemp.Add True, "Boolean type" ' добавляем ключ с логическим типом
   
  dicTemp.Add CDbl(12.4567), "Double type" ' добавляем ключ с типом Double
   
  dicTemp.Add CInt(12999), "Integer type" ' добавляем ключ с типом Integer
   
  dicTemp.Add "Red", "String type" ' добавляем строковый ключ
   
  dicTemp.Add ActiveSheet, "Worksheet object" ' добавляем ключ в виде Worksheet объекта
 
  For Each key In dicTemp.Keys ' перебираем ключи словаря (тут немного забегаю вперёд)
    Err.Clear ' очищаю ошибку
    ' Для каждого элемента словаря формирую строку ключ - тип ключа
    ' Тип ключа выясняем при помощи функции TypeName
    strShow = strShow & CStr(key) & vbTab & vbTab & TypeName(key) & vbCr
    ' Поскольку у нас один из ключей имеет объектный тип, то CStr(key) выдаст ошибку
    ' которую мы перехватим и CStr(key) заменим на key.Name
    If Err Then strShow = strShow & key.Name & vbTab & vbTab & TypeName(key) & vbCr
  Next
   
  ' Выведем на экран результат
  MsgBox strShow, vbInformation, "Он реально хранит типы ключей!"
 
End Sub

Заменил New Dictionary на Object - ошибка пропала, но результат макроса - не тот как у автора учебной статьи, у него должно получится как в приложении


На всякий случай - система у меня Windows 7 64 разрядная, excel 2010
Изменено: Ливиан - 04.04.2016 12:03:10
 
Наверное так..
Код
  Dim dicTemp As Object 'New Dictionary
  Dim strShow As String, key As Variant

  Set dicTemp = CreateObject("Scripting.Dictionary") 'объявляем !
 
Код
Dim dicTemp As object  
set dictemp=createobject("scripting.Dictionary")
и т.д.
Я сам - дурнее всякого примера! ...
 
Если подключить библиотеку microsoft scripting runtime - возможно заработает и код из книжки. Там про это не написано?
Если конечно не MAC... Это не Вам :)
 
Спасибо, заработало
Подскажите, пож,
Цитата
Ливиан написал:
Что еще интересно, Intel Sense не выдает Dictionary после As (его нет в списке доступных методов и свойств)
Это нормально?
Я уже в пустом модуле (Public Sub dygh().....End Sub) Intel Sense вызвал между операторами Public Sub - длинное окно выскочило, но и в нем нет Dictionary
попробовал (Sub dygh().....End Sub) - тоже пусто
Может у меня настройки слетели какие-нибудь?
 
Цитата
Hugo написал:
Если подключить библиотеку microsoft scripting runtime
Пока писал, Вы ответили
Подключил библиотеку - все заработало...
 
Спасибо
 
Похоже код в посте №1 отсюда
Там же, если почитать внимательнее, есть и ответ на вопрос автора. Глава: "2. СОЗДАНИЕ DICTIONARY".
Делаю позднее связывание, что бы работало везде:
Код
Dim Словарь: Set Словарь = CreateObject("Scripting.Dictionary")
«Бритва Оккама» или «Принцип Калашникова»?
 
Спасибо большое за помощь.
Это лучший сайт!
Страницы: 1
Наверх