0

Запуск макроса по времени

Часто вы, наверняка, думаете, как было бы удобно запускать макрос в предопределенное время или через указанные интервалы. К счастью, в Excel предусмотрен метод VBA, который делает это возможным.

При помощи метода Application.OnTime можно запускать макрос автоматически, но сначала необходимо провести небольшую настройку. Предположим, есть макрос, который вы хотите запускать каждый день в 15:00 (3:00 p.m.). Сначала нужно определить, как заставить выполниться метод OnTime. Это можно сделать с помощью события Workbook_0pen в частном модуле для объекта Workbook.

В Windows самый быстрый способ попасть в частный модуль объекта Workbook (ThisWorkbook, Эта Книга) — правой кнопкой мыши щелкнуть значок Excel рядом с меню Файл (File) и в контекстном меню выбрать команду Исходный текст (View Code). (На Macintosh откройте VBE и затем откройте модуль объекта Workbook в окне Project.) Введите код из листинга 7.2.

//Листинг 7.2 Private Sub Workbook Open () Application.OnTime T1meValue("15:00:00"). "MyMacro" End Sub

Вместо MyMacro следует подставить имя макроса, который вы хотите выполнить. Он должен находиться в стандартном модуле и содержать метод OnTime, как показано в листинге 7.3.

//Листинг 7.3 Sub MyMacro () Application.OnTime T1meValue("15:00:00"), "MyMacro" ‘ВАШ КОД End Sub

Процедура MyMacro будет запускаться каждый день в 15:00, пока Excel остается открытым.

Теперь предположим, вы хотите выполнять MyMacro каждые 15 минут после открытия книги. И снова вы будете запускать процедуру во время открытия книги, поэтому правой кнопкой мыши щелкните значок Excel рядом с меню Файл (File), выберите команду Исходный текст (View Code) и введите код из листинга 7.4.

//Листинг 7.4 Private Sub Workbook_BeforeClose(Cancel As Boolean) Application.OnTime dTime. "MyMacro". . False End Sub Private Sub Workbook_Open() Application.OnTime Now + TimeValue("00:15:00"), "MyMacro" End Sub

В любом стандартном модуле (который можно открыть командой Insert → Module) введите код, приведенный в листинге 7.5.

//Листинг 7.5 Public dTime As Date Sub МуМасrо() dTime = Now + TimeValue("00:15:00") Application.OnTime dTime, "MyMacro" ‘ВАШ КОД End Sub

Обратите внимание, что.вы передаете значение времени, равное 15 минутам, общей (public) переменной dTime. Это нужно, чтобы вы могли отменить метод OnTime в событии Workbook_BeforeC1ose, присвоив дополнительному аргументу Schedule значение Ложь (False). По умолчанию его значение равно Истина (True), поэтому, изменив значение на Ложь (False), вы приказываете Excel отменить метод OnTime, настроенный на выполнение в указанное время.

Если не передать время в переменную, Excel не будет знать, какой метод OnTime нужно отменить, так как значение Now + TimeValue(«00:15:00») не является статическим, но становится статическим, когда передается в переменную. Если вы не присвоите дополнительному аргументу Schedule значение Ложь (False), рабочая книга будет автоматически открываться каждые 15 минут, после того как вы закроете ее, и выполнять макрос MyMacro.

Весьма частый случай на практике: вам нужно запускать один или несколько ваших макросов в заданное время или с определенной периодичностью. Например, у вас есть большой и тяжелый отчет, который обновляется полчаса и вы хотели бы запускать обновление за полчаса до вашего прихода на работу утром. Или у вас есть макрос, который должен делать автоматическую рассылку сотрудникам с заданной периодичностью. Или, работая со сводной таблицей, вы хотите, чтобы она обновлялась "на лету" каждые 10 секунд и т.д.

Давайте разберемся с тем, какие в Excel и Windows есть возможности для реализации подобного.

Запуск макроса с заданной частотой

Для этого проще всего использовать встроенный в VBA метод Application.OnTime, который запускает заданный макрос в указанный момент времени. Давайте разберемся с этим на практическом примере.

