Страницы: 1
RSS
Выполнение действия и обращение к CommandButton, Нужно отобразить часть действий в макросе, которые не "успевают отобразиться" на экране
 
Добрый день!
2 вопроса:

1 вопрос: Как сделать так, чтобы был виден результат первых двух строк макроса по нажатию кнопки  CommandButton3 (что написать тут ***??):

1 CommandButton3.Visible = False
2 Shapes("pic_1").Visible = True

' ***
' Если пишу Application.Wait Time:=Now + TimeValue("0:00:10"), то пауза есть, но  действие строк 1-2 не видно на экране :(

3 CommandButton3.Visible = True
4 Shapes("pic_1").Visible = False

2 вопрос: как обратиться к кнопке, номер которой записан в ячейке?

range("A1")=CommandButton3 (или range("A1")=3, все равно, как проще)

Надо скрыть кнопку, о которой говориться в ячейке range("A1")

qqq= range("A1")
qqq.Visible = False

или

qqq= "CommandButton" & range("A1")
qqq.Visible = False

Не работает:(
 
1 вопрос - обычно если не скрывать, то действие каждой строки сразу видно. Если действие происходит с ячейками листа, а не где-нибудь в памяти.
2. имхо не стОит так делать, гемора много, ищите путь полегче
 
Цитата
написал:
1 вопрос - обычно если не скрывать, то действие каждой строки сразу видно. Если действие происходит с ячейками листа, а не где-нибудь в памяти.
Обычно да. Если взять строчки 1,2 - все ок. Но потом мне надо выполнить действия 3.4. Например, через 15 сек. И пока не понимаю КАК сделать. Описанный выше способ перестает отображать действия 1,2

Цитата
написал:
2. имхо не стОит так делать, гемора много, ищите путь полегче
Хм. Пока не вижу способ другой. Сначала надо сохранить номер кнопки, потом с ней выполнить действие.  
 
Цитата
написал:
1 вопрос - обычно если не скрывать, то действие каждой строки сразу видно. Если действие происходит с ячейками листа, а не где-нибудь в памяти.
Странно, что если вместо паузы ставить MsgBox ("!"), то результат действий 1,2 все равно не виден:( хотя он выполняется (Debug показывает)
 
Код
set cb = ActiveSheet.Buttons("Button 1")
Вероятно вы знаете, но на всякий случай напомню, свойства .Name и .Caption это не одно и то же.
 
Цитата
написал:
Вероятно вы знаете, но на всякий случай напомню, свойства .Name и .Caption это не одно и то же.
Да, это я знаю
 
Цитата
Юлия написал:
чтобы был виден результат первых двух строк макроса по нажатию кнопки  CommandButton3
В таких случаях обычно процедуру разбивают на две и вызывают по очереди. Необходимые переменные просто делают глобальными(Public MyVariable).
Но чтобы дать более правильный ответ надо хотя бы понимать назначение этого действия, помимо простого "надо видеть". Как правило как не надо видеть, если только эта информация не нужна пользователю для принятия каких-то дальнейших действий по работе макроса(в зависимости от увиденного делать то или другое).
Цитата
Юлия написал:
Надо скрыть кнопку, о которой говориться в ячейке range("A1")
смотря каким образом создана кнопка. Если это элемент формы - то Application.Caller должен сработать(если вдруг на лету надо определять имя кнопки и записывать в ячейку): Кто вызвал функцию или процедуру?
Изменено: Дмитрий(The_Prist) Щербаков - 08.07.2024 15:09:38
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
По первому вопросу. Может у вас обновление экрана отключено,
Код
Application.ScreenUpdating = False
 
Вообще такие вопросы нужно задавать с файлом, этими кнопками, задачей, кодом который не работает - тогда можно надеяться быстро получить решение.
 
Цитата
написал:
Вообще такие вопросы нужно задавать с файлом, этими кнопками, задачей, кодом который не работает - тогда можно надеяться быстро получить решение.
Сейчас выложу файл.  
 
Это начальный этап, потом все планировалось унифицировать и сократить, но не получается и на первом шаге:(
 
Может вы просто не доходите до этих строк. У вас есть безусловный переход.
Код
GoTo line_end
 
При таком написании
Код
If Range("para_pr") = 0 Then Range("para_1") = "CommandButton1": Range("para_2") = "para_1_1": CommandButton1.Visible = False: Shapes("para_1_1").Visible = True: Range("para_pr") = Range("para_pr") + 1: GoTo line_end
GoTo line_end выполнится независимо от условия "If Range("para_pr") = 0 Then"
 
Цитата
написал:
GoTo line_end выполнится независимо от условия "If Range("para_pr") = 0 Then"
Если его не ставить, то перейдет к выполнению действий
CommandButton3.Visible = True
Shapes("para_2_1").Visible = False

а мне при первом нажатии (т.е. когда выбираешь первую картинку)  надо вообще закончить
 
Цитата
написал:
смотря каким образом создана кнопка. Если это элемент формы - то Application.Caller должен сработать(если вдруг на лету надо определять имя кнопки и записывать в ячейку)
Спасибо, попробую
 
Ещё раз. "GoTo line_end" у вас выполняется безусловно. Независимо от "If Range("para_pr") = 0 Then"
Может вы это имели в виду?
Код
If Range("para_pr") = 0 Then
    Range("para_1") = "CommandButton1"
    Range("para_2") = "para_1_1"
    CommandButton1.Visible = False
    Shapes("para_1_1").Visible = True
    Range("para_pr") = Range("para_pr") + 1
    GoTo line_end
End If
 
Цитата
написал:
Может вы это имели в виду?
Не очень понимаю, насколько принципиально писать в строчку или так, как Вы.

Часть макроса If Range("para_pr") = 0 выполняется корректно и в моем случае
А когда выбираешь вторую картинку (If Range("para_pr") = 1), то она не отображается, как будто понимает, что все равно придется скрывать:) глупость какая-то, не понимаю что за ерунда.

пишу
1 CommandButton1.Visible = False
2 Shapes("para_1_1").Visible = True
3 MsgBox ("!")

Сначала выполняется 3, а потом 1 и 2!!! почему??!!((( причем если запускать Debug, там все корректно

Если нажимать кнопки 13 и потом 1 с одинаковыми картинками - код работает корректно
Если нажимать кнопки  2 и потом 1 с разными - код работает некорректно
 
Цитата
написал:
Если нажимать кнопки 13 и потом 1 с одинаковыми картинками - код работает корректноЕсли нажимать кнопки  2 и потом 1 с разными - код работает некорректно
Нажимаете 13, код выполняет Range("para_2") = "para_1_2". Нажимаете 1, код проверяет If Range("para_2") = "para_1_2" получает ИСТИНА.
А если
нажимаете 2, код выполняет    Range("para_2") = "para_2_1". Нажимаете 1, код проверяет If Range("para_2") = "para_1_2" получает ЛОЖЬ.
 
Цитата
МатросНаЗебре написал:
GoTo line_end выполнится независимо от условия "If Range("para_pr") = 0 Then"
- нет же ведь. Если в одну строку - то всё что правее не выполнится если не 0
 
Hugo, согласен.
 
Вот же ж на девушку налетели, коршуны) Юля, не слушайте их) У Вас "некорректное" срабатывание кода не потому, что действия не выполняются, а потому что выполняются лишние. Во всех условиях If Range("para_pr") = 1 в конце пропущен переход в конец процедуры (кстати, Exit Sub вместо него не пробовали?), поэтому и результат не такой как ожидаете.
Изменено: VladZ - 08.07.2024 17:56:00
 
Цитата
написал:
в конце пропущен переход в конец процедуры
Спасибо за поддержку:)
Так мне и не надо переходить в конец процедуры же..
При Range("para_pr") = 1 (открытие второй карточки) - также надо скрыть кнопку, открыть картинку и потом сразу проверять: если картинки совпали (If Range("para_2") = "para_1_2"), то выходим без действия, а если нет - надо закрыть обе карточки и открыть обе кнопки и только после этого на выход.
Переделала код - разделила процедуры, теперь скрытие по доп.кнопке происходит, мне, конечно, так не нравится, хотелось бы, чтобы сразу: открыл 2 рисунок, проверил, если разные - через 10 сек закрыл обе картинки, открыл обе кнопки
Цитата
написал:
нет же ведь. Если в одну строку - то всё что правее не выполнится если не 0
а мне и не надо, чтобы выполнялось. При Range("para_pr") = 0 - это только если первая картинка открывается, а если вторая уже, то действия При Range("para_pr") = 1
 
Не прикрепился файл в прошлом сообщении
 
Это в модуль листа.
Скрытый текст
Это в стандартный модуль
Скрытый текст
 
По-голливудски. С таймером обратного отсчёта.
Скрытый текст

В стандартный модуль.
Скрытый текст

Цитата
написал:
Вот же ж на девушку налетели, коршуны) Юля, не слушайте их)
Где вы это увидели? Обычный поиск ошибки в коде. На прослушивании не настаиваю.
 
Цитата
написал:
Где вы это увидели? Обычный поиск ошибки в коде. На прослушивании не настаиваю.
Согласна))) За код спасибо - пошла пробовать:)
 
Цитата
написал:
С таймером обратного отсчёта.
Работает отлично! Пошла добавлять остальные картинки (всего 24 должно быть)))
Страницы: 1
Наверх