powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / как запретить изменения листа при showModal = False
14 сообщений из 14, страница 1 из 1
как запретить изменения листа при showModal = False
    #36045454
newnoober
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток.
При выполнении кода нужно, выдать ему сообщение о том чтобы он указал "нужную".
При использовании showModal = False пользователь может не только активировать ячейку, но и изменить что угодно на листе, в книге...

Есть ли не слишком громоздкий способ, во время работы формы разрешить ему ТОЛЬКО активировать ячейки?
...
Рейтинг: 0 / 0
как запретить изменения листа при showModal = False
    #36045481
Фотография qwrqwr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
newnoober, используйте вместо формы
Код: plaintext
1.
Dim MyRange As Range
Set MyRange = Excel.Application.InputBox("тыкни ячейку", "приглашение тыкнуть ячейку", , , , , ,  8 )
ЗЫ Вы форумом не ошиблись?
...
Рейтинг: 0 / 0
как запретить изменения листа при showModal = False
    #36045502
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
newnooberвыдать ему сообщение о том чтобы он указал "нужную".
Это служба знакомств?
...
Рейтинг: 0 / 0
как запретить изменения листа при showModal = False
    #36045520
Фотография qwrqwr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Санычnewnooberвыдать ему сообщение о том чтобы он указал "нужную".
Это служба знакомств?тогда уж агенство по подбору невест (однонаправленный процесс)
...
Рейтинг: 0 / 0
как запретить изменения листа при showModal = False
    #36046088
newnoober
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwrqwrnewnoober, используйте вместо формы
Код: plaintext
1.
Dim MyRange As Range
Set MyRange = Excel.Application.InputBox("тыкни ячейку", "приглашение тыкнуть ячейку", , , , , ,  8 )
ЗЫ Вы форумом не ошиблись?

Большое спасибо, qwrqwr.

Формумом ошибся. Очень торопился ... промазал.
...
Рейтинг: 0 / 0
как запретить изменения листа при showModal = False
    #36046355
newnoober
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
On Error GoTo RyplayInput
RyplayInput:
Set MyRange = Excel.Application.InputBox("тыкни ячейку", "приглашение тыкнуть ячейку", , , , , ,  8 )
On Error GoTo  0 

сим кодом хочу показывать InputBox пока не будет корректно задан Range.
НО! GoTo срабатывает всего один раз.
т.е. если в InputBox 2 раза нажать отмену, то после второго раза получаю ошибку '424'.
т.е. On Error GoTo RyplayInput отрабатывает всего один раз.

В чем моя ошибка?
...
Рейтинг: 0 / 0
как запретить изменения листа при showModal = False
    #36046391
Фотография qwrqwr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
newnooberВ чем моя ошибка?в этом (сами же знаете): newnooberOn Error GoTo RyplayInput отрабатывает всего один раз. при переходе в обработчик ошибок обработчик сбрасывается (до выполнения Resume...)
вообще мутить цикл из обработчика - это какой-то хардкор с извратом пополам
делайте что-то типа:
Код: plaintext
1.
2.
3.
4.
Dim valInput as object, MyRange As Range
Do
valInput = Excel.Application.InputBox("тыкни ячейку", "приглашение тыкнуть ячейку", , , , , ,  8 )
Loop While valInput is nothing
Set MyRange = valInput 
ох, перенесут это все в офис - и правильно сделают...

Модератор: Тема перенесена из форума "Microsoft Access".
...
Рейтинг: 0 / 0
как запретить изменения листа при showModal = False
    #36046458
Фотография qwrqwr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну вот и перенесли :)
вариант выше нерабочий - писАл не проверяя
вот так, как вариант, можно перехватывать нажатие кансель:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
On Error Resume Next
Dim MyRange As Range
Do
    Err.Clear
    Set MyRange = Excel.Application.InputBox("тыкни ячейку", "приглашение тыкнуть ячейку", , , , , ,  8 )
Loop While Err.Number
On Error GoTo  0 
MsgBox MyRange.Address
...
Рейтинг: 0 / 0
как запретить изменения листа при showModal = False
    #36046589
newnoober
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwrqwrну вот и перенесли :)
вариант выше нерабочий - писАл не проверяя
вот так, как вариант, можно перехватывать нажатие кансель:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
On Error Resume Next
Dim MyRange As Range
Do
    Err.Clear
    Set MyRange = Excel.Application.InputBox("тыкни ячейку", "приглашение тыкнуть ячейку", , , , , ,  8 )
Loop While Err.Number
On Error GoTo  0 
MsgBox MyRange.Address


Теперь всё сходится.
qwrqwr, много больших спасиб. :)
...
Рейтинг: 0 / 0
как запретить изменения листа при showModal = False
    #36047115
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
newnoober,

А чем RefEdit ActiveX control не устроил, если не секрет? Ведь и выкручиваться не надо и модальность отменять! См. пример.

KL
[MVP - Microsoft Office Excel]
...
Рейтинг: 0 / 0
как запретить изменения листа при showModal = False
    #36047268
Фотография qwrqwr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KL (XL)newnoober,

