Vba application: Свойство Application. Range (Excel) | Microsoft Docs
Свойство Application. Range (Excel) | Microsoft Docs
-
- Чтение занимает 2 мин
В этой статье
Возвращает объект Range , представляющий ячейку или диапазон ячеек.Returns a Range object that represents a cell or a range of cells.
СинтаксисSyntax
Expression. Range (Cell1, Cell2)expression.Range (Cell1, Cell2)
выражение: переменная, представляющая объект Application.expression A variable that represents an Application object.
ПараметрыParameters
ИмяName | Обязательный или необязательныйRequired/Optional | Тип данныхData type | ОписаниеDescription |
---|---|---|---|
Cell1Cell1 | ОбязательныйRequired | VariantVariant | Имя диапазона.The name of the range. Это должна быть ссылка в стиле A1 на языке макроса.This must be an A1-style reference in the language of the macro. Он может содержать оператор диапазона (двоеточие), оператор пересечения (пробел) или оператор объединения (запятая).It can include the range operator (a colon), the intersection operator (a space), or the union operator (a comma). Он также может включать знаки доллара, но они игнорируются.It can also include dollar signs, but they are ignored. Можно использовать локально определенное имя в любой части диапазона.You can use a local defined name in any part of the range. При использовании имени предполагается, что оно записано на языке макроса. If you use a name, the name is assumed to be in the language of the macro. |
Cell2Cell2 | НеобязательныйOptional | VariantVariant | Ячейка в левом верхнем и правом нижнем углах диапазона.The cell in the upper-left and lower-right corner of the range. Может быть объектом Range, содержащим одну ячейку, весь столбец или всю строку, или строкой, указывающей одну ячейку на языке макроса.Can be a Range object that contains a single cell, an entire column, or entire row, or it can be a string that names a single cell in the language of the macro. |
ПримечанияRemarks
Если используется без квалификатора объекта, это свойство является ярлыком для Активешит. Range (Возвращает диапазон с активного листа; Если активный лист не является листом, свойство завершается неудачей).When used without an object qualifier, this property is a shortcut for ActiveSheet. Range (it returns a range from the active sheet; if the active sheet isn’t a worksheet, the property fails).
При применении к объекту Range это свойство выполняется относительно объекта Range.When applied to a Range object, the property is relative to the Range object. Например, если выбрана ячейка C3, свойство Selection.Range("B1")
возвращает ячейку D3, так как оно выполняется относительно объекта Range, возвращаемого свойством Selection.For example, if the selection is cell C3, Selection.Range("B1")
returns cell D3 because it’s relative to the Range object returned by the Selection property. С другой стороны, код ActiveSheet.Range("B1")
всегда возвращает ячейку B1.On the other hand, the code ActiveSheet.Range("B1")
always returns cell B1.
ПримерExample
В этом примере ячейке A1 на Листе1 присваивается значение 3,14159. This example sets the value of cell A1 on Sheet1 to 3.14159.
Worksheets("Sheet1").Range("A1").Value = 3.14159
В этом примере создается формула в ячейке A1 на Листе1.This example creates a formula in cell A1 on Sheet1.
Worksheets("Sheet1").Range("A1").Formula = "=10*RAND()"
В этом примере действия повторяются в ячейках A1:D10 на Листе1.This example loops on cells A1:D10 on Sheet1. Если в одной из ячеек есть значение меньше 0,001, в коде выполняется замена этого значения на 0 (ноль).If one of the cells has a value less than 0.001, the code replaces that value with 0 (zero).
For Each c in Worksheets("Sheet1").Range("A1:D10")
If c.Value < .001 Then
c.Value = 0
End If
Next c
В этом примере выполняется цикл для диапазона с именем Тестранже и отображается количество пустых ячеек в диапазоне.This example loops on the range named TestRange and displays the number of empty cells in the range.
numBlanks = 0
For Each c In Range("TestRange")
If c.Value = "" Then
numBlanks = numBlanks + 1
End If
Next c
MsgBox "There are " & numBlanks & " empty cells in this range"
В этом примере для шрифта в ячейках A1:C5 на Листе1 устанавливается курсивное начертание.This example sets the font style in cells A1:C5 on Sheet1 to italic. В примере используется синтаксис 2 свойства Range.The example uses Syntax 2 of the Range property.
Worksheets("Sheet1").Range(Cells(1, 1), Cells(5, 3)). _
Font.Italic = True
Поддержка и обратная связьSupport and feedback
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи?Have questions or feedback about Office VBA or this documentation? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.
Метод Application.InputBox (Excel) | Microsoft Docs
-
- Чтение занимает 3 мин
В этой статье
Отображает диалоговое окно для данных, вводимых пользователями.Displays a dialog box for user input. Возвращает данные, введенные в диалоговом окне.Returns the information entered in the dialog box.
СинтаксисSyntax
expression.InputBox (Prompt, Title, Default, Left, Top, HelpFile, HelpContextID, Type)expression.InputBox (Prompt, Title, Default, Left, Top, HelpFile, HelpContextID, Type)
выражение: переменная, представляющая объект Application. expression A variable that represents an Application object.
ПараметрыParameters
ИмяName | Обязательный или необязательныйRequired/Optional | Тип данныхData type | ОписаниеDescription |
---|---|---|---|
PromptPrompt | ОбязательноRequired | StringString | Сообщение, которое отображается в диалоговом окне.The message to be displayed in the dialog box. Это может быть строка, число, дата или логическое значение (Microsoft Excel автоматически переводит значение в тип String перед отображением).This can be a string, a number, a date, or a Boolean value (Microsoft Excel automatically coerces the value to a String before it is displayed). Максимальная длина сообщения составляет 255 символов, в противном случае запрос не выводится, а метод приложения сразу же возвращает ошибку 2015. Maximum length is 255 characters, otherwise there is no prompt, and Application’s method immediately returns Error 2015. |
TitleTitle | НеобязательныйOptional | VariantVariant | Название поля для ввода.The title for the input box. Если этот аргумент пропущен, используется заголовок по умолчанию «Ввод».If this argument is omitted, the default title is Input. |
DefaultDefault | OptionalOptional | VariantVariant | Задает значение, которое будет отображаться в текстовом поле при первоначальном отображении диалогового окна.Specifies a value that will appear in the text box when the dialog box is initially displayed. Если этот аргумент пропущен, текстовое поле остается пустым.If this argument is omitted, the text box is left empty. Это значение может представлять собой объект ** Range ** объекта.This value can be a Range object. |
LeftLeft | НеобязательныйOptional | VariantVariant | Указывает положение по оси x для диалогового окна по отношению к левому верхнему углу экрана в пунктах.Specifies an x position for the dialog box in relation to the upper-left corner of the screen, in points. |
TopTop | НеобязательныйOptional | VariantVariant | Указывает положение по оси y для диалогового окна по отношению к левому верхнему углу экрана в пунктах.Specifies a y position for the dialog box in relation to the upper-left corner of the screen, in points. |
HelpFileHelpFile | OptionalOptional | VariantVariant | Имя файла справки для этого поля ввода.The name of the Help file for this input box. При наличии аргументов HelpFile и HelpContextID, кнопка «Справка» будет отображаться в диалоговом окне. If the HelpFile and HelpContextID arguments are present, a Help button will appear in the dialog box. |
HelpContextIDHelpContextID | OptionalOptional | VariantVariant | Номер идентификатора контекста раздела справки в HelpFile.The context ID number of the Help topic in HelpFile. |
TypeType | НеобязательныйOptional | VariantVariant | Задает тип возвращаемых данных.Specifies the return data type. Если этот аргумент опущен, диалоговое окно возвращает текст.If this argument is omitted, the dialog box returns text. |
Возвращаемое значениеReturn value
VariantVariant
ПримечанияRemarks
В таблице ниже перечислены значения, которые можно передать в аргументе Type.The following table lists the values that can be passed in the Type argument. Это может быть одиночное значение или сумма значений.Can be one or a sum of the values. К примеру, для поля ввода, которое допускает ввод текста и чисел, задайте для аргумента Type значение 1 + 2.For example, for an input box that can accept both text and numbers, set Type to 1 + 2.
ЗначениеValue | ОписаниеDescription |
---|---|
00% | ФормулаA formula |
11 | ЧислоA number |
22 | Текст (строка)Text (a string) |
44 | Логическое значение (правда или ложь)A logical value (True or False) |
88 | Ссылка на ячейку в виде объекта RangeA cell reference, as a Range object |
1616 | Значение ошибки, например, #N/AAn error value, such as #N/A |
646.4 | Массив значенийAn array of values |
Используйте InputBox для отображения простого диалогового окна, что позволит вам вводить данные, которое можно будет использоваться в макросе. Use InputBox to display a simple dialog box so that you can enter information to be used in a macro. Диалоговое окно имеет кнопку ОК и кнопку Отмена.The dialog box has an OK button and a Cancel button. При выборе кнопки ОК InputBox возвращает значение, введенное в диалоговом окне.If you select the OK button, InputBox returns the value entered in the dialog box. При выборе кнопки Отмена InputBox возвращает значение Ложь.If you select the Cancel button, InputBox returns False.
Если значение Type равно 0, InputBox возвращает формулу в виде текста, например, =2*PI()/360
.If Type is 0, InputBox returns the formula in the form of text; for example, =2*PI()/360
. Если в формуле есть все ссылки, они возвращаются в качестве ссылки в стиле A1.If there are any references in the formula, they are returned as A1-style references. (Используйте ** ConvertFormula ** для преобразования стиля ссылок.)(Use ConvertFormula to convert between reference styles.)
Если значение Type равно 8, InputBox возвращает объект Range.If Type is 8, InputBox returns a Range object. Необходимо использовать оператор Set, чтобы назначить результат для объекта Range, как показано в приведенном ниже примере.You must use the Set statement to assign the result to a Range object, as shown in the following example.
Set myRange = Application.InputBox(prompt := "Sample", type := 8)
Если вы не используете оператор Set, для переменной устанавливается значение в диапазоне, а не сам объект Range. If you do not use the Set statement, the variable is set to the value in the range, rather than the Range object itself.
Если вы используете метод InputBox для запроса формулы у пользователя, необходимо использовать свойство ** FormulaLocal **, чтобы назначить формулу для объекта Range.If you use the InputBox method to ask the user for a formula, you must use the FormulaLocal property to assign the formula to a Range object. Ввод формулы будет выполняться на языке пользователя.The input formula will be in the user’s language.
Метод InputBox отличается от функции InputBox тем, что он позволяет выполнять выборочную проверку вводимых пользователем значений и его можно использовать с объектами, значениями ошибок и формулами Excel.The InputBox method differs from the InputBox function in that it allows selective validation of the user’s input, and it can be used with Excel objects, error values, and formulas. Обратите внимание, что Application.InputBox
вызывает метод InputBox; InputBox
без квалификатора объекта вызывает функцию InputBox.Notice that Application.InputBox
calls the InputBox method; InputBox
with no object qualifier calls the InputBox function.
ПримерExample
В этом примере у пользователя запрашивается число.This example prompts the user for a number.
myNum = Application.InputBox("Enter a number")
В этом примере пользователю предлагается выбрать ячейку на Листе1.This example prompts the user to select a cell on Sheet1. В примере используется аргумент Type, чтобы гарантировать. что возвращаемое значение будет допустимой ссылкой на ячейку (объект Range).The example uses the Type argument to ensure that the return value is a valid cell reference (a Range object).
Worksheets("Sheet1"). Activate
Set myCell = Application.InputBox( _
prompt:="Select a cell", Type:=8)
В этом примере используется метод InputBox для пользователя, чтобы выделить диапазон для передачи определяемой пользователем функции MyFunction, которая умножает три значения в диапазоне и возвращает результат.This example uses an InputBox for the user to select a range to pass to the user-defined function MyFunction, which multiplies three values in a range together and returns the result.
Sub Cbm_Value_Select()
'Set up the variables.
Dim rng As Range
'Use the InputBox dialog to set the range for MyFunction, with some simple error handling.
Set rng = Application.InputBox("Range:", Type:=8)
If rng.Cells.Count <> 3 Then
MsgBox "Length, width and height are needed -" & _
vbLf & "please select three cells!"
Exit Sub
End If
'Call MyFunction by value using the active cell.
ActiveCell.Value = MyFunction(rng)
End Sub
Function MyFunction(rng As Range) As Double
MyFunction = rng(1) * rng(2) * rng(3)
End Function
Поддержка и обратная связьSupport and feedback
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи?Have questions or feedback about Office VBA or this documentation? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.
Знакомство с объектом Application. VBA для чайников
Знакомство с объектом Application
Как и во всех других VBA-приложениях, ключевым в объектной модели Word является объект Application. Другими словами, этот объект содержит все остальные объекты Word. Поскольку объект Application занимает центральное место в программировании на VBA в Word, вам даже не придется явно указывать его имя при работе со многими важными объектами. Однако вам не следует забывать о роли, которую играет этот объект, поскольку он вам потребуется при работе со свойствами и методами самого приложения, а также при обращении к некоторым другим объектам. Например, приведенная ниже инструкция использует метод List Commands объекта Application:
Application.ListCommands (True)
Между прочим, метод List Commands создает новый документ и помещает в него таблицу, содержащую комбинации клавиш и команды меню Word. Если вы передаете методу List Commands значение True, новый документ содержит комбинации клавиш и команды меню Word. Передайте ему значение False, чтобы в нем перечислялись только команды.
Поделитесь на страничке
Следующая глава >
Выполнение процедур в VBA
Ранее, с запуском процедур из меню «Макросы» мы уже сталкивались. Так же, мы уже назначали нашим процедурам горячие клавиши. Теперь поговорим о еще нескольких способах запуска процедур в VBA.
Выполнение процедур из пользовательского меню Excel
Этот способ позволяет нам создать свои элементы в пользовательских меню и назначить этим элементам макросы т.е. процедуры. Ниже приводится первый способ создания элемента меню и привязку к нему макроса. Данный способ использовать не предпочтительно т.к. отсутствует гибкость, при переходе на другую рабочую станцию (ПК) элементы придется создавать и настраивать повторно. Со вторым способом, а именно с программным созданием панелей меню и подключением их как надстройки, мы поговорим в следующих статьях, ну а для создания простенького меню из одного- двух элементов смотрим способ ниже.
Итак, допустим, нам необходимо запускать простенькую процедуру, которая возвращает: Имя пользователя и Текущие время и дату ПК в сообщении. Код процедуры:
Sub GetUserDate() |
Для запуска этой процедуры из пользовательского меню, проделываем следующее:
1. Выберите команду Вид — Панели инструментов — Настройка. В открывшемся окне «Настройка«, перейдите на вкладку «Команды«, и в «Категории» найдите строчку «Макросы«
Обратите внимание!!! При открытом окне «Настройка», Вы можете изменить любой пункт меню, как панелей, так и выпадающих меню.
2. Перетащите методом Drag & Drop из списка «Команды«, элемент который называется «Настраиваемая команда меню«, в нижнюю часть меню «Данные«, расположив его после элемента «Обновить данные«.
3. Щелкните правой кнопкой мыши на новом пункте меню «Настраиваемая команда меню» и в контекстном меню, в поле Имя введите название пункта меню «&Имя пользователя и дата»
4. Теперь нам остается только связать нашу процедуру (макрос) с этим пунктом. Для этого, в контекстном меню настройки элемента «Настраиваемая команда меню» т. е. уже «Имя пользователя и дата», выбираем пункт «Назначить макрос» и выбираем нашу процедуру из списка:
Все. Жмем ОК и закрываем окно «Настройка». Тестируем, меню Данные — Имя пользователя и дата, получаем сообщение:
Примечание: Приведенные выше действия создают постоянный пункт меню, т.е. данный пункт будет отображаться во всех книгах, даже после закрытия книги содержащей макрос. В последующих статьях будет рассмотрено создание собственных меню только для определенной книги.
Выполнение процедуры из другой процедуры
Самый распространенный способ вызова (выполнения) процедуры это вызов процедуры из другой процедуры. Существует три способа вызова:
- Ввод названия процедуры и ее аргументы через запятую (если есть аргументы). Самый распространенный способ. В прошлых статьях мы уже вызывали таким способом процедуры, например «Создание расширенного списка выбора».
- Ввод ключевого слова Call, после, ввод названия процедуры и аргументов, только в этом случае, аргументы необходимо заключить в скобки.
- Вызов с использованием метода Run объекта Application. Этот способ можно применить и для выполнения других процедур VBA. С помощью метода Run можно выполнить процедуру, имя которой присвоено в переменной. В этом случае в метод Run переменная передается как аргумент.
Рассмотрим каждый способ на примерах. Для этого создадим в модуле с созданной ранее процедурой GetUserDate, вызывающую процедуру CallProc.
Способ 1.
Sub CallProc() |
Способ 2.
Sub CallProc() |
Т.к. наша процедура GetUserDate не имеет входных аргументов, то вызываем ее без них. арг_1, арг_2 даны для примера. В правилах хорошего тона, вызов процедур правильнее делать вторым способом т.к. это явно указывает на вызов другой процедуры, но необязательно. Сознаюсь честно, сам ленивый и постоянно использую первый способ :).
Способ 3.
Этот способ требует особого внимания. Создадим процедуру, определяющую сегодняшний день недели и сообщающую нам в MsgBox, выходной сегодня или нет. Для этого создадим две процедуры, содержащие только сообщения:
Sub Работаем() Sub Отдыхаем() |
И теперь добавим процедуру, которая определяет сегодняшний день недели и вызывает соответствующие процедуры с сообщением.
Sub GetWeekDay() Select Case Weekday(Now, vbMonday) |
Обратите внимание, имя вызываемой процедуры присваивается в текстовую переменную SubToCall в виде обычной текстовой строки. Функция Weekday определяет по текущей дате (которая возвращена встроенной функцией Now) день недели, который проверяется в Case-селекторе (по работе с Case читаем здесь ) и в соответствии с возращенным номером дня недели присваивает в переменную SubToCall строку, содержащую имя процедуры, которую необходимо вызвать. Далее в Application.Run передаем SubToCall как аргумент. Хочу обратить внимание на функцию Weekday — функция имеет еще второй необязательный параметр, который определяет, с какого дня недели вести счет дней. По умолчанию, счет ведется с воскресенья, поэтому константа vbMonday, в нашем примере, указывает функции, что счет необходимо начать с понедельника.
Вызов процедуры из другого модуля
VBA — язык не привередлив и снисходителен ко многим моментам, например, описание переменных (по этому поводу читайте здесь ). Тоже относится и к вызову процедур, содержащихся в разных модулях. Процедуры могут быть Public или Private (что это значит, можете ознакомиться в статье по области видимости переменных). Так вот, в случае с приватными процедурами, вызов их может происходить только в рамках общего модуля т.е. процедуры (вызываемая и вызывающая) должны находится в одном и том же модуле. Если же вызываемая процедура описана как Public, тогда она становится доступной, для вызывающих процедур, во всех модулях. В случае с Public возможно повторение имен процедур в разных модулях, но вот с вызовом будут проблемы, работа закончится с ошибкой Run-time error 1004: «Не найден макрос…» т.е. интерпретатор, в рамках всего проекта, нашел несколько доступных процедур с одинаковым именем, но не понял какую из них вызвать. Для того чтобы это избежать необходимо явно указать путь к данной процедуре. Это делается довольно просто и привычно для объектно-ориентированных языков, т.е. мы указываем название модуля, содержащего процедуру, ставим точку, и нам предлагается список всех доступных процедур (функций) или глобальных переменных. Например, Module2 содержит процедуру типа Public с именем Test. Для того чтобы ее вызвать из Module1 необходимо написать: Module2.Test.
Хочу отметить, что в больших проектах может содержаться не один десяток глобальных процедур, функций, переменных, к которым происходит обращение из различных модулей, и чтоб облегчить жизнь, себе и другим, указывайте всегда полный путь к процедуре, даже если эта процедура имеет уникальное имя.
Ну, а на этом все. В следующей статье еще захвачу один способ, это вызов процедур из других книг. А пока – пока!
Объект приложения (Доступ) | Документы Microsoft
- 2 минуты на чтение
В этой статье
Приложение Объект относится к активному приложению Microsoft Access.
Замечания
Объект Application содержит все объекты и коллекции Access.
Вы можете использовать объект Application для применения методов или настроек свойств ко всему приложению Access. Например, вы можете использовать метод SetOption объекта Application для установки параметров базы данных из Visual Basic. В следующем примере показано, как установить флажок Отображать строку состояния на вкладке Текущая база данных диалогового окна Параметры доступа .
Application.SetOption «Показать строку состояния», True
Access — это компонент COM, поддерживающий автоматизацию, ранее называвшуюся OLE-автоматизацией.Вы можете управлять объектами Access из другого приложения, которое также поддерживает автоматизацию. Для этого вы используете объект Application .
Например, Microsoft Visual Basic — это компонент COM. Вы можете открыть базу данных Access из Visual Basic и работать с ее объектами. В Visual Basic сначала создайте ссылку на библиотеку объектов Access, а затем создайте новый экземпляр класса Application и укажите на него объектную переменную, как в следующем примере:
Dim app Доступ как новый доступ.заявка
Из приложений, которые не поддерживают ключевое слово New , вы можете создать новый экземпляр класса Application с помощью функции CreateObject :
Dim app Доступ как объект
Установите appAccess = CreateObject ("Access.Application")
После создания нового экземпляра класса Application вы можете открыть базу данных или создать новую базу данных с помощью метода OpenCurrentDatabase или метода NewCurrentDatabase .Затем вы можете установить свойства объекта Application и вызвать его методы.
Когда вы возвращаете ссылку на объект CommandBars с помощью свойства CommandBars объекта Application , вы можете получить доступ ко всем объектам и коллекциям панели команд Microsoft Office, используя эту ссылку.
Вы также можете управлять другими объектами Access с помощью объекта Application . Например, используя метод OpenForm объекта Access DoCmd , вы можете открыть форму Access из Microsoft Office Excel:
appAccess.DoCmd.OpenForm "Заказы"
Для получения дополнительных сведений о создании ссылки и управлении объектами с помощью автоматизации см. Документацию к приложению, которое действует как компонент COM.
Методы
Недвижимость
См. Также
Поддержка и отзывы
Есть вопросы или отзывы об Office VBA или этой документации? См. Раздел Поддержка и отзывы Office VBA, чтобы узнать, как получить поддержку и оставить отзыв.
Объект приложения Excel VBA — макросы Easy Excel
Рабочий лист Функция | ScreenUpdating | DisplayAlerts | Расчет
Мать всех объектов — это сам Excel. Мы называем его Application object . Объект приложения предоставляет доступ ко многим параметрам, связанным с Excel.
Рабочий лист Функция
Вы можете использовать свойство WorksheetFunction в Excel VBA для доступа к функциям Excel.
1.Например, поместите кнопку на листе и добавьте следующую строку кода:
Диапазон («A3»). Значение = Application.WorksheetFunction.Average (Range («A1: A2»))
Когда вы нажимаете кнопку команды на листе, Excel VBA вычисляет среднее значение значений в ячейках A1 и A2 и помещает результат в ячейку A3.
Примечание: вместо Application.WorksheetFunction.Average просто используйте WorksheetFunction.Average. Если вы посмотрите на строку формул, вы увидите, что сама формула не вставлена в ячейку A3.Чтобы вставить саму формулу в ячейку A3, используйте следующую строку кода:
Диапазон («A3»). Значение = «= СРЕДНЕЕ (A1: A2)»
Обновление экрана
Иногда может оказаться полезным отключить обновление экрана (чтобы избежать мерцания) во время выполнения кода. В результате ваш код будет работать быстрее.
1. Например, поместите командную кнопку на свой лист и добавьте следующие строки кода:
Dim i как целое число
Для i = от 1 до 10000
Диапазон («A1»). Значение = i
Далее i
Когда вы нажимаете кнопку команды на листе, Excel VBA отображает каждое значение за крошечную долю секунды, и это может занять некоторое время.
2. Чтобы ускорить процесс, обновите код следующим образом.
Dim i как целое число
Application.ScreenUpdating = False
Для i = от 1 до 10000
Диапазон («A1»). Значение = i
Далее i
Application.ScreenUpdating = True
В результате ваш код будет работать намного быстрее, и вы увидите только конечный результат (10000).
DisplayAlerts
Вы можете указать Excel VBA не отображать предупреждения во время выполнения кода.
1.Например, поместите кнопку на листе и добавьте следующую строку кода:
ActiveWorkbook. Закрыть
Когда вы нажимаете кнопку команды на рабочем листе, Excel VBA закрывает файл Excel и просит вас сохранить внесенные вами изменения.
2. Чтобы указать Excel VBA не отображать это предупреждение при выполнении кода, обновите код следующим образом.
Application.DisplayAlerts = False
ActiveWorkbook.Close
Application.DisplayAlerts = True
В результате Excel VBA закрывает ваш файл Excel, не спрашивая вас о сохранении внесенных вами изменений.Любые изменения теряются.
Расчет
По умолчанию расчет установлен автоматически. В результате Excel автоматически пересчитывает книгу каждый раз, когда изменяется значение, влияющее на формулу. Если ваша книга содержит много сложных формул, вы можете ускорить выполнение макроса, установив расчет вручную.
1. Например, поместите командную кнопку на лист и добавьте следующую строку кода:
Application.Calculation = xlCalculationManual
Когда вы нажимаете кнопку команды на листе, Excel VBA устанавливает ручной расчет.
2. Вы можете проверить это, щелкнув Файл, Параметры, Формулы.
3. Теперь при изменении значения ячейки A1 значение ячейки B1 не пересчитывается.
Вы можете вручную пересчитать книгу, нажав F9.
4. В большинстве случаев вы снова установите автоматическое вычисление в конце кода. Для этого просто добавьте следующую строку кода.
Application.Calculation = xlCalculationAutomatic
VBA Sleep против VBA Wait
Время простоя часто является потерей времени, однако иногда вам просто нужно дождаться определенных событий, прежде чем вы сможете продолжить выполнение кода.VBA расширяет несколько подходов к управлению временем простоя — самый популярный подход — процедура сна. Процедура VBA Sleep приостанавливает выполнение кода на определенное время, помещая все процессы в состояние типа комы. Это один из самых популярных подходов к приостановке выполнения кода, и в то же время самый простой. Как я попытаюсь доказать — есть лучшие и более продуктивные подходы к приостановке выполнения вашего кода или использованию потенциально простоя приложения.
‘Сон на 1 секунду
Вызов сна (1000)
‘Подождите 1 секунду
Вызов Application.Wait (DateAdd («s», 1, Now))
‘Спящий режим на 1 секунду Спящий режим вызова (1000) ‘ Подождите 1 секунду Вызов Application.Wait (DateAdd («s», 1, Now)) |
В чем разница между ними? А когда использовать функцию VBA Sleep вместо функции Application Wait VBA?
Функция сна VBA
Давайте начнем с представления функции VBA Sleep . Функция ожидания приостанавливает весь процесс на определенную задержку, указанную в миллисекундах . Недостатком использования VBA Sleep является то, что он замораживает Excel до тех пор, пока не завершится задержка. Это означает, что вы не можете продолжать работу с таблицей и что спящий режим не должен использоваться в течение длительного времени, поскольку в некоторых крайних случаях Excel может предположить, что приложение вышло из строя.
Определение и синтаксис
Функция сна по умолчанию недоступна в VBA, и ее необходимо импортировать из библиотеки kernel32 .Для 64-битных процедур необходимо обязательно добавить оператор PtrSafe .
#If VBA7 Then
Public Declare PtrSafe Sub Sleep Lib «kernel32» (ByVal миллисекунды как LongPtr) ‘MS Office 64 Bit
# Эльза
Public Declare Sub Sleep Lib «kernel32» (ByVal в миллисекундах как Long) ‘MS Office 32 Bit
#End If
#If VBA7 Then Public Declare PtrSafe Sub Sleep Lib «kernel32» (ByVal миллисекунды как LongPtr) ‘MS Office 64 Bit #Else Public Declare Sub Sleep Lib «kernel32» (ByVal миллисекунды как длинные)’ MS Office 32 Bit # End If |
Параметры
Параметр | Тип переменной | Описание |
---|---|---|
миллисекунд | длинный | Количество миллисекунд, на которое процесс должен быть приостановлен на |
Пример сна VBA
Функция сна довольно проста в использовании:
Сон 1000 ‘Сон на 1000 миллисекунд = 1 секунда
Спящий режим 1000 ‘Спящий режим 1000 миллисекунд = 1 секунда |
Другие примеры сна VBA
‘Сон в течение 10 секунд
Сон 10000
‘Сон 1 минуту
Сон 60000 ’60 * 1000
‘Сон 1 час
Сон 3600000 ‘3600 * 1000
‘Спящий режим 10 секунд Спящий режим 10000 ‘ Спящий режим 1 минута Спящий режим 60000 ’60 * 1000 ‘ Спящий режим 1 час Спящий режим 3600000 ‘3600 * 1000 |
Плюсы и минусы
профи использования функции сна:
- Простота использования
- Точные интервалы сна (в миллисекундах)
Минусы использования функции сна:
- Требуется импорт функции сна
- Замораживает весь процесс i. е. Excel не отвечает
- Невозможно остановить функцию сна
Проблема с функцией сна заключается в том, что она полностью останавливает ваш процесс, предотвращая любой ввод или взаимодействие с вашим приложением (даже нарушая выполнение кода). Почему бы не использовать это время более продуктивно? Или позволить пользователю отменить выполнение кода?
Приложение VBA.Функция ожидания
Приложение VBA .Wait — это встроенная функция VBA, которая приостанавливает выполнение кода до достижения определенного времени.В отличие от сна VBA, процедура ожидания приложения не останавливает Excel во время паузы. Это означает, что вы можете продолжить работу над своей книгой Excel во время задержки. Однако помните, что во время выполнения макроса никакие изменения не могут быть отменены ( CTRL + Z не отменяет изменения, сделанные во время выполнения макроса). Более того, Application Wait не позволяет вам ждать периоды короче одной секунды.
Синтаксис
Синтаксис функции VBA Application.Wait:
Параметры
Параметр | Тип переменной | Описание |
---|---|---|
время | Вариант | Время, когда функция должна вернуть e.грамм. С 15:30:00 до 15:30. |
Приложение VBA, пример ожидания
Функция Application.Wait также довольно проста в использовании, хотя и немного отличается от того, что можно ожидать от функции сна. Это связано с тем, что Application.Wait будет ждать , пока не будет достигнуто время вместо , ожидающего точного интервала времени.
Заявление. Подождите «15:30:00»
Приложение.Ждать «15:30:00» |
Этот подход, конечно, менее практичен, поскольку обычно вы хотите просто подождать определенный промежуток времени, например, 3 секунды. Вот почему нам нужно помочь себе, используя либо функцию DateAdd, либо функцию TimeValue:
Application. Wait DateAdd («s», 1, Now) ‘Подождите 1 секунду
‘такой же как
Application.Wait Now + TimeValue («0:00:01) ‘Подождите 1 секунду
Приложение.Wait DateAdd («s», 1, Now) ‘Подождите 1 секунду ‘ то же, что и Application.Wait Now + TimeValue («0:00:01) ‘Подождите 1 секунду |
Что делает вышеуказанная функция? Он добавляет 1 секунду к текущему времени и просит VBA подождать до этого момента, чтобы вернуться из функции. Точно так же вы можете ждать более длительные периоды времени.
Другой пример VBA Подождите
‘Подождите 10 секунд
Application.Wait DateAdd («s», 10, Now)
‘Подождите 1 минуту
Заявка.Wait DateAdd («n», 1, Now)
‘Подождите 1 час
Application.Wait DateAdd («h», 1, Now)
‘Подождите 1 минуту 30 секунд
Application.Wait DateAdd («s», 90, Now) ’00: 01: 30 = 60 + 30
‘Подождите 1 час 2 минуты 30 секунд
Application.Wait DateAdd («s», 3750, Now) ’01: 02: 30 = 3600 + 120 + 30
‘Подождите 10 секунд Application. Wait DateAdd («s», 10, Now) ‘ Подождите 1 минуту Application.Wait DateAdd («n», 1, Now) ‘Подождите 1 час Приложение.Wait DateAdd («h», 1, Now) ‘Подождите 1 минуту 30 секунд Application.Wait DateAdd («s», 90, Now) ’00: 01: 30 = 60 + 30 ‘ Подождите 1 час 2 минуты 30 секунд Application.Wait DateAdd («s», 3750, Now) ’01: 02: 30 = 3600 + 120 + 30 |
Плюсы и минусы
профи использования функции Application.Wait:
- Довольно проста в использовании (немного менее очевидна, чем в режиме сна)
- Функцию можно прервать в любой момент (не замораживает весь процесс)
- Доступно изначально из VBA
против использования приложения.Функция ожидания:
- Позволяет ожидать интервалы короче, чем 1 секунда
Функция Application.Wait немного менее очевидна в использовании, но она не остановит ваш проект VBA, позволяя вам в любой момент нажать Esc и возобновить контроль над своим проектом.
VBA DoEvents
Если вы думали, что это ваш единственный вариант — вы ошибались. К счастью, VBA позволяет также использовать другую функцию под названием DoEvents . Функция вроде бы….ничего не делает. Серьезно, он не делает ничего, кроме обработки всех событий MS Office. Теперь, спросите вы, зачем нам использовать функцию DoEvents? Хорошо, помните, что Application.Wait не позволяет ждать интервалы короче 1 секунды? С другой стороны, Sleep полностью замораживает ваше приложение, хотя и является более детализированным.
Хотите пример функции VBA DoEvents?
DoEvents особенно полезен, когда у вас выполняется много вычислений, но вы хотите, чтобы ваш проект VBA оставался отзывчивым, БЕЗ введения значительных (1 секунда) задержек. .
Пример
VBA DoEvents
Обычно при запуске макроса вы хотите выключить ScreenUpdating , фокусируя макрос только на ваших вычислениях. Однако вашему пользователю может показаться, что в приложении заморожено .