Откройте редактор Visual Basic одноименной кнопкой на вкладке Разработчик (Developer) или сочетанием клавиш Alt + F11 , вставьте новый модуль через меню Insert – Module и скопируйте туда следующий код:

Давайте разберемся что здесь что.

Для начала, нам нужна переменная, где будет храниться время следующего запуска нашего макроса – я назвал её TimeToRun. Обратите внимание, что содержимое этой переменной должно быть доступно всем нашим последующим макросам, поэтому её надо сделать глобальной, т.е. объявить в самом начале модуля до первого Sub.

Дальше идет наш главный макрос MyMacro, который будет выполнять основную задачу – пересчитывать книгу с помощью метода Application.Calculate. Чтобы было нагляднее, я добавил на лист в ячейку А1 формулу =ТДАТА(), которая выводит дату и время – при пересчете её содержимое будет обновляться прямо у нас на глазах (только включите отображение секунд в формате ячейки). Для дополнительного веселья я добавил в макрос еще и команду заливки ячейки А1 случайно выбранным цветом (код цвета – это целое числов в диапазоне 0..56, которое генерит функция Rnd и округляет до целого числа функция Int).

Макрос NextRun добавляет к предыдущему значению TimeToRun еще 3 секунды и затем назначает следующий запуск главного макроса MyMacro на это новое время. Само-собой, на практике можно использовать любые другие нужные вам временные интервалы, задавая аргументы функции TimeValue в формате "чч:мм:сс".

Ну и, наконец, просто для удобства добавлены еще макросы запуска последовательности Start и её завершения Finish. В последнем из них для прерывания последовательности используется четвёртый аргумент метода OnTime равный False.

Итого, если запустить макрос Start, то вся эта карусель завертится, и мы увидим на листе вот такую картину:

Остановить последовательность можно, запустив, соответственно макрос Finish. Для удобства можно обоим макросам назначить сочетания клавиш, используя команду Макросы – Параметры на вкладке Разработчик (Developer – Macros – Options) .

Запуск макроса по расписанию

Само-собой, всё описанное выше возможно только в том случае, если у вас запущен Microsoft Excel и в нём открыт наш файл. Теперь давайте рассмотрим более сложный случай: нужно по заданному расписанию, например, каждый день в 5:00 запускать Excel, открывать в нем большой и сложный отчет и обновлять в нем все связи и запросы, чтобы к нашему приходу на работу он был уже готов 🙂

В такой ситуации лучше воспользоваться Планировщиком Windows – специально встроенной в любую версию Windows программой, которая умеет по расписанию выполнять заданные действия. По факту, вы уже используете его, сами того не зная, ведь ваш ПК регулярно проверяет обновления, качает новые антивирусные базы, синхронизирует облачные папки и т.д. – это всё работа Планировщика. Так что наша задача сводится к тому, чтобы добавить к уже имеющимся задачам ещё одну, которая будет запускать Excel и открывать в нём заданный файл. А мы с вами повесим наш макрос на событие Workbook_Open этого файла – и задача решена.

Читайте также:  Выбор оперативной памяти ddr4 для ryzen

Хочу сразу предупредить, что для работы с Планировщиком, возможно, потребуются расширенные пользовательские права, поэтому, если вы не можете найти описанных ниже команд и функций у себя на рабочем компьютере в офисе – обратитесь за помощью к вашим IT-специалистам.

Запускаем Планировщик

Итак, давайте запустим Планировщик. Для этого можно либо:

  • Щелкнуть правой кнопкой мыши по кнопке Пуск и выбрать Управление компьютером (Computer management)
  • Выбрать в Панели управления: Администрирование – Планировщик заданий (Control Panel – Administrative Tools – Task Scheduler )
  • Выбрать в главном меню Пуск – Стандартные – Служебные – Планировщик заданий
  • Нажать сочетание клавиш Win + R , ввести taskschd.msc и нажать Enter

На экране должно появиться примерно такое окно (у меня англоязычная версия, но у вас может быть и русскоязычная):

Создаем задачу

