powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Как ответить на "вопросы" макроса в run-time?
19 сообщений из 19, страница 1 из 1
Как ответить на "вопросы" макроса в run-time?
    #36596430
мадама
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я из ексельного файла A вызываю другой ексельный файл, скажем, B и работаю с ним, там много чего копирую, создаю и т.д. В файле В есть маскрос, который при его загрузке спрашивает 3 вопроса. Естественно эти вопросы выскакивают на экране в виде msgbox cо стандартными выборами (yes, no, cancel и т.д.)

ВОПРОС:
как я могу из файла А дать ответы на эти вопросы (я ответы знаю), так что бы моя программа текла гладко и не прерывалась появлением этих msgbox-ов?

Спасибо!

Excel 2007, Win XP.
...
Рейтинг: 0 / 0
Как ответить на "вопросы" макроса в run-time?
    #36596440
Фотография DzonyB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мадамаЯ из ексельного файла A вызываю другой ексельный файл, скажем, B и работаю с ним, там много чего копирую, создаю и т.д. В файле В есть маскрос, который при его загрузке спрашивает 3 вопроса. Естественно эти вопросы выскакивают на экране в виде msgbox cо стандартными выборами (yes, no, cancel и т.д.)

ВОПРОС:
как я могу из файла А дать ответы на эти вопросы (я ответы знаю), так что бы моя программа текла гладко и не прерывалась появлением этих msgbox-ов?

Спасибо!

Excel 2007, Win XP.

Но вы в Форуме Access!!!
...
Рейтинг: 0 / 0
Как ответить на "вопросы" макроса в run-time?
    #36596456
мадама
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DzonyB,
Тут толковые люди. И тот же vba.
...
Рейтинг: 0 / 0
Как ответить на "вопросы" макроса в run-time?
    #36596461
Фотография DzonyB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а показать текст макроса можете?

Модератор: Тема перенесена из форума "Microsoft Access".
...
Рейтинг: 0 / 0
Как ответить на "вопросы" макроса в run-time?
    #36596554
мадама
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот кусок макроса из файла В. В зависимости от ответов меняются данные. Т.е. ответ важен, я не могу просто отрубить это дело.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
        
Select Case MsgBox("Do you want to reformat the currency values as Euros?" & vbCrLf & vbCrLf & _
                           "Select 'Yes' for Euros." & vbCrLf & "Select 'No' for Pounds." & vbCrLf & "Select 'Cancel' for Dollars." & vbCrLf, vbYesNoCancel + vbDefaultButton3, "Number Format")
            Case vbYes
                strNumberFormat = strEuroFormat
            Case vbNo
                strNumberFormat = strPoundFormat
            Case Else
                strNumberFormat = strDollarFormat
        End Select
        
...
Рейтинг: 0 / 0
Как ответить на "вопросы" макроса в run-time?
    #36596575
PlanB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Application.DisplayAlerts = False
включить потом не забудьте =)))
...
Рейтинг: 0 / 0
Как ответить на "вопросы" макроса в run-time?
    #36596684
Сергей06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PlanB,
а можно и не включать. сам включится.
...
Рейтинг: 0 / 0
Как ответить на "вопросы" макроса в run-time?
    #36597212
мадама
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это у меня уже давно стоит. Во-первых вопросы почему-то всё равно появляются, допустим над этим можно было бы поработать и добиться их исчезновения, но мне надо не просто пригнорировать вопросы, а ответить на них определённым образом.
3 вопроса: 1-й Cancel и два No.
...
Рейтинг: 0 / 0
Как ответить на "вопросы" макроса в run-time?
    #36597229
Фотография vlth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мадамакак я могу из файла А дать ответы на эти вопросы (я ответы знаю), так что бы моя программа текла гладко и не прерывалась появлением этих msgbox-ов?

Запишите ответы куда-нить из файла А (реестр, ячейки листа книги B, текстовый файл... - вариантов множество) и читайте их из кода VBA файла B.
Напрямую значения переменных, к сожалению, из книги А в книгу B не передать.
...
Рейтинг: 0 / 0
Как ответить на "вопросы" макроса в run-time?
    #36597276
