#vba #ms-access
#vba #ms-access
Вопрос:
У меня есть строка, Application.hWndAccessApp
которая появляется в нескольких строках кода для вызова пользовательского MsgBoxT
. Вместо записи Application.hWndAccessApp
в каждом экземпляре в модулях и классах, я бы хотел, чтобы оно было присвоено общедоступной переменной, такой как hid as string
. Я знаю об объявлении общедоступной переменной и последующем присвоении ей значения в функции или подпрограмме.
Здесь я хотел бы, чтобы это значение присваивалось глобально, чтобы оно становилось доступным во всех модулях / классах каждый раз, когда я хочу использовать MsgBoxT
функцию.
РЕДАКТИРОВАТЬ: я последовал совету из комментариев ниже, но это дает Error # 13: Type Mismatch
.
Global Const hid = "Application.hWndAccessApp"
Затем я вызываю это, используя функцию ниже:
MsgBoxT hid, "Record Updated!", "Confirmation", VbInformation, 0 , 1000
Моя функция MsgBoxT объявлена общедоступной:
Public Declare PtrSafe Function MsgBoxT _
Lib "user32" _
Alias "MessageBoxTimeoutA" ( _
ByVal hwnd As LongPtr, _
ByVal lpText As String, _
ByVal lpCaption As String, _
ByVal wType As VbMsgBoxStyle, _
ByVal wLange As Long, _
ByVal dwTimeout As Long) _
As Long
Ответ №1:
Исходя из обновленного вопроса, переменной является LongPtr
. Поскольку она инициализирована на Runtime
, у вас есть один вариант:
-
Объявляем глобальный LongPtr, который вы назначите в следующий момент:
Global hid As LongPtr
hid = Application.hWnd
Благодаря обновленному коду из приведенного ниже вопроса, теперь он работает без сбоев:
Global hid As LongPtr
Public Declare PtrSafe Function MsgBoxT _
Lib "user32" _
Alias "MessageBoxTimeoutA" ( _
ByVal hwnd As LongPtr, _
ByVal lpText As String, _
ByVal lpCaption As String, _
ByVal wType As VbMsgBoxStyle, _
ByVal wLange As Long, _
ByVal dwTimeout As Long) _
As Long
С этими изменениями это работает (протестировано на моем ПК):
'On This_Workbook
Private Sub Workbook_Open()
hid = Application.hwnd
End Sub
'Anywhere in the code
Sub test()
MsgBoxT hid, "Record Updated!", "Confirmation", vbInformation, 0, 1000
End Sub
Комментарии:
1. Это означает, что это не
String
. Просто изменитеString
на фактический тип, который она использует. Чтобы узнать, вы можете использовать VBADebug tools
.2. Я обновил свой вопрос с помощью
Code
. Не могли бы вы, пожалуйста, взглянуть и сообщить мне, где я здесь допускаю ошибку.3. Я скопировал и вставил точные ваши слова
code
, и это выдает мне ту же ошибку. Это становится для меня загадкой.4. Попробуйте сейчас. Я обнаружил, что это
Application.hWnd
работает, в то время какApplication.hWndAccessApp
нет. Дайте мне знать, если это исправит проблему.5. Конечно, я это сделал. Спасибо за помощь!
Ответ №2:
Public hid as string
Sub Main()
hid = Application.hWndAccessApp
End Sub
или
Private Sub Workbook_Open()
hid = Application.hWndAccessApp
End Sub