А чем RefEdit ActiveX control не устроил, если не секрет? 2KL
я не newnoober, но спрошу :)
пример посмотрел - т.к. до сих пор RefEdit-ом не пользовался, но много слышал - от упоминаний о его глючности до сообщений типа этого (из недавних - первое, что нашел)
на первый взгляд - что отметил сам для себя:
минусы Application.InputBox:
1. не умеет при выборе диапазона сворачиваться до маленького окошечка как RefEdit и стандартные диалоги Экселя.
2. явная недоработка MS обработки нажатия кансел - реально впервые столкнулся с ситуацией, которую я смог разрулить только через использование On Error Resume Next + Err.Number - обычно это один возможный из неск. вариантов.
1-можно пережить; 2-придется принять и рассматривать как фичу.
плюсы Application.InputBox:
1. ИМХО безглючнее RefEdit-а, судя по тем сообщениям, что я видел.
2. вызывается одной строчкой кода (ладно, с обработкой нажатия Cancel - тремя :), что имеет особое значение при написании "простых" процедур, где надо организовать диалог с пользователем без необходимости городить UserForm для этого.
3. возвращает сразу Range а не адрес в тексте (100% надуманный плюс :)
тж. у RefEdit как положено куча событий - затрудняюсь их отнести к плюс/минус, но не могу придумать зачем они могут понадобиться :)
"по совокупности" - мой выбор за Application.InputBox
далее, собственно, вопрос - не могли бы Вы в 2 словах высказать и аргументировать свое предпочтение при выборе одного из этих 2 вариантов средств для выбора диапазона пользователем
Ваше мнение было бы для меня очень интересным.
...
Рейтинг: 0 / 0
как запретить изменения листа при showModal = False
    #36047306
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2qwrqwr

Ну лично у меня нет универсального предпочтения тому или другому. Сразу скажу, про глючность RefEdit слышу первый раз - у меня прецендентов не было за годы участия в различных форумах по Excel (правда я всегда работаю в англ. локали). Поиск по RefEdit в этом форуме дал 11 тем из них я обнаружил проблему только в указанном Вами.

У каждого из этих способов свои за и против в зависимости от ситуации. В данном случае, исходя из моего понимания задачи изложенной автором, преимущества RefEdit были такие:

- не требует дополнительного окна, а встраивается в форму
- при необходимости сворачивает форму до ячейки RefEdit
- не требует слишком много кода для отлова ошибок, в т.ч. при нажатии Cancel

Пожалуй соглашусь с тем, что возврат текста вместо объекта - это слегка через з*цу, но это не столь большой минус, чтобы закрыть глаза на остальные плюсы.

Поскольку тезис о "глючности" для меня не очевиден, то выбор мне представляется вполне легким. Но, поскольку у каждого свои предпочтения и опыт, я и спросил о том, чем не угодил RefEdit.

Привет,
KL
[MVP - Microsoft Office Excel]
...
Рейтинг: 0 / 0
как запретить изменения листа при showModal = False
    #36047523
Фотография qwrqwr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KL (XL), спасибо за ответ
По поводу глючности - Google по "refedit bug" выдает ссылок довольно-таки приличное кол-во :)
Согласен, когда форма уже есть - вставка еще одного визуального компонента на нее вполне естественна.
По поводу много кода для отлова ошибок - не согласен. Просто ТС почему-то захотел опрашивать юзера "до упора" в цикле - я показал как это следует делать.
Здесь вопрос не написания кода, а организации пользовательского интерфейса; лично я, например, не считаю нужным при нажатии юзером Отмена - переспрашивать в его цикле
ИМХО нормально один раз завернуть возврат диапазона в процедуру:
Код: plaintext
1.
2.
3.
4.
Public Sub GetUserRange(ByRef rngReturn As Range, ByRef bSuccess As Boolean, Optional sMsg As String = "укажите диапазон значений:")
On Error Resume Next
    Set rngReturn = Application.InputBox(sMsg, "ввод диапазона", ,  80 ,  40 , , ,  8 )
    bSuccess = Err.Number =  0 
End Sub
после чего кода становится совсем немного:
Код: plaintext
1.
2.
3.
4.
Sub test()
Dim Success As Boolean, MyRange As Range
    GetUserRange MyRange, Success
    If Success Then MsgBox MyRange.Address
End Sub
с уважением
...
Рейтинг: 0 / 0
как запретить изменения листа при showModal = False
    #36047967
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwrqwrKL (XL), спасибо за ответ
По поводу глючности - Google по "refedit bug" выдает ссылок довольно-таки приличное кол-во :)qwrqwr,

если делать поиск в Google вообще, да еще со столь распространенным словом как "bug", то результаты будут искаженными - не гарантирована привязка к Excel, не гарантирована связь между словами "refedit" и "bug", возможно множественные ссылки на ссылки и т.д.

Вот пример из, насколько я понимаю, самой массовой в мире группы по VBA программированию в Excel: http://tinyurl.com/l2klkm

1) за все время - 58 совпадений
2) 23 - повторы найденных статей, т.ч. реально их 35
2) 26 постов относятся к 98-2003 г.
3) почти в половине речь о багах не связанных с refedit или не багах
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / как запретить изменения листа при showModal = False
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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