Я создаю пользовательскую форму, которая добавляет данные на рабочий лист. У меня есть куча подпрограмм для моей пользовательской формы, но у меня возникают проблемы с доступом к переменной, установленной на моем листе. В настоящее время это локальная переменная (в подпункте) и попыталась разместить ее в модуле, как описано здесь: Can a worksheet object be declared globally in Excel VBA. Я сделал дальнейший поиск, но не получил желаемых результатов.Глобальная переменная рабочего листа для userform в excel
Я новичок в VBA и новичок в программировании в целом. Я использовал Excel совсем немного и хочу сделать больше, создав макросы и используя VBA. Вот код, который я сейчас использую:
sub savebutton_click()
Dim trees As Worksheet
Set trees = ThisWorkbook.Sheets("Sheet1")
trees.Cells(1, 1) = Me.TextTreeName
trees.Cells(1, 2) = Me.TextTreeType
End sub
Очевидно, что я не могу получить доступ к локальным переменным из другой подпрограммы, так что я должен сделать глобальные «деревья». Я создал модуль и заменил Dim на Public, поместил вторую строку кода в Workbook_Open(), а затем попытался получить доступ к переменной 'trees'. Я получаю «Недопустимая внешняя процедура» и выделяет код в Workbook_Open(), когда я нажимаю «Debug».
По сути, я просто хочу иметь доступ, скажем, к деревьям. Цвета (5,6) из любого суб, и я не уверен, что еще с этим делать. Есть идеи? Спасибо!
Спасибо за ваш ответ. Странно, что я сделал все, что вы упомянули с нуля (создал тестовый файл), сохранил все и запустил ящик пользователя перед закрытием всего файла. У меня ошибка. После закрытия книги и ее повторного открытия я запускал код без каких-либо проблем. Для меня это просто странно. В любом случае, если я правильно понимаю, все глобальные переменные входят в подменю Workbook_Open(), правильно? Итак, если бы я должен был установить переменную mapleTree = trees.Cells (1, 9), я смог бы получить доступ к mapleTree из других субмарин? В очередной раз благодарим за помощь! – EJM
Публичные переменные могут быть объявлены как в любом модуле, так и в любой панели кода рабочего листа, а оператор объявления ДОЛЖЕН быть размещен вне его вершины перед первым вводом Sub или Function. После объявления они доступны из любого Sub/Func любого модуля, как для настройки, так и для извлечения. Я бы добавил, что если ваши переменные должны быть разделены только между Subs/Func, все из которых находятся в одном и том же Модуле, тогда это был бы лучший выбор, объявляющий их как переменную уровня модуля (т. Е. 'Dim trees as Worksheet') самой верхней части самого модуля. – user3598756