мадама
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlth,
знать ответы и где их хранить не проблема. Проблема как "сказать" файлу В об этом?
...
Рейтинг: 0 / 0
Как ответить на "вопросы" макроса в run-time?
    #36597285
Фотография vlth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мадама, "обрубите",как Вы это называете, опубликованный код, а вместо его выполнения присвойте требуемое значение переменной strNumberFormat.
strNumberFormat = [a1], например (a1 - ячейка листа книги B)
...
Рейтинг: 0 / 0
Как ответить на "вопросы" макроса в run-time?
    #36597329
Фотография vlth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мадамамне надо не просто пригнорировать вопросы, а ответить на них определённым образом.
3 вопроса: 1-й Cancel и два No
Если эти значения не должны меняться, объявите вместо трёх переменных (одну из них - strNumberFormat - Вы опубликовали) три константы:
Код: plaintext
1.
Const сstrNumberFormat As String=strDollarFormat ' например
Хотя, похоже, strDollarFormat, это и есть Ваша константа...
...
Рейтинг: 0 / 0
Как ответить на "вопросы" макроса в run-time?
    #36597616
мадама
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlth,
вы по-моему что-то путаете. Я нахожусь в файле A. Этот код происходит в файле В. У меня нет доступа к КОДУ файла В в run-time. У меня есть доступ только к обектам этого workbook.
...
Рейтинг: 0 / 0
Как ответить на "вопросы" макроса в run-time?
    #36597658
Фотография vlth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мадама, я Вас понял и ничего не путаю.

Из описания задачи следует, что конечной целью является присвоение значений неким переменным в коде файла B.
Это можно сделать:

1. Во время выполнения кода файла B, запускаемого из кода файла A (передавая их значения посредством промежуточных записей в ячейки листа книги B, например);

2. Если передаваемые значения всегда одни и те же, прописать их в коде файла B в режиме редактирования.


И в первом, и во втором случае вызов MsgBox-ов, которыми Вы хотите управлять, становится лишним.
"Нажимать" же кнопки 'Да', 'Нет' и 'Отмена' MsgBox-ов программно можно с помощью метода SendKeys, но это абсурдный вариант.
...
Рейтинг: 0 / 0
Как ответить на "вопросы" макроса в run-time?
    #36601473
мадама
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Повторю ещё раз, код файла В мне недоступен. Файл В создаётся на машине юзера другой программой. У меня просто есть образец этого файла из которого я привела вам кусочек кода.

Насчёт SendKeys я с вами согласна, я тоже не люблю этот вариант.
...
Рейтинг: 0 / 0
Как ответить на "вопросы" макроса в run-time?
    #36601579
Фотография vlth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мадамаТ.е. ответ важен, я не могу просто отрубить это дело.Т.е. получается, что "могу, но это не будет правильно, потому что ответ - важен"
Файл В создаётся на машине юзера другой программойСказали бы сразу, а то напустили тумана...

В таком случае остаётся только SendKeys управлять MsgBox-ами иначе не получится.
Кстати, это модальные окна, поэтому A и B должны запускаться в разных экземплярах Excel.

Может быть, есть ещё возможность управлять ими с помощью функций API, но это так... предположение.
...
Рейтинг: 0 / 0
Как ответить на "вопросы" макроса в run-time?
    #36602924
