У меня есть следующий код, и я не знаю, почему Excel не видит тип Enum (который я объявил) в подпрограмме Test2():

Private Sub Test1()
    Dim test_name As Variant

End Sub


Private Enum rlcRollercoasterState
    rlcRollercoasterDisabled
    rlcRollercoasterEnabled
    rlcRollercoasterBroken
    rlcRollercoasterMissing
End Enum


Private Sub Test2()
    Dim var1 As Variant

    Dim rlcRC1State As rlcRollercoasterState ' User-defined type not defined

End Sub

Если я скопирую подпрограмму Test1() после объявления типа Enum, Excel распознает тип rlcRollercoasterState в Test1(). Если я закомментирую подпрограмму Test1(), Excel распознает тип rlcRollercoasterState в Test2().

Почему Excel не видит тип rlcRollercoasterState в подпрограмме Test2()?

5
colemik 22 Мар 2013 в 04:37

1 ответ

Лучший ответ

enter image description here

Перед запуском кода всегда выполняйте команду «Отладка / компиляция VBAProject» (Alt-dl). Как и в вашем примере, он дает ошибку. Ошибка компиляции говорит, что он хочет, чтобы оператор объявления в начале модуля.

11
user2063626user2063626 22 Мар 2013 в 05:09
Спасибо большое, я бы об этом не подумал. Однако у меня есть теоретический вопрос: не нужно ли компилировать программу перед запуском? (Я имею в виду, что когда я запускаю программу, не является ли компиляция программы частью процедуры run ? - это будет означать что сообщение об ошибке должно появляться даже тогда, когда я запускаю программу, а не только когда я компилирую программу. Я не совсем понимаю).
 – 
colemik
22 Мар 2013 в 05:23
Вы можете установить флажок «Компилировать по запросу», если хотите, чтобы VBA компилировал код только по мере необходимости. VBA компилирует код перед запуском процедуры. books.google.co.in/…
 – 
user2063626
22 Мар 2013 в 05:35