Страницы: 1
RSS
Ссылка на переменную из другой книги
 
Здравствуйте. я только учусь программированию 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
ошибка: run-time error 424
object required

Спасибо заранее!
Изменено: olgafarowa - 20.11.2018 21:48:12
я ДЕВУШКА! )
 
Цитата
olgafarowa написал:
я только учусь программированию VBA в Excel
И сразу потребовалось добывать переменную из другого проекта?
Программирование на VBA начинается с Option Explicit , поставьте галку Tools - Options - Require Variable Declaration
В частности, при наличии этой опции компилятор сообщает, что переменная BookOneProject не определена. И это действительно так - данное имя определено в пространстве имен другого проекта, а не этого. Доступ к переменным другого проекта получить нельзя. К процедурам - можно, это Вы успешно проделываете с помощью Run.
Значит, в том проекте надо создать функцию типа
Код
Public Function GetZ()
  GetZ = Z
End Function
и вызывать ее.
 
Казанский, простите за невежество и праздный интерес.
А можно ли сделать универсальную функцию (подпрограмму) и передавать имя переменной как аргумент?
По вопросам из тем форума, личку не читаю.
 
Цитата
Казанский написал:
И сразу потребовалось добывать переменную из другого проекта?
я выполняю лабораторные работы.
Цитата
Казанский написал:
Программирование на 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
правильно я поняла, что вывести во второй программе глобальную переменную из первой программы через процедуру нельзя? только через функцию?
я думала, что ошибка именно в прописывании пути к переменной.  
Изменено: olgafarowa - 21.11.2018 06:34:32
я ДЕВУШКА! )
 
прикладываю файлы
я ДЕВУШКА! )
 
Доброе время суток
Цитата
Казанский написал:
Доступ к переменным другого проекта получить нельзя.
Спорно, Алексей. В наиболее употребляемом случае позднего связывания через Application.Run - да. Но ведь ни кто и ни что не запрещает раннего?
Архив распаковать в папку c:\Path. Метод InitBook1PublicVariable проекта в книге book1 инициализирует глобальную переменную Book1PublicVariable (объявленную в проекте книги book1) в модуле Book1Module1, а метод showBook1PublicVariable проекта книги book2 показывает значение этой переменной :)
Изменено: Андрей VG - 21.11.2018 08:14:55
 
Андрей VG, да, действительно.
В какую папку распаковывать - безразлично. Я просто открыл оба файла из окна WinRAR, файлы были распакованы в разные папки, все работает.
Цитата
Андрей VG написал:
ни кто и ни что не запрещает раннего?
В данном случае это неизвестно, ТС не представила задания.
 
olgafarowa, Почитайте Уокенбаха, там способ от Андрей VG, описывается.
"Все гениальное просто, а все простое гениально!!!"
 
Всем большое спасибо !
я ДЕВУШКА! )
 
Цитата
Казанский написал:
В какую папку распаковывать - безразлично
Алексей, спасибо за тестирование. Не проверял. Подозреваю, что если бы лежали в разных папках, то могло бы оказать влияние на связывание.
Цитата
Казанский написал:
ТС не представила задания.
Застенчивый :)
Изменено: Андрей VG - 21.11.2018 13:29:24
 
Цитата
БМВ написал:
А можно ли сделать универсальную функцию (подпрограмму) и передавать имя переменной как аргумент?
да, я часто использую передачу инфо через реестр виндовс.
то-есть , передал в реестр, а з другой программы забираю.
Страницы: 1
Наверх