powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / (VBA) Обращение к элементу активной формы из стандартного модуля(не из модуля самой формы)
7 сообщений из 7, страница 1 из 1
(VBA) Обращение к элементу активной формы из стандартного модуля(не из модуля самой формы)
    #39589004
AndreyRZD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемые друзья доброго дня.
Посодействуйте советом. Пытаюсь сделать контекстное меню к ListBox (называется - LBNameOfObjects2) на форме в EXCEL. Всё идёт хорошо в аккурат до момента когда необходимо после произведенных манипуляций обновить ListBox, ни какие известные мне манипуляции не помогают... Существует ли в принципе такая возможность?
Немного конкретики:
Это в модуле формы
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
'Формируем контекстное меню обработка события
Private Sub LBNameOfObjects2_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, _
 ByVal x As Single, ByVal y As Single)
    If Button = 2 Then
    mouse_event MOUSEEVENTF_LEFTDOWN, 0&, 0&, 0&, 0&
    mouse_event MOUSEEVENTF_LEFTUP, 0&, 0&, 0&, 0&
    DoEvents
    CreateNewMenu
    End If
 End Sub
'Создаём контекстное меню для объектов строительства
Sub CreateNewMenu()
On Error Resume Next: Application.CommandBars.Add "ContextMenuListBox", msoBarPopup
Dim CBar As CommandBar, Ctrl: Set CBar = Application.CommandBars("ContextMenuListBox")
 
For Each Ctrl In CBar.Controls: Ctrl.Delete: Next
AddItemIntoPopup CBar, 1, 213, "СозданиеНовогоФилиала", "Добавить филиал"
 
CBar.ShowPopup
End Sub


Это в обычном модуле
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
Public Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, _
ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
 Public Const MOUSEEVENTF_ABSOLUTE = &H8000
 Public Const MOUSEEVENTF_LEFTDOWN = &H2
 Public Const MOUSEEVENTF_LEFTUP = &H4
 Public Const MOUSEEVENTF_MIDDLEDOWN = &H20
 Public Const MOUSEEVENTF_MIDDLEUP = &H40
 Public Const MOUSEEVENTF_MOVE = &H1
 Public Const MOUSEEVENTF_RIGHTDOWN = &H8
 Public Const MOUSEEVENTF_RIGHTUP = &H10

'Функция создания контекстного меню
Function AddItemIntoPopup(ByRef Comm_Bar, ByVal CBar_Type As Integer, ByVal CBar_Face As Integer, _
ByVal On_Action As String, ByVal CBar_Caption As String, Optional ByVal Begin_Group As Boolean = False, _
Optional Tag As String = "") As CommandBarControl
Dim Add_Control
On Error Resume Next
Set Add_Control = Comm_Bar.Controls.Add(Type:=CBar_Type)
 
    With Add_Control
        If CBar_Face > 0 Then .FaceId = CBar_Face:
        .Tag = Tag: .OnAction = On_Action: .Caption = CBar_Caption: If Begin_Group Then .BeginGroup = True
    End With
End Function
'Добавление нового объекта строительства в базу данных через форму ChangeDogFRM
Public Sub СозданиеНовогоФилиала()
Dim NewObjectStroi$
    NewObjectStroi = InputBox("Введите название нового объекта - ")
   Call SQL_Editor("INSERT INTO Объекты ( [Имя объекта] )select '" & NewObjectStroi & "' ;", "ono")      
   ChangeDogFRM.LBNameOfObjects2.Clear
   LBNameOfObjects2_Zapolnenie (ChangeDogFRM.TB_ID.Value)
End Sub



Собственно проблема в последних 2-х строчках:
Код: vbnet
1.
2.
   ChangeDogFRM.LBNameOfObjects2.Clear 'очистка ListBox
   LBNameOfObjects2_Zapolnenie (ChangeDogFRM.TB_ID.Value)'функция в форме для заполнения ListBox из базы данных


Программа честно выполняет всё что до этого и более того не бьёт ошибок и на этих строках, но и не обновляет форму. При этом в функцию "LBNameOfObjects2_Zapolnenie" должен передаваться аргумент получаемый из заполненного поля формы, однако вместо этого уходит значение - "".
Важно отметить, что эти же две строчки помещённые на обработку события нажатия кнопки в модуле самой формы - прекрасно себя чувствуют и работают как положено.
Что и где я делаю не так? Заранее благодарен за Вашу помощь!
...
Рейтинг: 0 / 0
(VBA) Обращение к элементу активной формы из стандартного модуля(не из модуля самой формы)
    #39589010
AndreyRZD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Виноват, немного опечатался, вторая строка изложена в следующей редакции
Код: vbnet
1.
   ChangeDogFRM.LBNameOfObjects2_Zapolnenie (ChangeDogFRM.TB_ID.Value)
...
Рейтинг: 0 / 0
(VBA) Обращение к элементу активной формы из стандартного модуля(не из модуля самой формы)
    #39589012
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreyRZD,

а нет возможности объявить Public переменную для формы? При инициализации назначаете ей значение формы:
Код: vbnet
1.
set oUF_Public = Me


а далее просто обращаетесь именно к ней(если она запущена, конечно):
Код: vbnet
1.
2.
3.
4.
If not oUF_Public  is nothing then
   oUF_Public.LBNameOfObjects2.Clear 'очистка ListBox
   LBNameOfObjects2_Zapolnenie (oUF_Public.TB_ID.Value)'функция в форме для заполнения ListBox из базы данных
end if


Должно сработать
...
Рейтинг: 0 / 0
(VBA) Обращение к элементу активной формы из стандартного модуля(не из модуля самой формы)
    #39589019
AndreyRZD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
The_Prist,

Благодарю Вас! Действительно работает.
Подскажите, а возможно как-то обыграть эту ситуацию если открыто несколько экземпляров одной формы? Одной глобальной переменной я так понимаю тут уже не отделаться?
...
Рейтинг: 0 / 0
(VBA) Обращение к элементу активной формы из стандартного модуля(не из модуля самой формы)
    #39589026
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChangeDogFRM - это, как я понимаю, имя класса формы? ну так с чего бы коду работать - Вы шлёте команды этой самой абстрактной форме, сиречь классу, в то время как надо работать с конкретным экземпляром.

Так что надо объявить (видимо, глобально) переменную класса формы, типа
Код: vbnet
1.
Public MyChangeDogFRM As ChangeDogFRM


открывать её соответствующим присвоением конкретного экземпляра
Код: vbnet
1.
2.
Set MyChangeDogFRM = New ChangeDogFRM
MyChangeDogFRM.Load ' или Show? а, разберёшься...


и в коде адресоваться именно к этому конкретному экземпляру
Код: vbnet
1.
MyChangeDogFRM.LBNameOfObjects2.Clear 'очистка ListBox
...
Рейтинг: 0 / 0
(VBA) Обращение к элементу активной формы из стандартного модуля(не из модуля самой формы)
    #39589029
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если надо несколько форм - объявите несколько переменных (а то и массив...).
...
Рейтинг: 0 / 0
(VBA) Обращение к элементу активной формы из стандартного модуля(не из модуля самой формы)
    #39589090
AndreyRZD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

Спасибо! Очень признателен Вам за ответ.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / (VBA) Обращение к элементу активной формы из стандартного модуля(не из модуля самой формы)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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