Чтобы создать новую задачу с помощью простого пошагового мастера нажмем на ссылку Создать простую задачу (Create Basic Task) в правой панели.

На первом шаге мастера нужно ввести название и описание создаваемой задачи:

Жмем на кнопку Далее (Next) и на следующем шаге выбираем триггер – частоту запуска или событие, которое будет запускать нашу задачу (например, включение компьютера):

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

Следующий шаг – выбираем действие – Запуск программы (Start a program) :

И, наконец, самое интересное – что именно нужно открывать:

В поле Программа или сценарий (Program/script) нужно ввести путь к Microsoft Excel как к программе, т.е. непосредственно к исполняемому файлу Excel. На разных компьютерах с разными версиями Windows и Office этот файл может лежать в разных папках, поэтому вот вам несколько способов, как можно узнать его местоположение:

    Щелкнуть правой кнопкой мыши по иконке (ярлычку) запуска Excel на рабочем столе или в панели задач и выбрать команду Свойства (Properties) , а затем в открывшемся окне скопировать путь из строки Target:

Открыть любую книгу Excel, затем открыть Диспетчер задач (Task Manager) нажатием Ctrl + Alt + Del и, щелкнув правой кнопкой мыши по строке Microsoft Excel, выбрать команду Свойства (Properties) . В открывшемся окне можно скопировать путь, не забыв потом дописать к нему обратный слэш и EXCEL.EXE в конце:

Открыть Excel, открыть редактор Visual Basic сочетанием клавиш Alt + F11 , открыть панель Immediate сочетанием Ctrl + G , ввести в неё команду:
? Application.Path
. и нажать на Enter


Cкопировать получившийся путь, не забыв потом дописать к нему обратный слэш и EXCEL.EXE в конце.

В поле Добавить аргументы (необязательно) (Add arguments (optional)) нужно вставить полный путь к книге с макросом, которую мы хотим открыть.

Когда всё ввели, то жмем Далее и затем Готово (Finish) . Задача должна добавиться в общий список:

Управление созданной задачей удобно осуществлять с помощью кнопок справа. Здесь можно протестировать задачу, запустив её немедленно (Run), не дожидаясь наступления заданного срока. Можно временно деактивировать задачу (Disable), чтобы она перестала выполняться на время, например, вашего отпуска. Ну, и изменить параметры (даты, время, имя файла) тоже всегда можно через кнопку Свойства (Properties) .

Добавляем макрос на открытие файла

Теперь осталось повесить в нашей книге запуск нужного нам макроса на событие открытия файла. Для этого откроем книгу и перейдем в редактор Visual Basic с помощью сочетания клавиш Alt + F11 или кнопки Visual Basic на вкладке Разработчик (Developer) . В открывшемся окне в левом верхнем углу нужно найти наш файл на дереве и двойным щелчком мыши открыть модуль ЭтаКнига (ThisWorkbook) .

Если у вас в редакторе Visual Basic не видно этого окна, то его можно открыть через меню View – Project Explorer.

В открывшемся окне модуля добавим обработчик события открытия книги, выбрав его из выпадающих списков в верхней части Workbook и Open, соответственно:

На экране должна появиться заготовка процедуры Workbook_Open, куда между строчками Private Sub и End Sub и нужно вставить те команды на VBA, которые должны автоматически выполняться при открытии этой книги Excel, когда её по расписанию откроет Планировщик. Вот несколько полезных вариантов для разгона:

    ThisWorkbook.RefreshAll – обновление всех внешних запросов к данным, запросов Power Query и сводных таблиц. Самый универсальный вариант. Только не забудьте разрешить по умолчанию подключения к внешним данным и обновление связей через Файл – Параметры – Центр управления безопасностью – Параметры центра управления безопасностью – Внешнее содержимое, иначе при открытии книги появится стандартное предупреждение и Excel, ничего не обновляя, будет ждать от вас благословления в виде нажатия на кнопку Включить содержимое (Enable content) :

  • ActiveWorkbook.Connections("Имя_Соединения").Refresh – обновление данных по соединению Имя_Соединения.
  • Sheets("Лист5").PivotTables("СводнаяТаблица1").PivotCache.Refresh – обновление отдельно взятой сводной таблицы с именем СводнаяТаблица1 на листе Лист5.
  • Application.Calculate – пересчет всех открытых книг Excel.
  • Application.CalculateFullRebuild – принудительный пересчет всех формул и перестроение всех зависимостей между ячейками во всех открытых книгах (равносильно повторному вводу всех формул).
  • Worksheets("Отчет").PrintOut – распечатать лист Отчет.
  • Call MyMacro – запустить макрос с именем MyMacro.
  • ThisWorkbook.Save – сохранить текущую книгу
  • ThisWorkbooks.SaveAs "D:АрхивОтчет " & Replace(Now, ":", "-") & ".xlsx" – сохранить книгу в папку D:Архив под именем Отчет с добавлением к имени даты и времени.
  • Если вы хотите, чтобы макрос выполнялся только при открытии файла Планировщиком в 5:00, а не каждый раз при открытии книги пользователем в течение рабочего дня, то имеет смысл добавить проверку на время, например:

    Вот и всё. Не забудьте сохранить книгу в формате с поддержкой макросов (xlsm или xlsb) и можно смело закрывать Excel и отправляться домой, оставив компьютер включенным. В заданный момент (даже если ПК заблокирован) Планировщик запустит Excel и откроет в нём заданный файл, а наш макрос выполнит запрограммированные действия. А вы будете нежиться в постели, пока ваш тяжелый отчёт автоматически пересчитывается – красота! 🙂

    Хочу рассказать как можно в Excel использовать таймеры. Как ни странно, но они очень часто применяются, например, при составлении тестов, когда необходимо дать определённое время на выполнение теста. Или необходимость запускать автосохранение книги через каждые 5 минут. А так же во многих других случаях.

    Просмотр содержимого документа
    «Запуск макроса через определённое время Таймер. Application.OnTime»

    Запуск макроса через определённое время
    Таймер. Application.OnTime

    Хочу рассказать как можно в Excel использовать таймеры. Как ни странно, но они очень часто применяются, например, при составлении тестов, когда необходимо дать определённое время на выполнение теста. Или необходимость запускать автосохранение книги через каждые 5 минут. А так же во многих других случаях. Делается таймер при помощи команды

    Читайте также:  Беспроводные наушники с отличным звуком

    Запуск макроса через некоторое время

    Продемонстрирую на примере простейшего кода:

    Application.OnTime Now + TimeValue("00:00:03"), "Proc"

    MsgBox "Время вышло!", vbInformation, "Пример таймера"

    В этом примере таймер задаётся в процедуре Procedura_1(), а вот процедура Proc() выполняется через заданный промежуток времени. В данном случае тут отсчитывается 3 секунды от текущей даты Now + TimeValue("00:00:03").
    Оператор Now в данном случае является переменной, которая несёт в себе полную информацию, т.е. число, месяц, год, часы, минуты, секунды. Это хорошо заметно при пошаговом выполнении макроса.

    Дальше идёт прибавление некоторого значения к текущему времени Now + TimeValue("00:00:03"). В данном случае мы к текущей дате прибавили всего 3 секунды.
    И после того как мы задали время, через запятую, указываем имя самого макроса, который должен выполниться "Proc".

    При этом если Вам не нужны такие большие точности, т.е. год, месяц и т.д., то Вы вполне можете заменить оператор Now на Time, который хранит в себе только время.

    Теперь понятно, что макрос "Proc" выполнится через 3 секунды после макроса Procedura_1.

    Хочу обратить внимание, что TimeValue("00:00:03") можно заменить на TimeSerial(0, 0, 3) и предыдущую процедуру можно записать так:

    Application.OnTime Time + TimeSerial(0, 0, 3), "Proc"

    Из скриншота видно, что цифры через запятую обозначают часы, минуты и секунды.

    Запуск макроса в заданное время

    Теперь рассмотрим такой случай когда необходимо, чтобы макрос сработал в заданное время. Например в 18:00. Делается это по аналогии с предыдущей записью, только мы упускаем оператор Now или Time.

    Application.OnTime TimeValue("18:00:00"), "Proce"

    MsgBox "Время пришло!", vbInformation, "Пример таймера"

    При такой записи процедура Proce() выполнится в 18:00 вечера.

    Ну вот. Всё вроде хорошо. Но вдруг мы передумали и нам теперь не надо запускать этот макрос в 18:00 вечера. Отменить данную команду можно при помощи команды Schedule:=False, которая отменяет запуск указанного макроса. Например:

    Application.OnTime TimeValue("18:00:00"), "Proce"

    Application.OnTime TimeValue("18:00:00"), "Proce", Schedule:=False

    MsgBox "Время пришло!", vbInformation, "Пример таймера"

    В этом случае у нас есть макрос который включает таймер – Zapusk, и макрос который отключает таймер –Otmena.

    Если запустить макрос Zapusk, то в 18:00 у нас выполнится макрос Proce. А вот если до 18:00 выполнить макрос Otmena, то макрос Proce не запустится.

    Ну вот мы и подошли к вопросу как сделать автосохранение книги, или внесение каких-то определённых данных через заданный промежуток времени. Сделать это просто.

    Application.OnTime Time + TimeSerial(0, 0, 5), "Proc"

    MsgBox "Время вышло!", vbInformation, "Пример таймера"

    При такой записи сообщение нам будет выводиться каждые 5 секунд, потому что мы зациклили эти два макроса.

    А вот для того, чтобы сделать включение и отключение таймера например с двух кнопок, можно воспользоваться глобальной переменной.

    Public sostoyanie As Boolean

    Application.OnTime Time + TimeSerial(0, 0, 5), "Proc"

    MsgBox "Время вышло!", vbInformation, "Пример таймера"

    If sostoyanie = True Then Procedura_2

    В этом случае запуск макроса осуществляется процедурой Procedura_2_Zapusk, а его остановка процедуройProcedura_2_Otmena.

    Событие возникающее при открытии и закрытии книги

    Открытие книги. Workbook_Open

    Рассмотрим событие, которое возникает при открытии книги. Я бы сказал, что это очень важное событие при составлении программ. Например, для того чтобы сразу придать нужное оформление нашему документу, или запустить какой-нибудь макрос, который запрашивает логин и пароль.

    Делается это следующим образом. Заходим в окно VB, щёлкаем слева по книге "ЭтаКнига". Открывается окно. В левом верхнем окошке выбираем пункт Workbook и правом окошке Open.

    После этого появится следующие начало и конец макроса, который и будет срабатывать при открытии книги.

    Private Sub Workbook_Open()

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

    Private Sub Workbook_Open()

    MsgBox "Привет " & Application.UserName, vbInformation, "Приветствие"

    Закрытие книги. Workbook_BeforeClose

    Рассмотрим событие, которое возникает при закрытии книги, если быть точнее, то перед закрытием.

    Заходим в окно VB, щёлкаем слева по книге "ЭтаКнига". Открывается окно. В левом верхнем окошке выбираем пункт Workbook и правом окошке BeforeClose.

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

    Private Sub Workbook_BeforeClose(Cancel As Boolean)

    Если в этот код поместить информационное сообщение, то при попытке закрыть книгу нам будет появляться сообщение.

    Private Sub Workbook_BeforeClose(Cancel As Boolean)

    MsgBox "Прощай " & Application.UserName, vbInformation, "Прощание"

    Событие возникающее при сохранении книги

    Макрос срабатывающий перед сохранением книги.
    Workbook_BeforeSave

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

    Делается это следующим образом. Заходим в окно VB, щёлкаем слева по книге "ЭтаКнига". Открывается окно. В левом верхнем окошке выбираем пункт Workbook и правом окошке BeforeSave.

    После этого появится следующие начало и конец макроса, который и будет срабатывать при открытии книги.

    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

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

    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

    MsgBox "Вы сохраняете книгу", vbInformation, "Сохранение"

    Возможно даже сохранить книгу своим способом или отменить её сохранение.

    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

    Res = MsgBox("Вы хотите сохранить эту книгу?", vbQuestion + vbYesNo, "Сохранение")

    If Res = vbNo Then Cancel = True

    Если пользователь в этом макросе откажется от сохранения, то книга не будет сохраняться, так как происходит отмена сохранения посредством переменной Cancel = True.

    Макрос срабатывающий после сохранения книги.
    Workbook_AfterSave

    Теперь посмотрим на событие, которое возникает после сохранения книги. Заходим в окно VB, щёлкаем слева по книге "ЭтаКнига". Открывается окно. В левом верхнем окошке выбираем пункт Workbook и правом окошке AfterSave.

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

    Private Sub Workbook_AfterSave(ByVal Success As Boolean)

    Если в этот код поместить информационное сообщение, то после сохранения книги нам будет появляться сообщение.

    Private Sub Workbook_AfterSave(ByVal Success As Boolean)

    MsgBox "Книга успешно сохранена", vbInformation, "Отчёт"

    А можно сделать и так, что при сохранении нам будет указываться промежуток времени за который произошло сохранение книги.

    Public Tm As Date, Res As Double

    ‘Макрос срабатывающий перед сохранением книги

    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

    Читайте также:  Видеоредактор для телефона андроид

    Res = MsgBox("Вы хотите сохранить эту книгу?", vbQuestion + vbYesNo, _

    If Res = vbNo Then Cancel = True

    ‘Макрос срабатывающий после сохранения книги

    Private Sub Workbook_AfterSave(ByVal Success As Boolean)

    Dim T As Integer

    If Res = vbNo Then

    T = (Time – Tm) * 24 * 60 * 60 ‘Время в секундах

    MsgBox "Книга успешно сохранена за " & T & " секунд!", vbInformation, _

    Событие книги
    Правая и левая кнопка мыши

    В предыдущих уроках я рассматривал каким образом можно сделать событие создающееся на листе от команды правой кнопки мыши и двойного щелчка левой кнопки мыши.

    В событии с книгой всё аналогично, поэтому я не буду много уделять времени. Только хочу уточнить одну деталь. Если в предыдущих уроках мы рассматривали команды которые имеют своё влияние только на лист, то в макросе события книги, он действует на всю книгу и на все листы.

    Двойной щелчок левой кнопки мыши

    Выбираем ЭтаКнига, в левом окошке выбираем Workbook, в правом окошке выбираемSheetBeforeDoubleClick, как показано на скриншоте ниже.

    После этого появится следующие начало и конец макроса, который и будет срабатывать при двойном щелчке мыши по ячейкам любого листа.

    Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, _

    ByVal Target As Range, Cancel As Boolean)

    Если в этот код поместить информационное сообщение, то при двойном щелчке мыши по ячейке на любом листе книги, нам будет отоброжаться наше информационное сообщение.

    Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, _

    ByVal Target As Range, Cancel As Boolean)

    MsgBox "Вы произвели двойное нажатие ЛКМ", vbInformation, "Пример"

    Для того чтобы не входить в режим редактирования добавляем в коде Cancel = True

    Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, _

    ByVal Target As Range, Cancel As Boolean)

    MsgBox "Вы произвели двойное нажатие ЛКМ", vbInformation, "Пример"

    Правая кнопка мыши

    Теперь посмотрим на событие, которое возникает на всех листах книги, при нажатии на правую кнопку мыши. Заходим в окно VB, щёлкаем слева по книге "ЭтаКнига". Открывается окно. В левом верхнем окошке выбираем пункт Workbook и правом окошке SheetBeforeRightClick.

    После этого появится следующие начало и конец макроса, который и будет срабатывать после нажатия на ПКМ.

    Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, _

    ByVal Target As Range, Cancel As Boolean)

    Если в этот код поместить информационное сообщение, то при нажатии правой кнопки мыши на любом листе книги, нам будет появляться сообщение.

    Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, _

    ByVal Target As Range, Cancel As Boolean)

    MsgBox "Вы произвели нажатие ПКМ", vbInformation, "Пример"

    Можно сделать и так, чтобы при нажатии на правую кнопку мыши удалялась строка, над которой находится курсор.

    Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, _

    ByVal Target As Range, Cancel As Boolean)

    MsgBox "Строка удалена!", vbExclamation, "Пример"

    Как отличить текст от числа?
    Целое или дробное? Чётное или нечётное?
    Остаток от деления

    Текст или число?

    При написании программы с возможностью ручного ввода данных , очень часто возникает необходимость отличить какие именно данные введены – текст или число? Предположим вы пишите программу, которая запрашивает от пользователя ввести число от 0 до 50, но пользователь не знает цифр и вместо этого пишет в поле ввода данных – батон. И после таких данных наша программа выдаст окно VB с ошибкой, так как нам надо было число или цифру, а не текст. И для того, чтобы такого не происходило я покажу Вам как отличить что именно ввёл пользователь – число или текст.
    Делается это при помощи проверочной команды:

    где a – это проверяемая переменная (текст, цифра, число).
    Данная команда может принимать только два значение – False или True (если запись будет выглядеть так: b=IsNumeric(a)).

    Напишем простенькую программку, которая будет определять введённые данные.

    Dim a As Variant ‘описываем переменную

    a = InputBox("Введите текст или число.", "Ввод данных")

    If a = "" Then Exit Sub ‘Если данных не введено, то выходим из процедуры

    If IsNumeric(a) Then ‘проверяем число или текст

    MsgBox "Вы ввели число!", vbInformation, "Число"

    MsgBox "Вы ввели текст или смешанные данные!", vbInformation, _

    Как видно из программы – a присваивает значение введённых данных.
    Далее в условии Если То проверяется число это или текст, и если введённые данные это число, то нам выскакивает сообщение о том, что Вы ввели число. В противном случае нам покажется сообщение о смешанных данных или что это текст.
    If a = "" Then Exit Sub – если пользователь не ввёл никаких данных, то просто выходим из процедуры.

    Как работают все представленные в уроке программы можно посмотреть на небольшом видеоролике.

    Остаток числа (модуль)

    Теперь научимся определять остаток числа при делении. Делается это при помощи оператора Mod, другими словами – модуль, но не путайте с математическим понятием модуля. Синтаксис записи его следующий:

    А вот теперь надо понять что происходит при такой записи. Объясняю логику работы данного модуля:
    Первым делом это значение a делится на значение b. Если деление произошло без остатка (например, 4:2 или 9:3), то в результате запишетсяc = 0. В противном случае, если при делении образуется остаток (например, 9:2 – остаток 1, 9:5 – остаток 4), то c будет равно остатку (при этом, если остаток не целый, то он округляется, например 15:6.3=2, остаток 2.4 – округляем в большую сторону получается 3.
    Рассмотрим как это будет выглядеть програмно. Напишем простенькую программу, которая нам будет определять округлённый остаток.

    a = InputBox("Введите первое число A в выражении C = A Mod B.", "Ввод данных")

    b = InputBox("Введите второе число B в выражении C = A Mod B.", "Ввод данных")

    MsgBox a & " Mod " & b & "= " & c, vbInformation, "Модуль"

    Как отличить целое число от дробного?

    Этот вопрос волновал многих людей, которые работаю с большими табличными данными. И очень часто возникал вопрос: Как отличить дробное число от целого?
    Теперь Вы это узнаете. Делается это при помощи простого оператора Int или Fix.

    А вот чем они отличаются это мы сейчас и увидим на простом примере.

    a = InputBox("Введите любое дробное число через запятую, например 68,8", _

    MsgBox "Int(a) = " & b & Chr(13) & _

    "Fix(a) = " & c, vbInformation, "Целое"

    У нас имеется программа, которая запрашивает любое дробное число, дабы понять в чём суть отделения целой части. А теперь попробуем вводить несколько дробных чисел (положительных и отрицательных) и будем смотреть на результат, который будет выводиться в сообщении.

    Ниже представлена таблица, при помощи которой можно легко понять в чём различие этих двух операторов.

    admin

    Добавить комментарий

    Ваш e-mail не будет опубликован. Обязательные поля помечены *