Страницы: 1
RSS
Описание в VBA эмуляции нажатия клавиш "Да" и "Нет"
 
Здравствуйте!  
Помогите, пжл!  
В файле Excel'а есть макрос, который запускается при изменении значения в определенной ячейке. Его работа заканчивантся тем, что выскакивает UserForm, аналогичная MsgBox, требующая нажатия клавиш "Да" или "Нет". Можно ли каким-то образом в VBA прописать эмуляцию нажатия одной из этих двух клавиш, т.к. другой макрос вставляет в эту самую определенную ячейку значение, вызывающее запуск вышеописанного макроса.  
Файла сейчас к сожалению нет под рукой. Если решение этой проблемы требует детальное изучение этой UserForm, то выложу завтра.  
Спасибо!
 
Какая связь макросов и кнопки?  
Первый отработал - показал форму с кнопками.  
Второй отработал - поменял значение в ячейке. При изменении значения запустился  первый и показал форму.  
При чем здесь эмуляция кнопки?
 
Конечно можно:  
Call CommandButton1_Click  
Только не пойму смысла сего действа: зачем вызывать ФОРМУ, на которой ничего руками нажимать не нужно?
 
Да, только следует сделать эти процедуры публичными - убрать слово Private, которое вставляется по умолчанию:  
 
Sub CommandButton1_Click()  
'...  
End Sub  
 
А в вызывающем макросе писать  
 
UserForm1.CommandButton1_Click
 
2 vikttur  
Простите! М.б. я что-то не так написал.  
У меня Макрос1. У которого в процессе работы запускается Макрос2.  
Для того, чтобы Макрос1 продолжил работу, нужно с эмулировать не кнопку, а НАЖАТИЕ кнопки "Да" или "Нет". Или я в что-то не так пишу?  
2 Юрий М  
Спасибо Вам за помощь!  
Там такая ситуация. Мой макрос вводит ряд значений в ячейку. После ввода каждого значения в ячейку программа в соответствии со вторым макросом (написан другим человеком) спрашивает: "Пересчитать значения?" и варианты "Да" или "Нет".  
Пересчет занимает длительное время и необходимо его сделать только после ввода последнего значения, которых может быть штук 10.  
Ещё раз спасибо!  
М.б. я в чем-то неправ?  
Парни, завтра попробую и отпишу вам.
 
2 Казанский  
И Вам спасибо за участие в решении проблемы!!!
 
2 Юрий М  
Он сама вызываеися из-за того, что мой Макрос вносит изменения в ячейки.  
Вызываемый Макрос настроен по следующему принципу: изменил значение в Cells(1, 1), например, запустись и спроси : "Нужен пересчет или нет".
 
{quote}{login=iba2004}{date=16.09.2012 10:36}{thema=}{post}2 Юрий М  
Он сама вызываеися из-за того, что мой Макрос вносит изменения в ячейки.{/post}{/quote}Так отмените вызов этой формы :-)
 
2 Юрий М  
Хороша написал: "Он сама". :о))  
Сначала имел ввиду макрос, а потом форму. :о)) Простите.  
А могу ли я отменить вызов этого макроса в своем макросе не меняя тот, который вызывается? Просто после ввода последнего значения мне этот пересчет нужен.  
Можно попробовать Call "Пересчет", но не хотелось бы ломать то, что написано другими. Этим файлом пользуются многие люди на работе, у них уже сложилась привычка.  
Если вызов всё-таки можно отменить из моего макроса, напишите, пжл, каким образом.  
Я буду Вам признателен и благодарен.  
Спасибо!
 
Вы говорили. что вводите несколько значений... Добавляем счётчик - как дошли до последнего - ТОЛЬКО тогда вызываем форму. Да и форма необязательна - с этим справится и MsgBox. Но без реального файла трудно давать конкретные рекомендации.
 
Если не нужно вызывать форму, задайте цикл на изменение ячейки (Ваши 10 раз), после отработки цикла вызывайте форму.  
Можно кнопке "Да" присвоить вызов макроса, который меняет значения.  
Вы бы пример показали. А то все вокруг да около…
 
2 Юрий М  
2 vikttur  
Парни, я согласен что вслепую трудно объяснить и понять.  
Я несовсем верно написал: меняются данные в столбце построчно и после внесения изменения каждого значения в столбце вызывается макрос.  
Завтра выложу файл.  
Спасибо вам ещё раз за помощь.
 
не вникал в суть обсуждения, пробежал по постам, не увидел того, что я напишу ниже, "эмуляция":  
UserForm1.CommandButton1.Value = True  
 
- скрытое свойство кнопки
 
2 аналитик  
Спасибо и Вам!  
Ваше решение тоже будет опробовано.
 
аналитик, а Ваш вариант вызовет событие Click?
 
2 Юрий М  
Смотрите, такая петрушка.  
После того, как мой макрос (назовём его 1) внесёт изменение в ячейку (10, например) столбца, то вызовется Макрос2. И нажатие кнопок "Да" или "Нет" будет зашито во втором Макросе. Смогу я при помощи подсказанных мне команд запустить их. Мне кажется, что я после вызова UserForm для этого должен вернутся в свой Макрос.  
 
Мне бросили по почте файл. Я сейчас могу его выложить. Вы будете здесь?
 
Application.EnableEvents=False ?
 
2 Hugo  
Получается, что изменение моим макросом в ячейке запустило другой макрос. Для VBA теперь активным является он. Этот другой макрос и выплевывает таблицу с "Да" и "Нет". И, видимо, что бы я не писал в своём макросе, VBA не будет понимать это.
 
{quote}{login=Юрий М}{date=17.09.2012 12:54}{thema=}{post}аналитик, а Ваш вариант вызовет событие Click?{/post}{/quote}обязательно
 
Да покажите уже код, сколько можно гадать?!
 
Сейчас, Виктор, минуточку.  
Мне нужно из файла потереть данные связанные с работой.  
Минут 5-10 займет.
 
Нужно запустить макрос 2, вставляющий значения в столбцы M и N и попытаться сделать так, чтобы он отработал до конца с автоматическим нажатием клавиши "Да" во всплывающем окне.  
 
Спасибо!
 
2 Hugo  
Спасибо!  
Похоже Ваш вариант работает.  
А как быть если нужно жать не "Нет", а "Да"?
 
А какая разница? :)
 
2 Hugo  
Но если я пишу  
Application.EnableEvents=True,  
то у меня значение переоценки сххранится только после нажатия "Да", а не автоматически. Наверное, я что-нибудь не так делаю?
 
2 Hugo  
Ещё я вчера чуть выше выложил пример. Можно в нём показать, если Вам несложно?  
Спасибо!
 
EnableEvents - это события.  
У вас срабатывание "ненужного" кода вызывается именно событием изменения листа.  
Если его нужно отключить - отключаем события.  
Нуно включить - включаем события ПЕРЕД последним изменением на листе.  
Глубже не вникал - уж больно там много всего...  
 
На примере не покажу - на работе...
 
2 Hugo  
Понял!  
Спасибо за объяснения!!!
 
Ура!  
Получилась эмуляция нажатия "Да"!!!  
Сначала при помощи подсказки Hugo  
Application.EnableEvents=False  
отключил вызов UserForm.  
А затем вызвал Call'ом функцию производящую переоценку.  
Простите, если кого ввёл в заблуждение своими неточными пояснениями.  
Парни, я вам всем очень признателен.  
Спасибо!
Страницы: 1
Читают тему
Наверх