powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBA Enter для textbox срабатывает только один раз
22 сообщений из 97, страница 4 из 4
VBA Enter для textbox срабатывает только один раз
    #39251909
ypmail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В Class Modules Enter/Exit не существует...
...
Рейтинг: 0 / 0
VBA Enter для textbox срабатывает только один раз
    #39252000
ypmail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProypmailЗаменил Enter на Change - работаетда, я тоже это для начала попробовал. Ну чтобы не лезть уже в какую-то экзотику, можно оставить обработчики событий на форме, но содержимое я бы все-таки вынес в отдельную процедуру, хоть это и одна строка (сегодня одна, завтра десять), а в самих обработчиках прописать вызов этой процедуры.

Делаю процедуру в Module1:
Код: vbnet
1.
2.
3.
4.
Sub OpenCalendar()
For i = 1 To 8
Me.Date(i) = Format(Get_Date(Me.Date(i), Now), "MMMM yyyy")
End Sub



В событиях Enter на форме будет вызов этой процедуры, всего одно слово OpenCalendar
С самой процедурой что-то не то. Не пойму, как программа поймет какое значение i для того или иного текстбокса использовать? С процедурами и функциями в примитивных примерах более менее понятно, но тут 8 текстбоксов и для всех надо задать одну процедуру, по-моему нереально.
...
Рейтинг: 0 / 0
VBA Enter для textbox срабатывает только один раз
    #39252006
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем там цикл? Она должна делать один конкретный вызов. То есть в процедуре так и будет только одна строка. А с каким именно текстбоксом работать - передается через параметр процедуры. Можно передавать его индекс, а можно передавать сам текстбокс.
...
Рейтинг: 0 / 0
VBA Enter для textbox срабатывает только один раз
    #39252092
ypmail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

Одной строчкой можно только показать форму Form_SelectDate.Show для всех текстбоксов, в которых я пропишу вызов функции при событии Enter. Тут же происходит формат данных, полученных функцией для конкретного текстбокса (8 шт.), да ещё в ходе срабатывания функции Get_Date происходит показ формы Form_SelectDate.Show.
Код: vbnet
1.
Me.Date1 = Format(Get_Date(Me.Date1, Now), "MMMM yyyy")


Просто форму показать, нажатие клавиши отследить и т.д. - это работает. Тут же конкретная привязка к текстбоксам Date1, Date2, Date3 и т.д. до Date8, чем универсальным их можно заменить?
...
Рейтинг: 0 / 0
VBA Enter для textbox срабатывает только один раз
    #39252138
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что у вас меняется в этой строчке для каждого обработчика? Только сам текстбокс. Вот его и сделайте параметром процедуры.

Либо, как вариант Me.Controls("Date"+CStr(i)) и сделать i параметром процедуры.
...
Рейтинг: 0 / 0
VBA Enter для textbox срабатывает только один раз
    #39252344
ypmail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

Help: Процедуры и функции VBA
Выполнение программного кода процедуры или функции происходит при передаче ей управления. Передача управления (вызов) может осуществляться различными способами. В общем случае подпрограмма вызывается из программного кода с помощью специального оператора Са11 , в котором кроме данного ключевого слова указываются имя процедуры и фактические параметры вызова, список которых заключается в круглые скобки.


Это всё, что в самоучителях пишут про параметры. Как я понял из справки в форме указываем функцию с параметром i=1:
Код: vbnet
1.
2.
3.
Private Sub Date1_Enter()
Call OpCal(i = 1)
End Sub


Процедура в Module1:
Код: vbnet
1.
2.
3.
Private Sub OpCal()
Me.Controls("Date" + CStr(i)) = Format(Get_Date(Me.Controls("Date" + CStr(i)), Now), "MMMM yyyy")
End Sub


---------------------------
Microsoft Visual Basic for Applications
---------------------------
Compile error:

Sub or Function not defined
---------------------------
ОК Справка
---------------------------

Я процедуру неправильно указываю в Date_Enter или саму процедуру OpCal неправильно записал?
...
Рейтинг: 0 / 0
VBA Enter для textbox срабатывает только один раз
    #39252348
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ypmailЭто всё, что в самоучителях пишут про параметры.Да неужели!
http://computers.plib.ru/programming/Books.VBasic6/Chapter 5/ch40.htm
http://computers.plib.ru/programming/Books.VBasic6/Chapter 5/ch39.htm
...
Рейтинг: 0 / 0
VBA Enter для textbox срабатывает только один раз
    #39252358
ypmail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему-то у меня даже в списке нет этой процедуры.
...
Рейтинг: 0 / 0
VBA Enter для textbox срабатывает только один раз
    #39252360
ypmail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня еще путаница возникла, параметр и аргумент это одно и то же? И то и то в скобках пишут после названия процедуры, в чём разница?
...
Рейтинг: 0 / 0
VBA Enter для textbox срабатывает только один раз
    #39252365
ypmail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема с отсутствием процедуры в списке была из-за Privat
Дальше, как я и предполагал, тело процедуры криво записано, а как правильно не понимаю.
...
Рейтинг: 0 / 0
VBA Enter для textbox срабатывает только один раз
    #39252392
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ypmailпараметр и аргумент это одно и то же?да.
По большому счету аргумент - это со стороны вызова (по аналогии с аналогичным математическим понятием), а параметр это то же самое со стороны самой процедуры.

