powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Вопрос по передаче значений переменных из одной подпрограммы в другую ?
20 сообщений из 20, страница 1 из 1
Вопрос по передаче значений переменных из одной подпрограммы в другую ?
    #39788848
Yuri KR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Подскажите по вопросу передачи значений переменных из одной подпрограммы в другую.

Открываю Excel книгу(думаю почти не важно, что открывать) и присваиваю переменной FN_PRG имя открытой книги оператором FN_PRG = Application.ActiveWorkbook.Name
Отладчик показывает, что имя присвоено и все ОК.

Далее пытаюсь использовать переменную FN_PRG в другой подпрограмме, но переменная уже видится как пустая строка" " - Empty
Пробовал разные варианты - определял переменную в основном модуле или в процедуре открытия...
Результат везде отрицательный.
Подпрограммы определены как Public и по идее видимость переменной обеспечена...

Подскажите в чем может быть дело?
Как передавать значения переменных из подпрограммы в другие подпрограммы?
Спасибо!

Public Sub WorkBook_Open()
Dim FN_PRG As String
FN_PRG = Application.ActiveWorkbook.Name
Debug.Print "ИМЯ КНИГИ при открытии- "; FN_PRG
UserForm1.Show
End Sub

Public Sub ConnectExcel()
Debug.Print "FN_PRG в подпрограмме Connect- "; FN_PRG
' Здесь переменная FN_PRG уже пустая строка
' И соответственно использовать ее уже по назначению невозможно
End Sub
...
Рейтинг: 0 / 0
Вопрос по передаче значений переменных из одной подпрограммы в другую ?
    #39788855
yoichi730
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yuri KR,
Не удивительно. Скажу грубо и понятно. Ты пытаешься работать с параллельными вселенными, где есть индивиды с одинаковыми именами, но разные по своей сути..

Тебе нужно создать com объект для приложения excel, сделать ссылку к этому объекту и работать с объектом как с приложением. наладить вменяемый контакт, через com объект
...
Рейтинг: 0 / 0
Вопрос по передаче значений переменных из одной подпрограммы в другую ?
    #39788859
Serg197311
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yuri KR,
FN_PRG - у тебя просто стринг. И если я правильно понял, в новой подпрограмме тебе тоже нужен именно стринг с именем а не сам объект. Для этого перемести строку
Dim FN_PRG As String
в самый верх модуля формы, сразу за option explicit
...
Рейтинг: 0 / 0
Вопрос по передаче значений переменных из одной подпрограммы в другую ?
    #39788860
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yoichi730Yuri KR,
Не удивительно. Скажу грубо и понятно. Ты пытаешься работать с параллельными вселенными, где есть индивиды с одинаковыми именами, но разные по своей сути..

Тебе нужно создать com объект для приложения excel, сделать ссылку к этому объекту и работать с объектом как с приложением. наладить вменяемый контакт, через com объект
Дык ТС так и сделал будьте внимательны
...
Рейтинг: 0 / 0
Вопрос по передаче значений переменных из одной подпрограммы в другую ?
    #39788863
yoichi730
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yuri KR,

код в студию!! Больше кода!!
...
Рейтинг: 0 / 0
Вопрос по передаче значений переменных из одной подпрограммы в другую ?
    #39788866
yoichi730
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
что за переменная FN_PRG. Где ссылка на объект, где эта переменная светиться? Коллеги, ну вы чего? это разные области видимости, и имя переменной служит для простоты обращения к ячейке памяти.. пусть они называются одинаково, ну а ссылки то на самом деле разные
...
Рейтинг: 0 / 0
Вопрос по передаче значений переменных из одной подпрограммы в другую ?
    #39788879
Судя по приведенному коду и по тому, что Sub ConnectExcel() обращение к FN_PRG не вызывает ошибки, у вас, видимо такая переменная объявлена дважды. Один раз в заголовке модуля как Pablic Variant, а второй раз в Sub WorkBook_Open(), где она имеет приоритет и значение присваивается именно ей, а не первой.
Если угадал, то просто закомментируйте Dim FN_PRG As String.
...
Рейтинг: 0 / 0
Вопрос по передаче значений переменных из одной подпрограммы в другую ?
    #39788897
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yuri KRпеременная уже видится как пустая строка" " - EmptyТипизировать нужно переменные. Строка String не может быть Empty , это привилегия типа Variant
...
Рейтинг: 0 / 0
Вопрос по передаче значений переменных из одной подпрограммы в другую ?
    #39788904
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yuri KR, ну и заголовке каждого модуля обязательно должно быть указано

Код: vbnet
1.
2.
Option Compare Database
Option Explicit

Используйте Option Explicit
...
Рейтинг: 0 / 0
Вопрос по передаче значений переменных из одной подпрограммы в другую ?
    #39788960
Yuri KR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кривцов Анатолий,

