DoEvents - позволяет передать управление операционной системе, чтобы обработать накопившиеся в операционной системе события (например, нажатия клавиш пользователем). После этого выполнение операции VBA продолжается. Если у Вас работает очень долгая операция (поиск на дисках, обработка большого объема данных и т.п.) и Вы хотите дать пользователю возможность быстро прервать эту операцию, можно выполнять эту команду, например, каждый раз после обработки определенной "порции" данных. Часто применяется именно в циклах, чтобы была возможность прервать цикл, если он "зациклился" или выполняется слишком долго и необходимо выполнить срочную задачу:Dim lr As Long For lr = 1 To 9999999 'здесь код по обработке данных '... 'позволяем системе перехватить внешнее событие и отреагировать на него DoEvents Next
Environ - возвращает абсолютный путь для переменных окружения компьютера (полный список переменных, доступных на конкретном компьютере, можно просмотреть, если в командной строке выполнить команду SET). Например, если нужно сохранить некий файл во временном каталоге(папка Temp), то получить полный путь к ней можно так:MsgBox Environ("TEMP")Функции работы с реестром SaveSetting - позволяет записать информацию в реестр. Информация храниться исключительно в текстовом виде.GetSetting - позволяет получить значение, сохраненное ранее при помощиSaveSetting DeleteSetting - удаляет из реестра информацию, сохраненную в нем ранее при помощиSaveSetting AppName - произвольное значение. Можно считать, что это имя основного контейнера(или диска) для хранения информации(часто используется имя файла или программы)Section - произвольное значение. Можно считать, что это имя папки внутри контейнера(диска). Для одногоAppName можно создать несколькоSection Key - практически конечная точка. Можно считать, что это текстовый файл в конечной папке, в который и будет хранить нужное значение.GetAllSettings - возвращает двухмерный массив параметров из реестра, которые были заданы пользователем ранее при помощи функцииSaveSetting . При этом обязательно указываютсяAppName иSection , а в массиве содержится два столбца: 1-ый - имяKey , второй - его значение:Dim aAllKeys aAllKeys = GetAllSettings("MyVariables", "File1")
Partition - позволяет определить, к какому диапазону из наборов значений относится переданное число и возвращает описание этого диапазона(в виде строки). Обычно используется при выполнении запросов к базам данных.QBColor - позволяет перевести обозначение цвета из древнего номерного обозначения с возможными 16 значениями в RGB-код, который понимается VBA. Обычно используется при переделке кодов, написанных на совсем старых версиях.RGB - позволяет вернуть цветовой код, который можно использовать для присвоения цвета в коде, приняв три значения для цветов: красного (Red), зеленого (Green) и синего (Blue). Значение для каждого из основных цветов могут варьироваться от 0 до 255. Например, самый зеленый из возможных цветов получится, если переданные этой функции значения будут выглядеть как RGB(0,255,0).Shell - позволяет запустить из VBA внешний файл. Обычно используется для быстрого открытия файла в приложении, назначенном по умолчанию для его открытия. По сути это единственная возможность данной функции - никак управлять запущенным файлом или приложением не получится.
Если нужны чуть более расширенные возможности по запуску других файлов - имеет смысл присмотреться к
WshShell иWshExec из библиотекиWindows Script Host Object Model . В них можно передавать в окно клавиатурные комбинации, принимать и передавать значения через командную строку и т.п. Эта библиотека есть на любом компьютере Windows.TypeName - функция, которая возвращает имя типа данных для переданной ей переменной. Очень удобна для определения типа данных для значения внутри функций или если в момент запуска выделен должен быть конкретный тип данных. Например, если наш код предполагает обработку выделенных на листе ячеек, то не лишним будет проверять - точно ли выделены ячейки или нет. Ведь помимо ячеек на листе можно выделить и фигуру и диаграмму. И тогда код выдаст ошибку. И чтобы этого не было - проверяем тип:If TypeName(Selection) <> "Range" Then MsgBox "Необходимо выделить ячейки!", vbCritical, "www.excel-vba.ru" Exit Sub End If
VarType - делает почти то же самое, чтоTypeName , но вместо имени возвращает числовой код, который обозначает тип данных. Можно использовать для программных проверок типов данных для переменных. Например, если мы при помощи Application.GetOpenFilename запрашиваем путь к файлу - можно проверить, нажата кнопка Отмена или файл был выбран:Dim sfile 'обязательно объявляем без типа sfile = Application.GetOpenFilename("Файлы Excel(*.xlsx*),*.xlsx", , "Выберите файл Excel", , False) 'если sfile имеет тип Boolean(TRUE или FALSE)- значит была нажата кнопка Отмена If VarType(sfile) <> vbBoolean Then GetFileFullName = sfile End If
Для
У
А у
Как это можно применить. Предположим, мы хотим подсчитать кол-во запусков конкретного кода и считывать его в определенный момент.
Dim vreg_val As Long 'счетчик запуском 'пробуем получить значение по указанным параметрам. Если его там нет - возвращаем 0 vreg_val = GetSetting("MyVariables", "File1", "Module1", 0) 'Проверяем кол-во запусков If vreg_val > 100 Then MsgBox "Пробное количество запусков закончилось!", vbInformation, "www.excel-vba.ru" End 'завершаем все процедуры и функции кода End If 'Увеличиваем счетчик запусков vreg_val = vreg_val + 1 'Сохраняем увеличенный счетчик кол-ва запусков - произойдет только в случае, если кол-во запусков менее 100 SaveSetting "MyVariables", "File1", "Module1", vreg_val 'если хотим удалить сохраненные настройки DeleteSetting "MyVariables", "File1", "Module1" |
В случае с удалением настроек при помощи
Важно! Эти методы позволяют обращаться только к одному очень далекому уголку реестра в ветви HKEY_CURRENT_USERS. Обращаться к другим параметрам реестра при помощи этих методов бесполезно. Для работы с реестром лучше использовать объектWSHShell из библиотекиWindows Script Host Object Model , которая сейчас есть на любом компьютере "из коробки". У данного объекта есть специальные методы для работы с реестром - RegRead(), RegWrite() и RegDelete(). Справку по объектам этой библиотеки можно найти на сайте Microsoft (www.microsoft.com/scripting).
![]()
