Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Глобальная переменная. VBA
|
|||
|---|---|---|---|
|
#18+
Есть модуль Module, в нём есть переменная CurrentName типа String и процедура SetCurrentName, инициализирующая переменную. В WorkBook_Open() создаётся кнопка в тулбаре и вызывается SetCurrentName с ненулевым параметром. На момент нажатия кнопки в тулбаре, CurrentName = "". Из-за чего? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2009, 20:37 |
|
||
|
Глобальная переменная. VBA
|
|||
|---|---|---|---|
|
#18+
*Module1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2009, 20:38 |
|
||
|
Глобальная переменная. VBA
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, Из-за того, что у тебя не срабатывает событие WorkBook_Open. Ты закрой книгу сначала. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2009, 21:29 |
|
||
|
Глобальная переменная. VBA
|
|||
|---|---|---|---|
|
#18+
VladConn, Всё срабатывает: Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2009, 09:44 |
|
||
|
Глобальная переменная. VBA
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2009, 10:56 |
|
||
|
Глобальная переменная. VBA
|
|||
|---|---|---|---|
|
#18+
sergeyvg, Public CurrentName As String Код: plaintext Я ещё вот что думаю... Код: plaintext 1. 2. 3. 4. 5. Я указываю макрос "CopyToOracle", который находится в Module1. Может, он другой макрос берёт, какое-то другое адресное пространство берёт? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2009, 11:35 |
|
||
|
Глобальная переменная. VBA
|
|||
|---|---|---|---|
|
#18+
P.S. я в VBA новичок ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2009, 11:35 |
|
||
|
Глобальная переменная. VBA
|
|||
|---|---|---|---|
|
#18+
Если в модуле книги, где процедура Public Sub Workbook_Open() первой строчкой было бы указано Option Explicit, то при компиляции все необъявленные переменные всплыли бы, в том числе CurrentName. Это бы заставило задуматься, а там бы глядишь, почитав хелп, вместо Dim нашел бы Public. Про макрос "CopyToOracle", раз он не объявлен Private, то автоматом Public, и из "воздуха", как переменные, не всплывает:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2009, 12:12 |
|
||
|
Глобальная переменная. VBA
|
|||
|---|---|---|---|
|
#18+
sergeyvg, Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2009, 12:17 |
|
||
|
Глобальная переменная. VBA
|
|||
|---|---|---|---|
|
#18+
После вчитывания в первое сообщение, стало более понятна проблема:) По быстрому можно так обойти. В модуль вставить функцию Код: plaintext 1. 2. В обработчике кнопки вставить получение значения (book3.xls - имя книги с модулем) Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2009, 13:26 |
|
||
|
Глобальная переменная. VBA
|
|||
|---|---|---|---|
|
#18+
sergeyvg, не понял. кнопке присвоен один обработчик, кнопка висит в тулбаре, выполняется на всех листах ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2009, 14:32 |
|
||
|
Глобальная переменная. VBA
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, Блин, не понимаю. Тестирую тот же самый файл на своей машине - всё нормально!!! Почему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2009, 16:10 |
|
||
|
Глобальная переменная. VBA
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, Покажите Ваш первоначальный код. Если вы называли переменную глобальной и не объявляли ее как Public в модуле, то Вы вводили всех в заблуждение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2009, 17:08 |
|
||
|
Глобальная переменная. VBA
|
|||
|---|---|---|---|
|
#18+
VladConn, Attribute VB_Name = "Module1" Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. ERSION 1.0 CLASS BEGIN MultiUse = -1 'True END Attribute VB_Name = "MainBook" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = True Attribute VB_Exposed = True Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2009, 17:16 |
|
||
|
Глобальная переменная. VBA
|
|||
|---|---|---|---|
|
#18+
Из приведенного текста вобще не понятно, зачем нужна переменная CurrentName, которая нигде не используется. А вот кнопка не будет задействована при открытии книги, если она была до этого сохранена с активным листом, имя которого начинается не с 1-4, может в этом дело. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2009, 08:37 |
|
||
|
Глобальная переменная. VBA
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, Я не уверен, но если проблема еще не решена, то попробуй вместо SetCurrentName (Str) написать SetCurrentName Str Мне кажется, много лет назад у меня было что-то похожее из-за использования устаревшего синтаксиса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2009, 15:35 |
|
||
|
Глобальная переменная. VBA
|
|||
|---|---|---|---|
|
#18+
И точно, str то зарезервировано за именем функции, не стоит такие слова использовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2009, 16:43 |
|
||
|
Глобальная переменная. VBA
|
|||
|---|---|---|---|
|
#18+
sergeyvg, Бинго. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2009, 19:11 |
|
||
|
Глобальная переменная. VBA
|
|||
|---|---|---|---|
|
#18+
Доброе время суток. Многое перепробовал: изменил названия макросов и глобальной переменной, Workbook_Open по какой-то причине был Public - сделал Private. Только что заменил SetCurrentName (Str) на: 1) SetCurrentName Str 2) Call SetCurrentName (Str) Результат прежний - у меня всё работает, у неё - нет. Причём! После Call SetCurrentName (Str) вызываю MsgBox ("Workbook_Open(). CurrentName = " & CurrentName) - значение верное! Вызываю макрос - строка пустая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2009, 09:44 |
|
||
|
Глобальная переменная. VBA
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, Переименуй переменную Str. Это зарезервированное слово. Тебе же sergeyvg указал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2009, 20:18 |
|
||
|
Глобальная переменная. VBA
|
|||
|---|---|---|---|
|
#18+
Чтобы процедура Sub Workbook_Open() автоматически запускалась при загрузке, она должна быть в модуле (класса) ЭтаКнига, в англ. версии Excel этот модуль по умолчанию называется ThisWorkbook. А судя по приведенному коду, эта процедура прописана в отдельном модуле класса MainBook. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2009, 01:07 |
|
||
|
Глобальная переменная. VBA
|
|||
|---|---|---|---|
|
#18+
что случилось немогу понять: Пишу Public start_day as variant Вроде как должна переменная быть видна всем модулям, а при запуске макроса выдаёт ошибку: Compile Error: Invalid attribute in sub or Function ???? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2009, 13:06 |
|
||
|
Глобальная переменная. VBA
|
|||
|---|---|---|---|
|
#18+
Кстати да, я вот тоже не могу понять, где надо дописать Public, чтобы конструкция работала? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Работает только таких 2 варианта, с Public ничего не получается: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2009, 14:33 |
|
||
|
Глобальная переменная. VBA
|
|||
|---|---|---|---|
|
#18+
> Автор: Hugo121 > Кстати да, я вот тоже не могу понять, где надо дописать Public, чтобы конструкция работала? 1. Добавляешь отдельный модуль в котором пишешь 2 строчки: Код: plaintext 1. 3. из Sub tt() удаляешь строку Dim x As Long 4. Запускаешь и смотришь Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2009, 14:56 |
|
||
|
Глобальная переменная. VBA
|
|||
|---|---|---|---|
|
#18+
Вот спасибо! А то нигде сейчас не нашёл, что Public надо в отдельном модуле объявлять. Как-то раньше особо не требовалось, вот и не запомнилось, если и встречал... Всё работает. Только ведь Option Explicit не обязательно, и так работает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2009, 15:22 |
|
||
|
Глобальная переменная. VBA
|
|||
|---|---|---|---|
|
#18+
> Автор: Hugo121 > А то нигде сейчас не нашёл, что Public надо в отдельном модуле объявлять. Скажем так, в отдельном модуле это для примера, потому, что в ваших тестах не было упоминания о разнесении кода по разным модулям, а в принципе можно сделать в одном модуле объявить Public переменную, в другом модуле присвоить ей значение, и в третьем модуле вывести это значение. В рамках одного модуля достаточно объявить переменную как Dim перед первой функцией/процедурой в этом модуле. > Всё работает. Только ведь Option Explicit не обязательно, и так работает? в простейшем примере, необязательно, но при отсутствии Option Explicit возможна такая ситуация: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. вычисления "влазят" в результат другого вычисления. В маленьких проектах это не страшно, а в больших и долгоиграющих это может стать ночным кошмаром. Так что советую завести себе привычку сразу после установки студии/офиса идти в IDE VB/VBA в меню Tools->Options, закладка Editor снять птицу "Auto Syntax Check" - что-бы не доставало месседжами когда не закончил объявлять переменную и т.д. и поставить птицу Requrie Variable Declaration - это чтобы руками не писать Option Explicit в каждом новом модуле Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2009, 17:03 |
|
||
|
Глобальная переменная. VBA
|
|||
|---|---|---|---|
|
#18+
В рамках одного модуля достаточно объявить переменную как Dim перед первой функцией/процедурой в этом модуле. Вот спасибо, проверил, работает Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. А я всё пытался в первом макросе объявить, вот и не получалось. Про Option Explicit понятно. И спасибо за "Auto Syntax Check" - действительно достало, а отключить не додумался... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2009, 17:23 |
|
||
|
Глобальная переменная. VBA
|
|||
|---|---|---|---|
|
#18+
> Автор: Hugo121 > Про Option Explicit понятно. Да вот, кстати вот отличный пример: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. попробуй понять, какой будет результат и почему он будет такой, и представь ловить такой глюк в полсотне форм, и таком-же количестве классов. > И спасибо за "Auto Syntax Check" - действительно достало, а отключить не додумался... иногда отрывайся и просто лазь по менюшкам и вспоминай что какой пункт делает, ещё залазь в настройку панелей инструментов, тоже найдется много интересного Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2009, 17:50 |
|
||
|
Глобальная переменная. VBA
|
|||
|---|---|---|---|
|
#18+
Даа, я стараюсь конечно раскладку не путать, + ко всему остальному :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2009, 18:04 |
|
||
|
Глобальная переменная. VBA
|
|||
|---|---|---|---|
|
#18+
> Автор: Hugo121 > Даа, я стараюсь конечно раскладку не путать, + ко всему остальному :) Да раскладка, это сильно утрированный пример, хотя здесь иногда проскакивает Когда количество переменных переваливает на сотню-другую, некоторые начинают называтся очень похоже и обычная опечатка оборачивается несколькими днями отладки и потом воплями в стиле "Куда смотрели мои глаза!!!" вперемешку с "непереводимой игрой слов на местном диалекте". Ладно, что-то я много агитирую Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2009, 18:25 |
|
||
|
|

start [/forum/topic.php?all=1&fid=60&tid=2160431]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
29ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
| others: | 9ms |
| total: | 140ms |

| 0 / 0 |
