Страница 3 из 4
Re: Диалоговое окно выбора диапазона
Добавлено: 01 дек 2008, 11:47
VictorM
Вот, "остатки" рабочей книги проекта ))
Удалил ВСЕ кроме одного листа и одного модуля с единственной процедурой.
Затем вставил просто чистый лист. И теперь - на чистом листе работает, на листе Склад - нет

Причем, не работало ни на одном листе проекта, их там много, пробовал на разных .
Может кто - нибудь это обьяснить?

Re: Диалоговое окно выбора диапазона
Добавлено: 01 дек 2008, 12:35
heisnod
я удалили тот бред что написал. меня ввело в заблуждение то, что если запустить ту процедуру как макрос то ошибка не выскакивает
Re: Диалоговое окно выбора диапазона
Добавлено: 01 дек 2008, 15:05
EducatedFool
Проблема заключается в форматах ячеек на листе СКЛАД.
Попробуйте скопировать содержимое листа СКЛАД,
после чего при помощи команды Правка - Специальная вставка
вставлять содержимое листа СКЛАД на новый лист.
После всех вариантов вставки, кроме варианта со вставкой форматов ячеек, макрос работает, а если копируем вместе с форматами - то перестаёт
Как тут не вспомнишь маму Билла Гейтса
Кстати, если на листе СКЛАД расположить автофигуру, и назначить ей макрос, то он работает

почему-то...
Наконец-то нашел, в чём дело: проблема была в форматах ячеек во 2-м столбце.
Если Вы выделите заполенные ячейки в столбце В, и очистите формат этих ячеек (Правка - Очистить - Форматы), то макрос начнёт работать

Или достаточно скопировать формат 3-го столбца на второй.
И вот теперь думайте, какое отношение имеет Application.InputBox к форматам ячеек

Re: Диалоговое окно выбора диапазона
Добавлено: 01 дек 2008, 15:21
heisnod
Спасибо, чувак! А то я уже нервничать начал=)
Re: Диалоговое окно выбора диапазона
Добавлено: 01 дек 2008, 15:27
VictorM
EducatedFool, уму не постижимо !!!
Спасибо!!!
Я тоже все утро бьюсь пытаясь понять, где собака порылась)))
Re: Диалоговое окно выбора диапазона
Добавлено: 01 дек 2008, 15:30
heisnod
А что там за формат такой был странный? Что ты с колонкой B делал?
Re: Диалоговое окно выбора диапазона
Добавлено: 01 дек 2008, 15:48
EducatedFool
Ответ подсказал анализ структуры этого файла в формате XML:
<ConditionalFormatting xmlns="urn:schemas-microsoft-com

ffice:excel">
<Range>R2C2:R10C2</Range>
<Condition>
<Value1>COUNTIF(C2,RC)>1</Value1>
<Format Style='background:yellow'/>
</Condition>
</ConditionalFormatting>
Причина была в условном форматировании этих ячеек:
=СЧЁТЕСЛИ($B:$B;B2)>1
После удаления условного форматирования макрос сразу заработал.
Причем если убрать эту формулу, и поставить условия форматирования по значению - макрос начинает работать...
Видимо, проблема в формуле...
Re: Диалоговое окно выбора диапазона
Добавлено: 01 дек 2008, 22:24
VictorM
EducatedFool, и правда, ну как тут не вспомнить маму Била )))
Ведь стоит немного сдвинуть лист скролом влево, или просто выбирать ячейки в столбцах подальше от столбца В, да даже просто "оттащить" куда либо в сторону саму форму - все работает. Хоть с кнопки, хоть из редактора VBE.
Без удаления форматов в этом столбце )).
Но мне вся эта музыка нужна для выделения ячеек в столбце Е (цена), вот теперь думать надо, как быть.
Форматы удалять не хочется, они предназначены для выявления дублей кода в столбце В.
Может "подвесить" на кнопку еще и удаление/восстановление форматов

Во дела..........

Re: Диалоговое окно выбора диапазона
Добавлено: 01 дек 2008, 23:42
Teslenko_EA
Здравствуйте
VictorM.
Думаю ошибки можно попытаться обойти
Код: Выделить всё
Sub printArea()
On Error Resume Next
Dim o As Object
Set o = Application.InputBox("Label ", , ActiveCell.Address, , , , , 8)
Debug.Print o.Address
End Sub
Евгений.
P.S. но как выяснилось обойти нельзя, код с Вашим "проблемным" документом не работает

Re: Диалоговое окно выбора диапазона
Добавлено: 02 дек 2008, 00:12
VictorM
Teslenko_EA, спасибо!!!
Обязательно попробую.
Вот из такого, казалось бы простого вопроса возникла такая интересная тема )))
Оказывается, это официально зарегистрированный баг!!!
Вот что ответил
pashulka на соседнем форуме:
ссылка
*****
Это тот редкий случай, когда не стоит искать причину(читайте ошибку) в своих действиях, ибо это официально зарегистрированный баг и заключается он в том, что при наличии условного форматирования, где критерием служат некие формулы, функция Application.InputBox действительно возвращает False.
Бороться с этим безобразием можно использовав, уже вышеупомянутый DialogSheet + EditBox, либо UserForm + RefEdit (дешёвая замена EditBox), только не забудьте, что полученный адрес диапазона будет зависеть от нотации A1/R1C1, тогда как попытка использовать адрес в стиле R1C1 неизменно приведёт к ошибке, которую можно избежать, если либо предварительно установить нужный стиль ссылок :
Код Visual Basic
Application.ReferenceStyle = xlA1 'без проверки
Код Visual Basic
If Application.ReferenceStyle = xlR1C1 _
Then Application.ReferenceStyle = xlA1 'с проверкой
кстати, несмотря на кажущуюся ненужность проверки, она всё-таки имеет право на существование, к примеру, при работе макроса на чужих машинах, ибо в таких случаях, правила хорошего тона просят вернуть всё на круги своя.
либо конвертировать полученный адрес :
Код Visual Basic
iAddress = ThisWorkbook.DialogSheets(1).EditBoxes(1).Text
If Application.ReferenceStyle = xlR1C1 Then _
iAddress = Application.ConvertFormula(Formula:= _
iAddress, FromReferenceStyle:=xlR1C1, ToReferenceStyle:=xlA1)