Переменная объявлена один раз ....
Пробовал ее объявлять в перечисленных подпрограммах, в одной или другой, но конечно толку никакого ....
...
Рейтинг: 0 / 0
Вопрос по передаче значений переменных из одной подпрограммы в другую ?
    #39788961
Yuri KR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Панург,

да я так и сделал...
...
Рейтинг: 0 / 0
Вопрос по передаче значений переменных из одной подпрограммы в другую ?
    #39789010
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yuri KR,
сверху там где этот самый open explicit
плюхаешь
Код: vbnet
1.
Private FN_PRG As String


можно наслаждаться до следующей "поворота" поскольку переменная становится видимой в пределах именно этого модуля
...
Рейтинг: 0 / 0
Вопрос по передаче значений переменных из одной подпрограммы в другую ?
    #39789113
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не пойму, в чем проблема. Объявлено должно быть так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Option Compare Database
Option Explicit

Public FN_PRG As String

Public Sub WorkBook_Open()
FN_PRG = Application.ActiveWorkbook.Name
Debug.Print "ИМЯ КНИГИ при открытии- "; FN_PRG
UserForm1.Show
End Sub

Public Sub ConnectExcel()
Debug.Print "FN_PRG в подпрограмме Connect- "; FN_PRG
End Sub


Никаких объявлений этой переменной внутри процедур быть не должно. Проверьте, как этот код будет работать. Для верности измените имя FN_PRG на что-нибудь другое - если много объявленийв процедуре, то пропустить объявление локальной переменной довольно просто
...
Рейтинг: 0 / 0
Вопрос по передаче значений переменных из одной подпрограммы в другую ?
    #39789123
yoichi730
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хоспаде, подпрограмма это что ли Sub??.. Вот если бы сказали процедура, я меня было бы меньше путаницы. Хоть про область видимости одноименных переменных я был прав.
Согласен с господином MrShin, это рабочий вариант. Хоть и не обязательно все public делать, и с private должно работать (в рамках этого модуля).
...
Рейтинг: 0 / 0
Вопрос по передаче значений переменных из одной подпрограммы в другую ?
    #39789147
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yoichi730Хоспаде, подпрограмма это что ли Sub?? Подпрограмма (англ. subroutine)
...
Рейтинг: 0 / 0
Вопрос по передаче значений переменных из одной подпрограммы в другую ?
    #39789326
yoichi730
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Панург,
у меня в памяти отложилось что подпрограммами обзывают как процедуры так и функции. В этом случаи следует винить или мою память или преподавателя, который нам начитывал часы в универе.
А теперь по делу - без выноса FN_PRG в глобал. Да и смысл в ней пропадет, только читаемость кода повышает)..

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Option Compare Database
Option Explicit

Private Function WorkBook_Open() As string
Dim FN_PRG As string
FN_PRG =  Application.ActiveWorkbook.Name
WorkBook_Open = FN_PRG
End Sub

Public Sub PrintConnectExcel()
Debug.Print "Активная книга: "; WorkBook_Open
End Sub
...
Рейтинг: 0 / 0
Вопрос по передаче значений переменных из одной подпрограммы в другую ?
    #39789329
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yoichi730А теперь по делуПо делу - ТС нужно читать справочную литературу, а не пытаться изучать язык по форуму.

Область видимости переменных в Visual Basic для приложений

У меня такое осчучение, что у многих поиск не работает и Google забанили.
...
Рейтинг: 0 / 0
Вопрос по передаче значений переменных из одной подпрограммы в другую ?
    #39789370
Yuri KR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, спасибо всем за помощь!
В итоге разобрался.

Согласен, что надо было чуть больше кода написать, но не хотел загружать никого, интересовал сам принцип.
И надо было более акцентировано написать, что код Public Sub WorkBook_Open() исполняется при открытии Excel книги.
И я хотел сразу при открытии книги исполнялся код и зафиксировалось имя книги в переменной FN_RPG и дальше использовать ее значение в Public Sub ConnectExcel().
Но значение в Public Sub ConnectExcel() не попадало.
...
Рейтинг: 0 / 0
Вопрос по передаче значений переменных из одной подпрограммы в другую ?
    #39789404
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yuri KRкод Public Sub WorkBook_Open() исполняется при открытии Excel книги.это и ежу понятно. он больше нигде не выполнится правильно

Yuri KRИ я хотел сразу при открытии книги исполнялся код и зафиксировалось имя книги в переменной FN_RPG и дальше использовать ее значение в Public Sub ConnectExcel().ответили уже как 21839093
...
Рейтинг: 0 / 0
Вопрос по передаче значений переменных из одной подпрограммы в другую ?
    #39789405
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поправлю ссылку
Панургответили уже как 21838621
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Вопрос по передаче значений переменных из одной подпрограммы в другую ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]