Здравствуйте. я только учусь программированию VBA в Excel. Помогите найти ошибку в коде:
Код
Public Sub testrun1()
Dim z As Integer
z = Application.Run("BookOne.xlsm!BookOneProject.Module1.Plus1", 7)
MsgBox ("z= " & z)
Call Application.Run("BookOne.xlsm!BookOneProject.Module1.PlusXY", 5, 7)
MsgBox ("GlobalZ = " & BookOneProject.GlobalZ) - ошибку выдает здесь. как правильно ссылаться на переменную из другого макроса. переменная глобальная
End Sub
olgafarowa написал: я только учусь программированию VBA в Excel
И сразу потребовалось добывать переменную из другого проекта? Программирование на VBA начинается с Option Explicit , поставьте галку Tools - Options - Require Variable Declaration В частности, при наличии этой опции компилятор сообщает, что переменная BookOneProject не определена. И это действительно так - данное имя определено в пространстве имен другого проекта, а не этого. Доступ к переменным другого проекта получить нельзя. К процедурам - можно, это Вы успешно проделываете с помощью Run. Значит, в том проекте надо создать функцию типа
Казанский, простите за невежество и праздный интерес. А можно ли сделать универсальную функцию (подпрограмму) и передавать имя переменной как аргумент?
Казанский написал: И сразу потребовалось добывать переменную из другого проекта?
я выполняю лабораторные работы.
Цитата
Казанский написал: Программирование на VBA начинается с Option Explicit , поставьте галку Tools - Options - Require Variable Declaration
галку поставила спасибо. переменная у меня была объявлена в другом проекте как глобальная переменная.
BookOneProject - это имя проекта в первом документе. вот код первой программы:
Код
Option Explicit
Public GlobalZ As Variant
Public Function Plus1(ByVal X As Integer) As Integer
Plus1 = X + 1
End Function
Public Sub PlusXY(ByVal X As Integer, Y As Integer)
GlobalZ = X + Y
End Sub
End Sub
правильно я поняла, что вывести во второй программе глобальную переменную из первой программы через процедуру нельзя? только через функцию? я думала, что ошибка именно в прописывании пути к переменной.
Казанский написал: Доступ к переменным другого проекта получить нельзя.
Спорно, Алексей. В наиболее употребляемом случае позднего связывания через Application.Run - да. Но ведь ни кто и ни что не запрещает раннего? Архив распаковать в папку c:\Path. Метод InitBook1PublicVariable проекта в книге book1 инициализирует глобальную переменную Book1PublicVariable (объявленную в проекте книги book1) в модуле Book1Module1, а метод showBook1PublicVariable проекта книги book2 показывает значение этой переменной
Андрей VG, да, действительно. В какую папку распаковывать - безразлично. Я просто открыл оба файла из окна WinRAR, файлы были распакованы в разные папки, все работает.
Цитата
Андрей VG написал: ни кто и ни что не запрещает раннего?
В данном случае это неизвестно, ТС не представила задания.