Фотография vlth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мадама, вот Вам пример управления окном MsgBox с помощью функций API, который Вы можете доработать для решения своей задачи:
Код: plaintext
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.
Option Explicit
Declare Function SendMessage32 Lib "user32" Alias "SendMessageA" _
    (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" _
    (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
    (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Const WM_LBBUTTONDOWN = &H201
Const WM_LBBUTTONUP = &H202

Sub ClickOnButtonInMsgBox()
Dim hWnd As Long
Dim x As Long, y As Long, z As Long

'Вместо AAA подставьте заголовок Вашего MsgBox-а
hWnd = FindWindow("#32770", "AAA") 'указатель на окно MsgBox

x = FindWindowEx(hWnd,  0 , "button", vbNullString) 'указатель на кнопку 'Ok'     (кнопку №1)
y = FindWindowEx(hWnd, x, "button", vbNullString) 'указатель на кнопку 'No'     (кнопку №2)
z = FindWindowEx(hWnd, y, "button", vbNullString) 'указатель на кнопку 'Cancel' (кнопку №3)

'Имитация щелчка левой клавишей мыши по кнопке 'Cancel' MsgBox-а
SendMessage32 z, WM_LBBUTTONDOWN,  1 ,  1  'нажатие на кнопку 'Cancel' левой клавишей мыши
SendMessage32 z, WM_LBBUTTONUP,  1 ,  1    'отжатие левой клавиши мыши на кнопке 'No'

End Sub

Документ с кодом необходимо загружать в приложении (или экземпляре приложения), отличном от родителя окна MsgBox, которым предполагается управлять.
...
Рейтинг: 0 / 0
Как ответить на "вопросы" макроса в run-time?
    #36602936
Фотография vlth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Опечатка:
Код: plaintext
SendMessage32 z, WM_LBBUTTONUP,  1 ,  1    'отжатие левой клавиши мыши на кнопке 'No'
Верно:
Код: plaintext
1.
SendMessage32 z, WM_LBBUTTONUP,  1 ,  1    'отжатие левой клавиши мыши на кнопке 'Cancel'
...
Рейтинг: 0 / 0
Как ответить на "вопросы" макроса в run-time?
    #36604332
Фотография vlth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мадама3 вопроса: 1-й Cancel и два No
Как-то так:
Код: plaintext
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.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
Option Explicit
Declare Function SendMessage32 Lib "user32" Alias "SendMessageA" _
    (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" _
    (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
    (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    
'Таймер высокого разрешения (в коде не использован)
'Declare Function SetTimer Lib "user32" _
'    (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
'Declare Function KillTimer Lib "user32" _
'    (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
'Dim TimerID As Long

Dim i As Byte
Const WM_LBBUTTONDOWN = &H201
Const WM_LBBUTTONUP = &H202

Sub ClickOnButtonInMsgBox(ByVal bytNcbn As Byte)
Dim hwnd As Long
Dim x As Long, y As Long, z As Long

'Вместо AAA подставьте заголовок Вашего MsgBox-а
hwnd = FindWindow("#32770", "AAA") 'указатель на окно MsgBox

x = FindWindowEx(hwnd,  0 , "button", vbNullString) 'указатель на кнопку 'Ok'     (кнопку №1)
y = FindWindowEx(hwnd, x, "button", vbNullString) 'указатель на кнопку 'No'     (кнопку №2)
z = FindWindowEx(hwnd, y, "button", vbNullString) 'указатель на кнопку 'Cancel' (кнопку №3)

'Имитация щелчка левой клавишей мыши по кнопке 'Cancel' MsgBox-а
SendMessage32 IIf(bytNcbn <  3 , y, z), WM_LBBUTTONDOWN,  1 ,  1  'нажатие на кнопку 'Cancel' левой клавишей мыши
SendMessage32 IIf(bytNcbn <  3 , y, z), WM_LBBUTTONUP,  1 ,  1   'отжатие левой клавиши мыши на кнопке 'Cancel'
If hwnd >  0  Then i = i +  2 
End Sub

Sub test()
Dim bytBN As Byte

Select Case i
    Case  0 : bytBN =  3 
    Case  2  To  4 : bytBN =  2 
End Select
ClickOnButtonInMsgBox ByVal bytBN
If i >  4  Then
    i =  0 
    Exit Sub
End If
Application.OnTime Now + TimeValue("0:00:01"), "test"
End Sub

Скрипт vbs для проверки:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
for j= 1  to  3 
 x=MsgBox( "", vbYesNoCancel,"AAA")
 select case x
  case  6 :i= 1 
  case  7 :i= 2 
  case  2 :i= 3 
 end select
 MsgBox "нажата кнопка № " & i
next
Запускаем процедуру 'test', далее запускаем скрипт.
Если частота проверки раз в секунду мала, подключайте таймер - тогда окна на экране, думаю, вообще даже мелькать не будут.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Как ответить на "вопросы" макроса в run-time?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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