![]() |
|
Модераторы: mihanik |
![]()
|
|
| CaptainNemo |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 283 Регистрация: 5.6.2008 Где: White Russia, Min sk Репутация: 2 Всего: 9 |
Коллекция Dialogs состоит вроде как из 258 элементов (хотя у меня в Excel 2003 Dialogs.Count показывает, что их более 800), они проиндексированы как-то хитро, например, задать цикл типа
For i = 1 To Application.Dialogs.Count Next i на втором витке приведет к ошибке, поэтому мне пришлось ввести инструкцию On Error Resume Next для того, что бы перескочить через ошибку. Вот такой код работает до поры до времени (витков 20 сделать получается): ======================== Sub Дыялог() Rem Для таго, каб гартаць убудаваныя дыялогавыя вокны выкарыстайце клавішу Esc Dim Default As Dialog Dim Index As XlBuiltInDialog For i = 1 To Application.Dialogs.Count On Error Resume Next Application.Dialogs(i).Show Next i End Sub ====================== Помогите доработать код, что бы найти нужное окно, получить его имя и запрограммировать отклик. P.S. Такое бывает необходимо если программировать, например, удаление страницы из книги. Выскакивает встроенное окно, которое спрашивает, нужно ли удалять лист. Как запрограммировать отклик на такое окно, что бы не делать лишних движений? |
|||
|
||||
| FINANSIST |
|
|||
|
Статус: Жив ![]() ![]() Профиль Группа: Участник Сообщений: 526 Регистрация: 11.4.2008 Где: Москва Репутация: 13 Всего: 23 |
Вот и всё -------------------- “...Брали корову рыжую одну, отдавать будем корову рыжую одну, чтобы не нарушать отчетности” Эдуард Успенский, “Каникулы в Простоквашино” |
|||
|
||||
| CaptainNemo |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 283 Регистрация: 5.6.2008 Где: White Russia, Min sk Репутация: 2 Всего: 9 |
Согласен. Я вчера разрешил этот вопрос. Я тож прописывал Application.DisplayAlerts = true в коде изначально. Подумал, что если окно появляется после удаления, дык и инструкцию, которая гасит это окно, надо вводить после удаления. На самом деле - наоборот. эту инструкцию надо вводить перед удалением
В любом случае – спасибо Добавлено @ 13:53 Хочу задать ещё один чисто теоретический вопрос по синтаксису в VBA. Что бы не создавать лишних тем, пусть будет про окна)) Как обходить такие моменты, например я эту таблицу с именами (с сайта MSDN) скопировал на лист. Пытался задать такой цикл, что бы просмотреть окна:
Но Range("A" & i).Value – в кавычках как переменная прописывается. Я пробовал разными способами её прописать, что бы она чисто имена перебирала без кавычек Trim, Cstr, Str и т.п. А как правильно? Всё равно она в кавычках прописывается… Файл с неудачными попытками написать такой код прилагаю. Спасибо. Это сообщение отредактировал(а) CaptainNemo - 22.9.2008, 13:58 Присоединённый файл ( Кол-во скачиваний: 8 )
post.rar 16,26 Kb |
||||
|
|||||
| FINANSIST |
|
|||
|
Статус: Жив ![]() ![]() Профиль Группа: Участник Сообщений: 526 Регистрация: 11.4.2008 Где: Москва Репутация: 13 Всего: 23 |
Конечно не получится. Переменная вообще может быть либо строковая, либо числовая (дата - то же число, булев - то же)
Кстати тему интересную затронул - предполагаю, что как- то это можно решить. Тогда можно было бы макросы клиентских приложений обновлять! Вроде народ на форумах про файлы .ini что то упоминал. -------------------- “...Брали корову рыжую одну, отдавать будем корову рыжую одну, чтобы не нарушать отчетности” Эдуард Успенский, “Каникулы в Простоквашино” |
|||
|
||||
| CaptainNemo |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 283 Регистрация: 5.6.2008 Где: White Russia, Min sk Репутация: 2 Всего: 9 |
Интересно на все эти окна глянуть, и не только в Excel. Удобно бы было цикл этот как-нибудь дописать. Esc-ом они неплохо листаются.
Вот таким кодом все имена отображаются в MsgBoxе
Но как тока попробовать добавить в цикл Application.Dialogs(iVar).Show - сразу ошибка, т.к. она прописывает переменную в кавычках Application.Dialogs("iVar").Show |
|||
|
||||
| LOPUH |
|
|||
![]() Растение ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 15.2.2008 Где: Красноярск Репутация: 3 Всего: 4 |
Я для перебора соседних ячеек использую метод Offset. Он как раз для этого создан и обладает большой гибкостью. В Вашем случае код будет выглядеть примерно так:
О диалоговых окнах. Список всех диалоговых окон можно получить используя Object Browser. ( В модуле VBA нажмите F2, в верхней части выберите Excel , в нижней наберите xlDialog.) При использовании встроенных диалоговых окон существуют следующие грабли: попытка отобразить диалоговое окно в неверном контексте приводит к ошибке, некоторые диалоговые окна требуют обязательных параметров. Поэтому запихать их все в цикл не получится.. Это сообщение отредактировал(а) LOPUH - 25.9.2008, 08:26 |
|||
|
||||
![]()
|
| Правила форума "Программирование, связанное с MS Office" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще!
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Программирование, связанное с MS Office | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |