Foreversoft.ru

IT Справочник
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Как остановить макрос vba excel

Как остановить макрос vba excel

Microsoft Excel 2007 Для обладателей этой (и следующих) версии есть более подробное изложение (включая скриншоты) всего вышеизложенного

Quick start: Create a macro
Create or delete a macro

  • Ответ :
    Перед текстом комментария поставьте апостроф ‘
    Можно заменить апостроф на инструкцию Rem
    Комментарий : Текст комментария должен быть зелёного цвета, при условии, что он не был изменён в настройках.
  • Ответ :
    Выделите ту часть кода, который Вы хотите закомментировать или раскомментировать. Затем в меню Вид / View выберите пункт Панели инструментов / ToolBars и команду Правка / Edit . После чего, в зависимости от поставленной задачи, кликните мышкой кнопку Закомментировать блок / Comment Block или Раскомментировать блок / Uncomment Block .
    Совет : Если Вы предполагаете часто осуществлять эти действия, то вышеупомянутые кнопки можно разместить, например, на панели инструментов Стандарт.
  • Ответ :
    Для этого Вам нужно при указании пути для имени макроса, сослаться на другую рабочую книгу, в которой будет находиться макрос.
    Самый простой способ, это создать в «чистой рабочей книге» кнопку и назначить ей Ваш макровирус.
    В меню Вид выберите пункт Панели инструментов , затем нажмите на панель Формы . Далее мышкой выберите тип Кнопка и выбрав место в листе, щёлкните мышкой по ячейке.
    В поле Имя макроса выберите имя нужного макроса и нажмите ОК.
    Комментарий : При желании имя кнопки можно поменять на более приемлемое.
    Чтобы макрос был доступен для выбора рабочая книга должна быть обязательно открыта.
    Примечание : К сожалению, автор слишком поздно занялся сайтостроением, т.к. эта возможность реализована только в MS Office 97. В следующих версиях разработчики исправили свой недостаток и убрали лазейку.
  • Ответ : Актуально для MS Excel 97, 2000, XP
    Выделите ячейку или любой графический об’ект, который поддерживает создание гиперссылки. Затем, в меню Вставка выберите команду Гиперссылка и в поле Имя объекта в документе введите имя модуля и макроса, например Модуль1.Тест и нажмите кнопку ОК. Теперь, для просмотра нужного кода, Вам достаточно будет всего лишь воспользоваться созданой гиперссылкой.

    Комментарий : Если макрос расположен в стандартном модуле и имя Вашего макроса «уникально», т.е. другие модули не содержат макроса с аналогичным именем, то имя модуля можно не указывать.

  • Особенности MS Excel 2000, XP
    В меню Вставка выберите команду Гиперссылка , далее кликните «рисунок с текстом» под номером 1 имеющимся файлом, Web-страницей . Затем, в поле Введите имя файла или Web-страницы введите имя модуля и макроса, например #Модуль1.Тест и нажмите кнопку ОК.
  • Ответ :

    Для того, чтобы приоставить выполнение макроса на определённое время, достаточно использовать метод Wait об’екта Application . Далее следуют пять примеров, которые могут остановить выполнение макроса на десять секунд .

  • Ответ :
    Для того, чтобы узнать сколько времени прошло пока выполнялся нужный макрос, можно использовать, например, функцию Timer
    Примечание : Если Вы хотите получить время именно в секундах, то используйте первый MsgBox, если в часах, минутах и секундах, то второй. Если же Вам необходимо получить количество милисекунд или существует вероятность, что Ваш макрос может быть запущен до полуночи, а обработка данных может закончиться после полуночи, то в этих случаях можно использовать следующий [FAQ427]
  • Читать еще:  Vba excel сохранить как
  • Ответ :
    Вариант I. Нажмите клавишу ESC.
    Вариант II. Или нажмите комбинацию клавиш CTRL + BREAK.
    Затем нажмите кнопку Завершить / End

    Примечание : Этот совет не будет работать, если макрос блокирует нажатие клавиш [FAQ72]

  • Ответ :
  • Ответ :
  • Ответ :
  • Ответ : Вопрос выбран посетителями
    Вариант I. Перед запуском макроса сохраните Вашу рабочую книгу. Для отмены всех изменений, в этой рабочей книге, просто закройте её. На вопрос о сохранение файла выберите вариант Нет .

    Примечание : Этот вариант не будет работать, если в процессе выполнения макроса, рабочая книга была сохранена.

    Дополнение : Если Вы захотите проделать тоже самое, но программно, то используя метод OnUndo об’екта Application можно добиться отмены действий макроса с помощью стандартных команд (см. пример)

    Вариант II. В меню Сервис выберите команду Доступ к книге , выделите закладку Правка . Далее установите «флажок» напротив Разрешить совместный доступ и нажмите кнопку ОК. Затем на все вопросы отвечайте ОК.
    Для просмотра и отмены изменений в этой рабочей книге выберите в меню Сервис пункт Исправления , а затем команду Принять/отклонить исправления .

    Примечание : Общая книга имеет ряд ограничений, которые обязательно необходимо учитывать при работе с подобной книгой.
    Ответ :

    Для того, чтобы отменить последнее изменение, совершенное перед выполнением макроса, достаточно использовать метод Undo об’екта Application
    Примечание : Выполнение этой инструкции даёт тот же результат, что и нажатие кнопки Отменить с панели инструментов Стандартная (или аналогичной команды в меню Правка), однако, если отменить ничего нельзя, то в таком случае возникнет ошибка.

    Список вопросов и ответов, где применяется метод Undo, прилагается :

    Укажите процедуру с ключевым словом Private , например :
    Или используйте инструкцию Option Private Module которая должна располагаться перед программами и функциями.
    Ответ :
    В меню Сервис выберите пункт Макрос и команду Редактор Visual Basic (ALT + F11)
    После чего в меню Сервис / Tools выберите команду Свойства VBAProject / VBAProject Properties и в появившемся стандартном диалоговом окне выделите закладку Защита / Protection
    Затем обязательно установите «флажок» напротив Блокировать просмотр проекта / Lock project for viewing , введите один и тот же пароль в поля Пароль / Password и Подтвержение пароля / Confirm password и нажмите кнопку OK.
    Теперь в меню Файл / File выберите команды Сохранить / Save (CTRL + S) и Закрыть и вернуться . / Close and Return . (ALT + Q)

    Комментарий : Установка пароля на VBProject не является гарантией от просмотра Вашего кода, так как на сегодняшний день существуют программы по определению и снятию пароля.

  • Ответ :Примечание :
  • — Во всех примерах выделяется ячейка «B5»
  • — Для реализации примера № 3, 6, 13-29 ячейка должна быть именованной (Дата)
    [Как присвоить имя ячейке средствами VBA]
    [Как присвоить имя ячейке стандартными средствами]
  • — Пример № 67 нужно использовать для работы с несмежными ячейками и/или диапазоном
  • — Примеры № 68-81 нужно использовать для работы с диапазоном ячеек

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

    Читать еще:  Функция стьюдраспобр в excel

    Для подсчёта количества открытия файла и вывода результата в ячейке A1, разместите в любом стандартном модуле :Примечание :

  • Если в ячейку A1 будут введены данные отличные от числовых, то Вы получите ошибку.
  • Для решения поставленной задачи, можно также использовать события рабочей книги, например Workbook_Open()
  • Для работы этого кода достаточно выбрать любой из трёх предложенных вариантов или использовать другие способы, смотрите предыдущий вопрос .
  • Ответ :Bonus : извлечение данных из 100 ячеекЕсли ячейки, данные которых требуется извлечь, могут быть пусты, то после «импорта» необходимо также удалить 0 , например так :Если же в исходном диапазоне могут встречаться как пустые ячейки, так и ячейки, содержащие 0, то в таком случае, можно просто усложнить формулу :
  • Второй способ (для записи данных в переменную) :iAddress = «‘» & iPath & «[» & iFile & «]» & iList & «‘!» & Range(«A1»).Address(ReferenceStyle:=xlR1C1)
    >Предполагается, что :
  • iPath — это месторасположения файла (каталог)
    Обратите внимание, что путь к файлу должен быть указан полностью, например вот так :
    «C:Katalog»
  • iFile — это название файла — донора
  • iList — это название листа в файле из которого мы извлекаем данные
  • «A1» — это адрес ячейки из которой нам нужно получить данные

    P.S. Если файл — донор и файл — extractor находятся в одном каталоге (папке), то » & iPath & » — можно убрать
    Ответ :

    Как отловить переход по гиперссылке и определить адрес ячейки с этой гиперссылкой ? NEW 28.03.2012

  • Ответ :
  • Ответ :
  • Ответ :
  • Ответ : Актуально для MS Excel 97, 2000, XP
  • Ответ :
    Для того, чтобы восстановить исходные значения, необходимо :
    Если существует вероятность, что строка состояния скрыта, то :
  • Ответ :
  • Ответ :Комментарий : по своей сути InputBox является функцией.
    Совет : С помощью именованного аргумента Default можно задать текст по умолчанию, а с помощью аргументов XPos, YPos можно управлять размещением диалогового окна на экране, см. ниже пример .
  • Ответ :

    Вариант I. Для того, чтобы отобразить диалоговое окно, позволяющее ввести необходимое число, можно воспользоваться вышеупомянутой функцией InputBox и функцией ValКомментарий : Используя подобную конструкцию имейте ввиду, что после отказа от ввода, т.е. нажатии кнопки Отмена или Закрыть [X], Вы получите 0 , кроме того, в качестве разделителя целой и дробной части числа, необходимо использовать только точку .

    Если же возникнет необходимость в отказе от ввода, или при ввода числа необходимо будет использовать более привычный разделитель, а именно запятую , то в таком случае :Вариант II. Можно также использовать метод InputBox об’екта ApplicationКомментарий :

  • Используя этот метод Вы сможете не только ввести необходимое число, но и указать (т.е. ввести вручную или выбрать с помощью мышки) в качестве источника данных ячейку или диапазон ячеек (правда в этом случае в вычислении будут участвовать данные только первой ячейки) Кроме того, Вы можете вводить и более сложные формулы (возвращающие число или текст, который может быть преобразован), к примеру, =12 =»12″ =5+7 =A1*1,25 =ПИ() =СУММ(A:A) =ЕСЛИ(МЕСЯЦ(СЕГОДНЯ())=5;A1;B1) =Имя_Ячейки =Имя_Формулы и т.п.
  • К сожалению, разработчики разрешили и ввод даты, поэтому, после ввода, например, 1.1.1900 или 1/1/1900 Вы получите 1, а после ввода 1.1.2009 или 1/1/2009 Вы получите, соответственно, 39814 (подробнее о датах в Excel)
  • После нажатии кнопки Отмена или Закрыть [X], Вы получите 0 , но этого можно избежать, если заменить Double на Variant, и просто проверить не возвращает ли функция False (см. ниже)
  • Читать еще:  Как из видео извлечь текст
  • Ответ :

    Если при вызове функции InputBox, Вам необходимо отследить нажатия кнопок в диалоговом окне, т.е. определить, была ли нажата кнопка ОК в т.ч. и с пустым полем , или пользователь действительно кликнул кнопку Отмена или Закрыть [X], то :

    Остановка макроса из UserForm[vbModeless]

    9 ответов

    1. Как раз DoEvents ща смотрю, надежд пока мало (событие Click там не любят или спец. скрывают. )

    2. Да, эта наша тяжелая артиллерия. :-).
    иногда правда бывает, что через API получается даже изящнее, так что будем дерзать, если что найду, обязательно напишу, потому что вещь я думаю нужная всем кто пишет макросы для общего употребления. Да и просто приятно..

    Прикольно. Спасибо за совет — DoEvents — заработал.

    Я его понаставлял в разные куски макроса, как раз где у меня FormWait.Repaint обновляется (чтобы значение ProgressBar увеличить и текст того чем он щас занимается обновить).
    А работает он следующим образом, когда нажимаешь на кнопку «Прервать», то событие до нее дойдет, как только в макросе повстречает DoEvents. (когда промежуток между соседними DoEvents большой, то получается так — на кнопку жмешь. ничего не происходит, кнопка не шевелится, потом через 5-10 сек раз и полезло то, что на кнопке висело..) Весело вообщем.

    А для того, чтобы после нажатие кнопки «Прервать» выполнение макроса прекратить, я лучше ничего не нашел, как сделать это так:

    Private Sub ButCancel_Click()
    Dim Response
    Response = MsgBox(«Вы точно хотите прервать работу макроса?», vbQuestion + vbOKOnly + vbOKCancel, «Внимание!»)
    If Response = 1 Then
    Unload FormWait
    MyModule.blnBreak = True
    Else
    End If
    End Sub

    А в макросе, после каждого DoEvents сделать проверку, что-нибудт типа такого:
    If blnBreak Then Exit Sub

    Может что поизящнее есть, чтобы из кода формы прекратить (не остановить, а прекратить) выполнение текущего макроса.

    Рад, что получилось средствами Экселя и не пришлось посылать за тяжелой артиллерией. 🙂

    Чтобы остановить — попробуй End

    Просто я хотел свой код, относящийся к форме, максимально, как это сказать-то . инкапсулировать. Т.е. есть форма (один файл), включил ее в проект, перенес на другой комп, переслал другому человеку, и не надо потом долго объяснять за какие переменные там дергать, за чем следить, че проверять и вызывать.
    А делать с этой формой особенного ничего и не надо, показал/скрыл ее, значения на ProgressBar обновил (ну и на подписях).
    Для последнего я включил в модуль формы такую функцию:

    Public Sub ShowFormWait(progValue As Double, textProc As String, TextFile As String)

  • Ссылка на основную публикацию
    Adblock
    detector