ypmailПроблема с отсутствием процедуры в списке была из-за Privatвот я о чем и говорю, вместо того, чтобы прочитать про какие-то основы, будем биться головой об стену.


Про Me то же самое - это основы. Me в VB - это ссылка на текущий класс или форму (которая, собственно, тоже является классом). В модуле никакого Me нет, потому что это не форма.
Соответственно, либо надо использовать процедуру там, где есть Me, либо заменить Me на UserForm1 (чтобы ссылаться на форму) - это плохой вариант, либо вместо передачи индекса i передавать сам объект текстбокса, тогда ссылка на форму не понадобится в принципе.
...
Рейтинг: 0 / 0
VBA Enter для textbox срабатывает только один раз
    #39268845
ypmail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProПро Me то же самое - это основы. Me в VB - это ссылка на текущий класс или форму (которая, собственно, тоже является классом). В модуле никакого Me нет, потому что это не форма.
Соответственно, либо надо использовать процедуру там, где есть Me, либо заменить Me на UserForm1 (чтобы ссылаться на форму) - это плохой вариант, либо вместо передачи индекса i передавать сам объект текстбокса, тогда ссылка на форму не понадобится в принципе.

Удалил я везде Me - ошибка. Если 8 раз прописать в модуле
Me.Date1 = Format(Get_Date(Me.Date1, Now), "MMMM yyyy")
Me.Date2 = Format(Get_Date(Me.Date2, Now), "MMMM yyyy")
и т.д. до Date8, чтобы передавать сам объект текстбокса, то тоже ничего не работает.
...
Рейтинг: 0 / 0
VBA Enter для textbox срабатывает только один раз
    #39268852
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
покажите, что получилось - в модуле и на форме
...
Рейтинг: 0 / 0
VBA Enter для textbox срабатывает только один раз
    #39278348
ypmail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
...
Рейтинг: 0 / 0
VBA Enter для textbox срабатывает только один раз
    #39278368
ypmail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот ещё вариант. Никак не могу понять как передавать сам объект текстбокса...
...
Рейтинг: 0 / 0
VBA Enter для textbox срабатывает только один раз
    #39278467
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ypmailНикак не могу понять как передавать сам объект текстбокса...Я так и не увидел в приложенных файлах попыток что-то передать. Текстбокс передается точно так же, как и Integer в примере у вас выше.

Процедура
Код: vbnet
1.
2.
3.
4.
5.
Sub MyProcedure(MSForms.TextBox MyTextbox)

MyTextbox.Text = "bla-bla"

End Sub

Вызов
Код: vbnet
1.
MyProcedure Date5
...
Рейтинг: 0 / 0
VBA Enter для textbox срабатывает только один раз
    #39278719
ypmail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не пойму, что ему надо? Скобки все на месте. Может это не в модуле надо делать?
...
Рейтинг: 0 / 0
VBA Enter для textbox срабатывает только один раз
    #39278725
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Виноват, на синтаксис Си сбился.
Но ведь голова для того, чтобы думать, а не просто копипастить (впрочем, я это, кажется, уже говорил)

Код: vbnet
1.
Sub MyProcedure(MyTextbox As MSForms.TextBox)
...
Рейтинг: 0 / 0
VBA Enter для textbox срабатывает только один раз
    #39278736
ypmail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот я и думал весь день, да видать думалка у меня не под то заточена, но есть надо, от которого никуда не деться )
В модуле прописал:
Код: vbnet
1.
2.
3.
Sub MyProcedure(MyTextbox As MSForms.TextBox)
MyTextbox = Format(Get_Date(MyTextbox, Now), "MMMM yyyy")
End Sub

Работает! Надеюсь правильно записал?
Вериницу энтеров для каждого поля так и придётся оставлять или есть варианты упрощения?
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Sub Date1_Enter()
MyProcedure Date1
End Sub

Sub Date2_Enter()
MyProcedure Date2
End Sub

Sub Date3_Enter()
MyProcedure Date3
End Sub
...
Рейтинг: 0 / 0
VBA Enter для textbox срабатывает только один раз
    #39278804
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ypmailВериницу энтеров для каждого поля так и придётся оставлять?К сожалению, как мы выяснили ранее, это событие перехватываться нормально не хочет, и это не проблема программирования, а проблема где-то внутри самих объектов.
...
Рейтинг: 0 / 0
VBA Enter для textbox срабатывает только один раз
    #39278807
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ypmailНадеюсь правильно записал?Надеюсь, вы дадите вменяемое название процедуре все-таки. Это правило хорошего тона в программировании сильно облегчит жизнь со временем.
...
Рейтинг: 0 / 0
VBA Enter для textbox срабатывает только один раз
    #39280457
ypmail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProНадеюсь, вы дадите вменяемое название процедуре все-таки. Это правило хорошего тона в программировании сильно облегчит жизнь со временем.
Это я сразу сделал после написания сообщения. Тоже не люблю всякие MyProcedure. Спасибо большое за помощь. Как будет время, буду копать календарик, чтобы месяцы и годы как-то поудобнее перелистывать.
...
Рейтинг: 0 / 0
22 сообщений из 97, страница 4 из 4
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBA Enter для textbox срабатывает только один раз
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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