Время на прочтение
7 мин
Количество просмотров 312K
Приветствую всех.
В этом посте я расскажу, что такое VBA и как с ним работать в Microsoft Excel 2007/2010 (для более старых версий изменяется лишь интерфейс — код, скорее всего, будет таким же) для автоматизации различной рутины.
VBA (Visual Basic for Applications) — это упрощенная версия Visual Basic, встроенная в множество продуктов линейки Microsoft Office. Она позволяет писать программы прямо в файле конкретного документа. Вам не требуется устанавливать различные IDE — всё, включая отладчик, уже есть в Excel.
Еще при помощи Visual Studio Tools for Office можно писать макросы на C# и также встраивать их. Спасибо, FireStorm.
Сразу скажу — писать на других языках (C++/Delphi/PHP) также возможно, но требуется научится читать, изменять и писать файлы офиса — встраивать в документы не получится. А интерфейсы Microsoft работают через COM. Чтобы вы поняли весь ужас, вот Hello World с использованием COM.
Поэтому, увы, будем учить Visual Basic.
Чуть-чуть подготовки и постановка задачи
Итак, поехали. Открываем Excel.
Для начала давайте добавим в Ribbon панель «Разработчик». В ней находятся кнопки, текстовые поля и пр. элементы для конструирования форм.
Появилась вкладка.
Теперь давайте подумаем, на каком примере мы будем изучать VBA. Недавно мне потребовалось красиво оформить прайс-лист, выглядевший, как таблица. Идём в гугл, набираем «прайс-лист» и качаем любой, который оформлен примерно так (не сочтите за рекламу, пожалуйста):
То есть требуется, чтобы было как минимум две группы, по которым можно объединить товары (в нашем случае это будут Тип и Производитель — в таком порядке). Для того, чтобы предложенный мною алгоритм работал корректно, отсортируйте товары так, чтобы товары из одной группы стояли подряд (сначала по Типу, потом по Производителю).
Результат, которого хотим добиться, выглядит примерно так:
Разумеется, если смотреть прайс только на компьютере, то можно добавить фильтры и будет гораздо удобнее искать нужный товар. Однако мы хотим научится кодить и задача вполне подходящая, не так ли?
Кодим
Для начала требуется создать кнопку, при нажатии на которую будет вызываться наша програма. Кнопки находятся в панели «Разработчик» и появляются по кнопке «Вставить». Вам нужен компонент формы «Кнопка». Нажали, поставили на любое место в листе. Далее, если не появилось окно назначения макроса, надо нажать правой кнопкой и выбрать пункт «Назначить макрос». Назовём его FormatPrice. Важно, чтобы перед именем макроса ничего не было — иначе он создастся в отдельном модуле, а не в пространстве имен книги. В этому случае вам будет недоступно быстрое обращение к выделенному листу. Нажимаем кнопку «Новый».
И вот мы в среде разработки VB. Также её можно вызвать из контекстного меню командой «Исходный текст»/«View code».
Перед вами окно с заглушкой процедуры. Можете его развернуть. Код должен выглядеть примерно так:
Sub FormatPrice()End Sub
Напишем Hello World:
Sub FormatPrice()
MsgBox "Hello World!"
End Sub
И запустим либо щелкнув по кнопке (предварительно сняв с неё выделение), либо клавишей F5 прямо из редактора.
Тут, пожалуй, следует отвлечься на небольшой ликбез по поводу синтаксиса VB. Кто его знает — может смело пропустить этот раздел до конца. Основное отличие Visual Basic от Pascal/C/Java в том, что команды разделяются не ;, а переносом строки или двоеточием (:), если очень хочется написать несколько команд в одну строку. Чтобы понять основные правила синтаксиса, приведу абстрактный код.
Примеры синтаксиса
' Процедура. Ничего не возвращает
' Перегрузка в VBA отсутствует
Sub foo(a As String, b As String)
' Exit Sub ' Это значит "выйти из процедуры"
MsgBox a + ";" + b
End Sub' Функция. Вовращает Integer
Function LengthSqr(x As Integer, y As Integer) As Integer
' Exit Function
LengthSqr = x * x + y * y
End FunctionSub FormatPrice()
Dim s1 As String, s2 As String
s1 = "str1"
s2 = "str2"
If s1 <> s2 Then
foo "123", "456" ' Скобки при вызове процедур запрещены
End IfDim res As sTRING ' Регистр в VB не важен. Впрочем, редактор Вас поправит
Dim i As Integer
' Цикл всегда состоит из нескольких строк
For i = 1 To 10
res = res + CStr(i) ' Конвертация чего угодно в String
If i = 5 Then Exit For
Next iDim x As Double
x = Val("1.234") ' Парсинг чисел
x = x + 10
MsgBox xOn Error Resume Next ' Обработка ошибок - игнорировать все ошибки
x = 5 / 0
MsgBox xOn Error GoTo Err ' При ошибке перейти к метке Err
x = 5 / 0
MsgBox "OK!"
GoTo ne
Err:
MsgBox
"Err!"
ne:
On Error GoTo 0 ' Отключаем обработку ошибок
' Циклы бывает, какие захотите
Do While True
Exit DoLoop 'While True
Do 'Until False
Exit Do
Loop Until False
' А вот при вызове функций, от которых хотим получить значение, скобки нужны.
' Val также умеет возвращать Integer
Select Case LengthSqr(Len("abc"), Val("4"))
Case 24
MsgBox "0"
Case 25
MsgBox "1"
Case 26
MsgBox "2"
End Select' Двухмерный массив.
' Можно также менять размеры командой ReDim (Preserve) - см. google
Dim arr(1 to 10, 5 to 6) As Integer
arr(1, 6) = 8Dim coll As New Collection
Dim coll2 As Collection
coll.Add "item", "key"
Set coll2 = coll ' Все присваивания объектов должны производится командой Set
MsgBox coll2("key")
Set coll2 = New Collection
MsgBox coll2.Count
End Sub
Грабли-1. При копировании кода из IDE (в английском Excel) есь текст конвертируется в 1252 Latin-1. Поэтому, если хотите сохранить русские комментарии — надо сохранить крокозябры как Latin-1, а потом открыть в 1251.
Грабли-2. Т.к. VB позволяет использовать необъявленные переменные, я всегда в начале кода (перед всеми процедурами) ставлю строчку Option Explicit. Эта директива запрещает интерпретатору заводить переменные самостоятельно.
Грабли-3. Глобальные переменные можно объявлять только до первой функции/процедуры. Локальные — в любом месте процедуры/функции.
Еще немного дополнительных функций, которые могут пригодится: InPos, Mid, Trim, LBound, UBound. Также ответы на все вопросы по поводу работы функций/их параметров можно получить в MSDN.
Надеюсь, что этого Вам хватит, чтобы не пугаться кода и самостоятельно написать какое-нибудь домашнее задание по информатике. По ходу поста я буду ненавязчиво знакомить Вас с новыми конструкциями.
Кодим много и под Excel
В этой части мы уже начнём кодить нечто, что умеет работать с нашими листами в Excel. Для начала создадим отдельный лист с именем result (лист с данными назовём data). Теперь, наверное, нужно этот лист очистить от того, что на нём есть. Также мы «выделим» лист с данными, чтобы каждый раз не писать длинное обращение к массиву с листами.
Sub FormatPrice()
Sheets("result").Cells.Clear
Sheets("data").Activate
End Sub
Работа с диапазонами ячеек
Вся работа в Excel VBA производится с диапазонами ячеек. Они создаются функцией Range и возвращают объект типа Range. У него есть всё необходимое для работы с данными и/или оформлением. Кстати сказать, свойство Cells листа — это тоже Range.
Примеры работы с Range
Sheets("result").Activate
Dim r As Range
Set r = Range("A1")
r.Value = "123"
Set r = Range("A3,A5")
r.Font.Color = vbRed
r.Value = "456"
Set r = Range("A6:A7")
r.Value = "=A1+A3"
Теперь давайте поймем алгоритм работы нашего кода. Итак, у каждой строчки листа data, начиная со второй, есть некоторые данные, которые нас не интересуют (ID, название и цена) и есть две вложенные группы, к которым она принадлежит (тип и производитель). Более того, эти строки отсортированы. Пока мы забудем про пропуски перед началом новой группы — так будет проще. Я предлагаю такой алгоритм:
- Считали группы из очередной строки.
- Пробегаемся по всем группам в порядке приоритета (вначале более крупные)
- Если текущая группа не совпадает, вызываем процедуру AddGroup(i, name), где i — номер группы (от номера текущей до максимума), name — её имя. Несколько вызовов необходимы, чтобы создать не только наш заголовок, но и всё более мелкие.
- После отрисовки всех необходимых заголовков делаем еще одну строку и заполняем её данными.
Для упрощения работы рекомендую определить следующие функции-сокращения:
Function GetCol(Col As Integer) As String
GetCol = Chr(Asc("A") + Col)
End FunctionFunction GetCellS(Sheet As String, Col As Integer, Row As Integer) As Range
Set GetCellS = Sheets(Sheet).Range(GetCol(Col) + CStr(Row))
End FunctionFunction GetCell(Col As Integer, Row As Integer) As Range
Set GetCell = Range(GetCol(Col) + CStr(Row))
End Function
Далее определим глобальную переменную «текущая строчка»: Dim CurRow As Integer. В начале процедуры её следует сделать равной единице. Еще нам потребуется переменная-«текущая строка в data», массив с именами групп текущей предыдущей строк. Потом можно написать цикл «пока первая ячейка в строке непуста».
Глобальные переменные
Option Explicit ' про эту строчку я уже рассказывал
Dim CurRow As Integer
Const GroupsCount As Integer = 2
Const DataCount As Integer = 3
FormatPrice
Sub FormatPrice()
Dim I As Integer ' строка в data
CurRow = 1
Dim Groups(1 To GroupsCount) As String
Dim PrGroups(1 To GroupsCount) As String
Sheets(
"data").Activate
I = 2
Do While True
If GetCell(0, I).Value = "" Then Exit Do
' ...
I = I + 1
Loop
End Sub
Теперь надо заполнить массив Groups:
На месте многоточия
Dim I2 As Integer
For I2 = 1 To GroupsCount
Groups(I2) = GetCell(I2, I)
Next I2
' ...
For I2 = 1 To GroupsCount ' VB не умеет копировать массивы
PrGroups(I2) = Groups(I2)
Next I2
I = I + 1
И создать заголовки:
На месте многоточия в предыдущем куске
For I2 = 1 To GroupsCount
If Groups(I2) <> PrGroups(I2) Then
Dim I3 As Integer
For I3 = I2 To GroupsCount
AddHeader I3, Groups(I3)
Next I3
Exit For
End If
Next I2
Не забудем про процедуру AddHeader:
Перед FormatPrice
Sub AddHeader(Ty As Integer, Name As String)
GetCellS("result", 1, CurRow).Value = Name
CurRow = CurRow + 1
End Sub
Теперь надо перенести всякую информацию в result
For I2 = 0 To DataCount - 1
GetCellS("result", I2, CurRow).Value = GetCell(I2, I)
Next I2
Подогнать столбцы по ширине и выбрать лист result для показа результата
После цикла в конце FormatPrice
Sheets("Result").Activate
Columns.AutoFit
Всё. Можно любоваться первой версией.
Некрасиво, но похоже. Давайте разбираться с форматированием. Сначала изменим процедуру AddHeader:
Sub AddHeader(Ty As Integer, Name As String)
Sheets("result").Range("A" + CStr(CurRow) + ":C" + CStr(CurRow)).Merge
' Чтобы не заводить переменную и не писать каждый раз длинный вызов
' можно воспользоваться блоком With
With GetCellS("result", 0, CurRow)
.Value = Name
.Font.Italic = True
.Font.Name = "Cambria"
Select Case Ty
Case 1 ' Тип
.Font.Bold = True
.Font.Size = 16
Case 2 ' Производитель
.Font.Size = 12
End Select
.HorizontalAlignment = xlCenter
End With
CurRow = CurRow + 1
End Sub
Уже лучше:
Осталось только сделать границы. Тут уже нам требуется работать со всеми объединёнными ячейками, иначе бордюр будет только у одной:
Поэтому чуть-чуть меняем код с добавлением стиля границ:
Sub AddHeader(Ty As Integer, Name As String)
With Sheets("result").Range("A" + CStr(CurRow) + ":C" + CStr(CurRow))
.Merge
.Value = Name
.Font.Italic = True
.Font.Name = "Cambria"
.HorizontalAlignment = xlCenterSelect Case Ty
Case 1 ' Тип
.Font.Bold = True
.Font.Size = 16
.Borders(xlTop).Weight = xlThick
Case 2 ' Производитель
.Font.Size = 12
.Borders(xlTop).Weight = xlMedium
End Select
.Borders(xlBottom).Weight = xlMedium ' По убыванию: xlThick, xlMedium, xlThin, xlHairline
End With
CurRow = CurRow + 1
End Sub
Осталось лишь добится пропусков перед началом новой группы. Это легко:
В начале FormatPrice
Dim I As Integer ' строка в data
CurRow = 0 ' чтобы не было пропуска в самом начале
Dim Groups(1 To GroupsCount) As String
В цикле расстановки заголовков
If Groups(I2) <> PrGroups(I2) Then
CurRow = CurRow + 1
Dim I3 As Integer
В точности то, что и хотели.
Надеюсь, что эта статья помогла вам немного освоится с программированием для Excel на VBA. Домашнее задание — добавить заголовки «ID, Название, Цена» в результат. Подсказка: CurRow = 0 CurRow = 1.
Файл можно скачать тут (min.us) или тут (Dropbox). Не забудьте разрешить исполнение макросов. Если кто-нибудь подскажет человеческих файлохостинг, залью туда.
Спасибо за внимание.
Буду рад конструктивной критике в комментариях.
UPD: Перезалил пример на Dropbox и min.us.
UPD2: На самом деле, при вызове процедуры с одним параметром скобки можно поставить. Либо использовать конструкцию Call Foo(«bar», 1, 2, 3) — тут скобки нужны постоянно.
Introduction
This is a tutorial about writing code in Excel spreadsheets using Visual Basic for Applications (VBA).
Excel is one of Microsoft’s most popular products. In 2016, the CEO of Microsoft said «Think about a world without Excel. That’s just impossible for me.” Well, maybe the world can’t think without Excel.
- In 1996, there were over 30 million users of Microsoft Excel (source).
- Today, there are an estimated 750 million users of Microsoft Excel. That’s a little more than the population of Europe and 25x more users than there were in 1996.
We’re one big happy family!
In this tutorial, you’ll learn about VBA and how to write code in an Excel spreadsheet using Visual Basic.
Prerequisites
You don’t need any prior programming experience to understand this tutorial. However, you will need:
- Basic to intermediate familiarity with Microsoft Excel
- If you want to follow along with the VBA examples in this article, you will need access to Microsoft Excel, preferably the latest version (2019) but Excel 2016 and Excel 2013 will work just fine.
- A willingness to try new things
Learning Objectives
Over the course of this article, you will learn:
- What VBA is
- Why you would use VBA
- How to get set up in Excel to write VBA
- How to solve some real-world problems with VBA
Important Concepts
Here are some important concepts that you should be familiar with to fully understand this tutorial.
Objects: Excel is object-oriented, which means everything is an object — the Excel window, the workbook, a sheet, a chart, a cell. VBA allows users to manipulate and perform actions with objects in Excel.
If you don’t have any experience with object-oriented programming and this is a brand new concept, take a second to let that sink in!
Procedures: a procedure is a chunk of VBA code, written in the Visual Basic Editor, that accomplishes a task. Sometimes, this is also referred to as a macro (more on macros below). There are two types of procedures:
- Subroutines: a group of VBA statements that performs one or more actions
- Functions: a group of VBA statements that performs one or more actions and returns one or more values
Note: you can have functions operating inside of subroutines. You’ll see later.
Macros: If you’ve spent any time learning more advanced Excel functionality, you’ve probably encountered the concept of a “macro.” Excel users can record macros, consisting of user commands/keystrokes/clicks, and play them back at lightning speed to accomplish repetitive tasks. Recorded macros generate VBA code, which you can then examine. It’s actually quite fun to record a simple macro and then look at the VBA code.
Please keep in mind that sometimes it may be easier and faster to record a macro rather than hand-code a VBA procedure.
For example, maybe you work in project management. Once a week, you have to turn a raw exported report from your project management system into a beautifully formatted, clean report for leadership. You need to format the names of the over-budget projects in bold red text. You could record the formatting changes as a macro and run that whenever you need to make the change.
What is VBA?
Visual Basic for Applications is a programming language developed by Microsoft. Each software program in the Microsoft Office suite is bundled with the VBA language at no extra cost. VBA allows Microsoft Office users to create small programs that operate within Microsoft Office software programs.
Think of VBA like a pizza oven within a restaurant. Excel is the restaurant. The kitchen comes with standard commercial appliances, like large refrigerators, stoves, and regular ole’ ovens — those are all of Excel’s standard features.
But what if you want to make wood-fired pizza? Can’t do that in a standard commercial baking oven. VBA is the pizza oven.
Yum.
Why use VBA in Excel?
Because wood-fired pizza is the best!
But seriously.
A lot of people spend a lot of time in Excel as a part of their jobs. Time in Excel moves differently, too. Depending on the circumstances, 10 minutes in Excel can feel like eternity if you’re not able to do what you need, or 10 hours can go by very quickly if everything is going great. Which is when you should ask yourself, why on earth am I spending 10 hours in Excel?
Sometimes, those days are inevitable. But if you’re spending 8-10 hours everyday in Excel doing repetitive tasks, repeating a lot of the same processes, trying to clean up after other users of the file, or even updating other files after changes are made to the Excel file, a VBA procedure just might be the solution for you.
You should consider using VBA if you need to:
- Automate repetitive tasks
- Create easy ways for users to interact with your spreadsheets
- Manipulate large amounts of data
Getting Set Up to Write VBA in Excel
Developer Tab
To write VBA, you’ll need to add the Developer tab to the ribbon, so you’ll see the ribbon like this.
To add the Developer tab to the ribbon:
- On the File tab, go to Options > Customize Ribbon.
- Under Customize the Ribbon and under Main Tabs, select the Developer check box.
After you show the tab, the Developer tab stays visible, unless you clear the check box or have to reinstall Excel. For more information, see Microsoft help documentation.
VBA Editor
Navigate to the Developer Tab, and click the Visual Basic button. A new window will pop up — this is the Visual Basic Editor. For the purposes of this tutorial, you just need to be familiar with the Project Explorer pane and the Property Properties pane.
Excel VBA Examples
First, let’s create a file for us to play around in.
- Open a new Excel file
- Save it as a macro-enabled workbook (. xlsm)
- Select the Developer tab
- Open the VBA Editor
Let’s rock and roll with some easy examples to get you writing code in a spreadsheet using Visual Basic.
Example #1: Display a Message when Users Open the Excel Workbook
In the VBA Editor, select Insert -> New Module
Write this code in the Module window (don’t paste!):
Sub Auto_Open()
MsgBox («Welcome to the XYZ Workbook.»)
End Sub
Save, close the workbook, and reopen the workbook. This dialog should display.
Ta da!
How is it doing that?
Depending on your familiarity with programming, you may have some guesses. It’s not particularly complex, but there’s quite a lot going on:
- Sub (short for “Subroutine): remember from the beginning, “a group of VBA statements that performs one or more actions.”
- Auto_Open: this is the specific subroutine. It automatically runs your code when the Excel file opens — this is the event that triggers the procedure. Auto_Open will only run when the workbook is opened manually; it will not run if the workbook is opened via code from another workbook (Workbook_Open will do that, learn more about the difference between the two).
- By default, a subroutine’s access is public. This means any other module can use this subroutine. All examples in this tutorial will be public subroutines. If needed, you can declare subroutines as private. This may be needed in some situations. Learn more about subroutine access modifiers.
- msgBox: this is a function — a group of VBA statements that performs one or more actions and returns a value. The returned value is the message “Welcome to the XYZ Workbook.”
In short, this is a simple subroutine that contains a function.
When could I use this?
Maybe you have a very important file that is accessed infrequently (say, once a quarter), but automatically updated daily by another VBA procedure. When it is accessed, it’s by many people in multiple departments, all across the company.
- Problem: Most of the time when users access the file, they are confused about the purpose of this file (why it exists), how it is updated so often, who maintains it, and how they should interact with it. New hires always have tons of questions, and you have to field these questions over and over and over again.
- Solution: create a user message that contains a concise answer to each of these frequently answered questions.
Real World Examples
- Use the MsgBox function to display a message when there is any event: user closes an Excel workbook, user prints, a new sheet is added to the workbook, etc.
- Use the MsgBox function to display a message when a user needs to fulfill a condition before closing an Excel workbook
- Use the InputBox function to get information from the user
Example #2: Allow User to Execute another Procedure
In the VBA Editor, select Insert -> New Module
Write this code in the Module window (don’t paste!):
Sub UserReportQuery()
Dim UserInput As Long
Dim Answer As Integer
UserInput = vbYesNo
Answer = MsgBox(«Process the XYZ Report?», UserInput)
If Answer = vbYes Then ProcessReport
End Sub
Sub ProcessReport()
MsgBox («Thanks for processing the XYZ Report.»)
End Sub
Save and navigate back to the Developer tab of Excel and select the “Button” option. Click on a cell and assign the UserReportQuery macro to the button.
Now click the button. This message should display:
Click “yes” or hit Enter.
Once again, tada!
Please note that the secondary subroutine, ProcessReport, could be anything. I’ll demonstrate more possibilities in example #3. But first…
How is it doing that?
This example builds on the previous example and has quite a few new elements. Let’s go over the new stuff:
- Dim UserInput As Long: Dim is short for “dimension” and allows you to declare variable names. In this case, UserInput is the variable name and Long is the data type. In plain English, this line means “Here’s a variable called “UserInput”, and it’s a Long variable type.”
- Dim Answer As Integer: declares another variable called “Answer,” with a data type of Integer. Learn more about data types here.
- UserInput = vbYesNo: assigns a value to the variable. In this case, vbYesNo, which displays Yes and No buttons. There are many button types, learn more here.
- Answer = MsgBox(“Process the XYZ Report?”, UserInput): assigns the value of the variable Answer to be a MsgBox function and the UserInput variable. Yes, a variable within a variable.
- If Answer = vbYes Then ProcessReport: this is an “If statement,” a conditional statement, which allows us to say if x is true, then do y. In this case, if the user has selected “Yes,” then execute the ProcessReport subroutine.
When could I use this?
This could be used in many, many ways. The value and versatility of this functionality is more so defined by what the secondary subroutine does.
For example, maybe you have a file that is used to generate 3 different weekly reports. These reports are formatted in dramatically different ways.
- Problem: Each time one of these reports needs to be generated, a user opens the file and changes formatting and charts; so on and so forth. This file is being edited extensively at least 3 times per week, and it takes at least 30 minutes each time it’s edited.
- Solution: create 1 button per report type, which automatically reformats the necessary components of the reports and generates the necessary charts.
Real World Examples
- Create a dialog box for user to automatically populate certain information across multiple sheets
- Use the InputBox function to get information from the user, which is then populated across multiple sheets
Example #3: Add Numbers to a Range with a For-Next Loop
For loops are very useful if you need to perform repetitive tasks on a specific range of values — arrays or cell ranges. In plain English, a loop says “for each x, do y.”
In the VBA Editor, select Insert -> New Module
Write this code in the Module window (don’t paste!):
Sub LoopExample()
Dim X As Integer
For X = 1 To 100
Range(«A» & X).Value = X
Next X
End Sub
Save and navigate back to the Developer tab of Excel and select the Macros button. Run the LoopExample macro.
This should happen:
Etc, until the 100th row.
How is it doing that?
- Dim X As Integer: declares the variable X as a data type of Integer.
- For X = 1 To 100: this is the start of the For loop. Simply put, it tells the loop to keep repeating until X = 100. X is the counter. The loop will keep executing until X = 100, execute one last time, and then stop.
- Range(«A» & X).Value = X: this declares the range of the loop and what to put in that range. Since X = 1 initially, the first cell will be A1, at which point the loop will put X into that cell.
- Next X: this tells the loop to run again
When could I use this?
The For-Next loop is one of the most powerful functionalities of VBA; there are numerous potential use cases. This is a more complex example that would require multiple layers of logic, but it communicates the world of possibilities in For-Next loops.
Maybe you have a list of all products sold at your bakery in Column A, the type of product in Column B (cakes, donuts, or muffins), the cost of ingredients in Column C, and the market average cost of each product type in another sheet.
You need to figure out what should be the retail price of each product. You’re thinking it should be the cost of ingredients plus 20%, but also 1.2% under market average if possible. A For-Next loop would allow you to do this type of calculation.
Real World Examples
- Use a loop with a nested if statement to add specific values to a separate array only if they meet certain conditions
- Perform mathematical calculations on each value in a range, e.g. calculate additional charges and add them to the value
- Loop through each character in a string and extract all numbers
- Randomly select a number of values from an array
Conclusion
Now that we’ve talked about pizza and muffins and oh-yeah, how to write VBA code in Excel spreadsheets, let’s do a learning check. See if you can answer these questions.
- What is VBA?
- How do I get set up to start using VBA in Excel?
- Why and when would you use VBA?
- What are some problems I could solve with VBA?
If you have a fair idea of how to you could answer these questions, then this was successful.
Whether you’re an occasional user or a power user, I hope this tutorial provided useful information about what can be accomplished with just a bit of code in your Excel spreadsheets.
Happy coding!
Learning Resources
- Excel VBA Programming for Dummies, John Walkenbach
- Get Started with VBA, Microsoft Documentation
- Learning VBA in Excel, Lynda
A bit about me
I’m Chloe Tucker, an artist and developer in Portland, Oregon. As a former educator, I’m continuously searching for the intersection of learning and teaching, or technology and art. Reach out to me on Twitter @_chloetucker and check out my website at chloe.dev.
Learn to code for free. freeCodeCamp’s open source curriculum has helped more than 40,000 people get jobs as developers. Get started
Содержание
- 1 Excel VBA Macro script
- 2 Создаем собственную библиотеку Excel макросов — Personal.xlsb
-
- 2.0.1 Чуть-чуть лирики
- 2.0.2 Собственно, код
-
- 3 Что такое VBA
- 4 Объекты, коллекции, свойства и методы
- 5 Как начать
- 6 Макросы в Excel
- 7 Пример 1
- 8 Пример 2
- 9 Пример 3
- 10 Пример 4
-
- 10.0.1 Первый способ. Скрипт «от руки».
- 10.0.2 Второй способ. Скрипт продаж в офисных программах (Excel, Word и тд)
- 10.0.3 Третий способ. Специальные сервисы «Конструкторы скриптов продаж»
- 10.0.4 Полезные ссылки:
-
В процессе работы неоднократно приходиться сталкиваться с табличными процессорами типа Excel. И хотя это не совсем САПР, но информацию в рамках BIM контекста хочешь не хочешь, а приходится обрабатывать, либо с помощью Базы Данных, либо в тех самых экселевских табличках. А лучше и так и эдак.
Естественно, как и во всем, что связанно с компьютером эту деятельность тоже можно изрядно упростить с помощью автоматизации. С появлением таких вещей как Pivot Tables и Power Queries — так и вовсе становится не понятно как работали с информацией до этого. Но тут мы поговорим о старых добрых ламповых макросах на VBA.
Excel VBA Macro script
Макросы в экселе пишут на VBA (Visual Basic Advance) — слегка переработанный под нужды офисного пакета старый добрый Бейсик, со всеми своими достоинствами и недостатоками. Сами программы по умолчанию являются частью эксель файла. И убедится в этом можно с помощью соответствующей консоли (Microsoft Visual Basic for Application)
Добраться до них можно в любое время нажав сочетание клавишь Alt+F11
Но сначала надо включить вкладку Developers в стандартной ленте экселя.
Для этого:
- Ннаводим курсор на ленту и нажимаем Правую Клавишу Мыши (ПКМ)
- В открывшемся списке выбираем — Customize the Ribbon (Настройка Ленты)
- Ищем как показано на скриншоте пункт Developer (Разработка) и нажимаем чтобы появилась галочка
- Ок.
Путем этих не хитрых манипуляций мы получили доступ к панели разработчика в Excel — не будем особо заострять на ней внимание. Нам там понадобится буквально несколько кнопок
— Visual Basic — собственно уже обусжденная выше консоль для работы со скриптами.
— Macos — список доступных макросов для использования.
— Record Macro — эта кнопка позволяет включить запись ваших действий с табличным редактором.
Ну и дальше порядок работы довольно простой — запускаете запись макроса, производите необходимые манипуляции с данными, останавливаете запись (той же кнопкой что и включили), идете в редактор, правите если необходимо. Потом с помощью списка макросов вызываете вновь созданный макрос в любое удобное время.
Однако есть нюанс. Созданный макроскрипт будет по умолчанию доступен только в одном эксель файле. Скопировать его в другой — конечно можно, но довольно заморочно. Есть ли выход из этой ситуации? Конечно!
Создаем собственную библиотеку Excel макросов — Personal.xlsb
Для этого нам нужно создать файл Personal.xlsb. Создается он один раз, и потом автоматически подгружается Экселем, благодаря чему сохраненные в нем Скрипты и функции становятся доступны во всех ваших файлах. Другой плюс — теперь они не сохраняются в самих файлах, и соответственно можно без опаски передавать результаты за пределы компании.
Собственно смотрим на картинку:
1. Необходимо включить макрос на запись.
2. В появившемся окне в выпадающем списке выбрать пункт — Personal Macro Workbook. Если такого файла не существует — он будет создан автоматические (то что нам и нужно)
3. Запускаем скрипт на запись
4. И останавливаем её.
Готово. Теперь у нас есть файл в который наши модули и функции можно закинуть единожды, а доступны они будут сразу во всех эксель файлах. К тому же так они не утекут за пределы компании, вместе с файлами.
Небольшой топик-шпаргалка для быстрого написания скриптов для автоматической обработки документов ms office’а. А так же для помощи в преодолении синдрома чистого листа.
Как правильно заметили в недавнем топике, сама работа скрипта может быть и не быстрой, но чаще важнее сам результат, да и объёмы далеко не всегда такие большие. Зато Automation позволяет написать скрипт практически на любом языке. Здесь я выдам заготовки для JavaScript и IronPython, но, надеюсь, в комментариях найдётся место и для других языков (например, на PowerShell).
Чуть-чуть лирики
Для работы через automation нужен следующий минимум:
- MS Office (если есть документы, то он, видимо, есть/будет установлен)
- Интерпретатор выбранного языка (для JS, VBS и PowerShell этот пункт не актуален)
- Ещё раз MS Office для подглядывание за генерацией кода в VBA (в записываемых макросах)
Ещё раз повторюсь. Цель — быстро написать скрипт без сложных требований (производительность, встраивание, работа без ms office и т.п.).
Собственно, код
Имхо, самый разумный вариант — это JScript или VBScript (точнее Windows script host), т.к. интерпретатор уже идёт с операционной системой, и можно раздавать скрипт друзьям/коллегам, не требуя от них никаких дополнительных действий — перетащил xls(x)-файл на скрипт в explorer’е и работа пошла:
var excel = WScript.CreateObject("Excel.Application"); var fileName = WScript.Arguments.Item(0); try { main(); } catch(e) { // Чтобы процесс не завис в памяти delete excel; throw e; } function main() { //excel.Visible = true; // Иногда хочется поспать перед экраном, где что-то происходит, но так работает дольше //var book = excel.Workbooks.Add(); // Новая книга (создать) var book = excel.Workbooks.Open(fileName); // Старая книга var sheet = book.Worksheets.Item(1); // (в VBA нумерация с единицы) // Что-то делаем for (var i = 1; i Macros -> Record macro..., имя значения не имеет), открываем его код (View -> Macros -> View macros...) и делаем по образу и подобию. Сама запись макроса — просто набор действий, которые хочется автоматизировать. Например, вставить или изменить какое-то значение, поменять цвет/шрифт и т.п. Запись макроса лучше производить в отдельном документе, во избежание. Для лучшей ориентации в мире объектов объектном мире Excel — система классов (тоже самое, но для Office 2010). Небольшой бонус: константы для цветовых индексов. P.S. Где-то у меня был код для работы с Automation из C++, но это уже совсем другая история :)
Немногие знают, что первая версия популярного продукта Microsoft Excel появилась в 1985 году. С тех пор он пережил несколько модификаций и востребован у миллионов пользователей по всему миру. При этом многие работают лишь с малой толикой возможностей этого табличного процессора и даже не догадываются, как им могло бы облегчить жизнь умение программирования в Excel.
Что такое VBA
Программирование в Excel осуществляется посредством языка программирования Visual Basic for Application, который изначально встроен в самый известный табличный процессор от Microsoft.
К его достоинствам специалисты относят сравнительную легкость освоения. Как показывает практика, азами VBA могут овладеть даже пользователи, которые не имеют навыков профессионального программирования. К особенностям VBA относится выполнение скрипта в среде офисных приложений.
Недостатком программы являются проблемы, связанные с совместимостью различных версий. Они обусловлены тем, что код программы VBA обращается к функциональным возможностям, которые присутствуют в новой версии продукта, но отсутствуют в старой. Также к минусам относят и чрезмерно высокую открытость кода для изменения посторонним лицом. Тем не менее Microsoft Office, а также IBM Lotus Symphony позволяют пользователю применять шифрование начального кода и установку пароля для его просмотра.
Объекты, коллекции, свойства и методы
Именно с этими понятиями нужно разобраться тем, кто собирается работать в среде VBA. Прежде всего необходимо понять, что такое объект. В Excel в этом качестве выступают лист, книга, ячейка и диапазон. Данные объекты обладают специальной иерархией, т.е. подчиняются друг другу.
Главным из них является Application, соответствующий самой программе Excel. Затем следуют Workbooks, Worksheets, а также Range. Например, для обращения к ячейке A1 на конкретном листе следует указать путь с учетом иерархии.
Что касается понятия «коллекция», то это группа объектов того же класса, которая в записи имеет вид ChartObjects. Ее отдельные элементы также являются объектами.
Следующее понятие — свойства. Они являются необходимой характеристикой любого объекта. Например, для Range — это Value или Formula.
Методы — это команды, показывающие, что требуется сделать. При написании кода в VBA их необходимо отделять от объекта точкой. Например, как будет показано в дальнейшем, очень часто при программировании в «Эксель» используют команду Cells(1,1).Select. Она означает, что необходимо выбрать ячейку с координатами (1,1) т.е. A1.
Вместе с ней нередко используется Selection.ClearContents. Ее выполнение означает очистку содержимого выбранной ячейки.
Как начать
Прежде всего требуется создать файл и сохранить его, присвоив имя и выбрав тип «Книга Excel с поддержкой макросов».
Затем необходимо перейти в приложение VB, для чего достаточно воспользоваться комбинацией клавиш «Alt» и «F11». Далее:
- в строке меню, расположенном в верхней части окна, нажимают на иконку рядом с иконкой Excel;
- выбирают команду Mudule;
- сохраняют, нажав на иконку с изображением floppy disk;
- пишут, скажем так, набросок кода.
Он выглядит следующим образом:
Sub program ()
‘Наш код
End Sub
Обратите внимание, что строка «’Наш код» будет выделена другим цветом (зеленым). Причина в апострофе, поставленном в начале строки, который обозначает, что далее следует комментарий.
Теперь вы можете написать любой код и создать для себя новый инструмент в VBA Excel (примеры программ см. далее). Конечно, тем, кто знаком с азами Visual Basic, будет намного проще. Однако даже те, кто их не имеет, при желании смогут освоиться достаточно быстро.
За таким названием скрываются программы, написанные на языке Visual Basic for Application. Таким образом, программирование в Excel — это создание макросов с нужным кодом. Благодаря этой возможности табличный процессор Microsoft саморазвивается, подстраиваясь под требования конкретного пользователя. Разобравшись с тем, как создавать модули для написания макросов, можно приступать к рассмотрению конкретных примеров программ VBA Excel. Лучше всего начать с самых элементарных кодов.
Пример 1
Задача: написать программу, которая будет копировать значение содержимое одной ячейки и затем записывать в другую.
Для этого:
- открывают вкладку «Вид»;
- переходят на пиктограмму «Макросы»;
- жмут на «Запись макроса»;
- заполняют открывшуюся форму.
Для простоты в поле «Имя макроса» оставляют «Макрос1», а в поле «Сочетание клавиш» вставляют, например, hh (это значит, что запустить программку можно будет блиц-командой «Ctrl+h»). Нажимают Enter.
Теперь, когда уже запущена запись макроса, производят копирование содержимого какой-либо ячейки в другую. Возвращаются на исходную пиктограмму. Нажимают на «Запись макроса». Это действие означает завершение программки.
Далее:
- вновь переходят на строку «Макросы»;
- в списке выбирают «Макрос 1»;
- нажимают «Выполнить» (то же действие запускается начатием сочетания клавиш «Ctrl+hh»).
В результате происходит действие, которое было осуществлено в процессе записи макроса.
Имеет смысл увидеть, как выглядит код. Для этого вновь переходят на строку «Макросы» и нажимают «Изменить» или «Войти». В результате оказываются в среде VBA. Собственно, сам код макроса находится между строками Sub Макрос1() и End Sub.
Если копирование было выполнено, например, из ячейки А1 в ячейку C1, то одна из строк кода будет выглядеть, как Range(“C1”).Select. В переводе это выглядит, как «Диапазон(“C1”).Выделить», иными словами осуществляет переход в VBA Excel, в ячейку С1.
Активную часть кода завершает команда ActiveSheet.Paste. Она означает запись содержания выделенной ячейки (в данном случае А1) в выделенную ячейку С1.
Пример 2
Циклы VBA помогают создавать различные макросы в Excel.
Циклы VBA помогают создавать различные макросы. Предположим, что имеется функция y=x + x2 + 3×3 – cos(x). Требуется создать макрос для получения ее графика. Сделать это можно только, используя циклы VBA.
За начальное и конечное значение аргумента функции берут x1=0 и x2=10. Кроме того, необходимо ввести константу — значение для шага изменения аргумента и начальное значение для счетчика.
Все примеры макросов VBA Excel создаются по той же процедуре, которая представлена выше. В данном конкретном случае код выглядит, как:
Sub programm()
x1 = 1
x2 = 10
shag = 0.1
i = 1
Do While x1 < x2 (цикл будет выполняться пока верно выражение x1 < x2)
y=x1 + x1^2 + 3*x1^3 – Cos(x1)
Cells(i, 1).Value = x1 (значение x1 записывается в ячейку с координатами (i,1))
Cells(i, 2).Value = y (значение y записывается в ячейку с координатами (i,2))
i = i + 1 (действует счетчик);
x1 = x1 + shag (аргумент изменяется на величину шага);
Loop
End Sub.
В результате запуска данного макроса в «Эксель» получаем два столбца, в первом из которых записаны значения для x, а во втором — для y.
Затем по ним строится график способом, стандартным для «Эксель».
Пример 3
Для реализации циклов в VBA Excel 2010, как и в других версиях, наряду с уже приведенной конструкцией Do While используется For.
Рассмотрим программу, которая создаст столбец. В каждой его ячейке будут записаны квадраты номера соответствующей строки. Использование конструкции For позволит записать ее очень коротко, без использования счетчика.
Сначала нужно создать макрос, как описано выше. Далее записываем сам код. Считаем, что нас интересуют значения для 10 ячеек. Код выглядит следующим образом.
For i = 1 to 10 Next
Команда переводится на «человеческий» язык, как «Повторять от 1 до 10 с шагом один».
Если ставится задача получить столбец с квадратами, например, всех нечетных чисел из диапазона от 1 до 11, то пишем:
For i = 1 to 10 step 1 Next.
Здесь step — шаг. В данном случае он равен двум. По умолчанию отсутствие этого слова в цикле означает, что шаг единичный.
Полученные результаты нужно сохранять в ячейки с номером (i,1). Тогда при каждом запуске цикла с увеличением i на величину шага автоматически будет расти и номер у строки. Таким образом, произойдет оптимизация кода.
В целом код будет выглядеть, как:
Sub program()
For i = 1 To 10 Step 1 (можно записать просто For i = 1 To 10)
Cells(i, 1).Value = i ^ 2 (т.е. в ячейку (i,1) записывается значение квадрата i)
Next (в некотором смысле играет роль счетчика и означает еще один запуск цикла)
End Sub.
Если все сделано правильно, в том числе запись и запуск макроса (см. инструкцию выше), то при его вызове каждый раз будет получаться столбец заданного размера (в данном случае состоящий из 10 ячеек).
Пример 4
В повседневной жизни сплошь и рядом возникает необходимость принять то или иное решение в зависимости от какого-то условия. Не обойтись без них и в VBA Excel. Примеры программ, где дальнейший ход выполнения алгоритма выбирается, а не предопределен изначально, чаще всего используют конструкцию If …Then (для сложных случаев) If …Then …END If.
Рассмотрим конкретный случай. Предположим, необходимо создать макрос для «Эксель», чтобы в ячейку с координатами (1,1) было записано:
1, если аргумент положительный;
0, если аргумент нулевой;
-1, если аргумент отрицательный.
Создание такого макроса для «Эксель» начинается стандартным способом, через использование «горячих» клавиш Alt и F11. Далее записывается следующий код:
Sub program()
x= Cells(1, 1).Value (эта команда присваивает x значение содержимого ячейки с координатами (1, 1))
If x>0 Then Cells(1, 1).Value = 1
If x=0 Then Cells(1, 1).Value = 0
If x
09 Мар 3 способа написать и оформить скрипт продаж
Давайте разберемся, как обычно создаются скрипты продаж?
В своей практике я обычно сталкиваюсь с 3 способами написания и оформления скриптов продаж. Давайте по порядку рассмотрим эти способы. Напишите в комментариях, используете ли Вы скрипты продаж и, если ДА, то каким именно способом Вы это делаете.
Первый способ. Скрипт «от руки».
Вы можете написать скрипт продаж (или хотя бы примерный сценарий общения с клиентом) на листочке, положить перед собой и использовать его как шпаргалку во время разговора с клиентом.
Это может выглядеть так:
Никаких затрат с Вашей стороны.
Но и эффективность таких скриптов оставляет желать лучшего:
- здесь не предусмотрены различные сценарии разговора и не прописана отработка возражений (а если прописать, это займет много места и затруднит использование скрипта);
- пользоваться таким скриптом может, пожалуй, только тот, кто его написал. Его сложно тиражировать на новых сотрудников;
- нет системного подхода к телефонным продажам, о котором я рассказываю на онлайн-тренинге 10 звонков — 10 продаж.
Этот способ может быть уместен, когда Вы делаете разовые звонки каким-то клиентам и, чтобы ничего не упустить, тезисно выписываете содержание разговора.
К сожалению, такой способ часто используется во многих компаниях малого и среднего бизнеса. Обычно это бывает, когда система телефонных продаж не настроена и менеджеры делают звонки как умеют и используют те инструменты, которые знают :-).
Второй способ. Скрипт продаж в офисных программах (Excel, Word и тд)
Более продвинутый и системный подход к внедрению скриптов продаж — это составление и использование скриптов в офисных программах, таких как Excel или Word (или аналогичных).
Вы можете прописать все возможные варианты возражений и отговорок клиентов, свою аргументацию и способы мотивации клиента принимать решение «здесь и сейчас» в одном файле, а потом с помощью создания гиперссылок автоматизировать скрипт.
В этом случае менеджеру будет удобно им пользоваться: услышал возражение — нажал на ссылку в скрипте — на экране появился ответ на это возражение.
Именно такой принцип создания скриптов я использовал в курсе Конструктор скриптов продаж. Я разобрал не только фразы и речевые обороты, которые повышают конверсию звонков, но и показал, как автоматизировать скрипт в обычном экселе.
Плюсы этого подхода в том, что Вам не нужно платить ежемесячную абонентскую плату за пользование сервисами. Скорее всего, у Вас и так есть Excel или Word — а это значит, что Вы можете один раз составить скрипт и начать использовать его всем отделом продаж.
Минусы — нет интеграции с CRM системами и телефонией.
Третий способ. Специальные сервисы «Конструкторы скриптов продаж»
В последнее время популярность набирают специальные сервисы, которые позволяют конструировать скрипты продаж. Обычно это происходит через веб-интерфейс.
Вы заходите на сайт сервиса — регистрируетесь — начинаете рисовать свой скрипт продаж.
Это может выглядеть вот так:
Возможно, картинка выглядит сложно, но на самом деле процесс создания скриптов продаж достаточно комфортен и позволяет даже новичку легко сориентироваться.
При использовании скрипта экран выглядит гораздо проще: есть фраза менеджера, есть варианты ответов клиентов. Менеджер слушает и нажимает на нужную кнопку.
Я протестировал некоторые сервисы конструкторы скриптов продаж и сделал для себя определенные выводы. В следующей статье я поделюсь с Вами и сделаю обзор некоторых сервисов по созданию скриптов, которые мне больше понравились.
Преимуществами таких сервисов, на мой взгляд, являются
- удобство создания скриптов (все наглядно, скрипт в буквальном смысле можно рисовать);
- удобство использования скриптов сотрудниками (даже новичок может легко сориентироваться);
- продвинутая аналитика работы со скриптом (Вы сможете отслеживать, на каком этапе чаще всего заканчивается разговор с клиентом, какие возражения вызывают затруднения, какая конверсия звонков у каждого сотрудника);
- интеграция с CRM системами и телефонией (многие конструкторы скриптов это поддерживают).
Как Вы понимаете, за такие удобства нужно платить. Обычно взимается ежемесячная абонентская плата за каждого менеджера, который пользуется системой.
В следующих статьях поподробнее расскажу о конструкторах скриптов продаж.
Напишите в комментариях, какими способами пользуетесь Вы в своей работе.
С уважением, Олег (дружить в ВК, инстаграм)
Полезные ссылки:
- 5 способов больше продавать по телефону — полезная статья с конкретными рекомендациями
- Видеокурс «Конструктор скриптов телефонных продаж» — это целый комплект материалов, подготовленный с одной целью — чтобы Вы могли за несколько часов создать полноценный скрипт продаж с учетом особенностей Вашего бизнеса.
- Видеокурс «Клоузер: всегда закрывай сделку» — система закрытия сделок и более 40 мощных техник помогут Вам закрывать больше сделок в любом бизнесе — от мелкой розницы до крупных корпоративных продаж.
- Бесплатный курс «Быстрый старт в продажах» — даже если Вы новичок в продажах, курс поможет Вам привлечь новых клиентов уже в течение 1 недели, построить системную работу и повысить профессионализм в области продаж.
- Бесплатный аудит Ваших продаж! Начните с аудита Ваших продаж! Это бесплатно и полезно. Я проверю более 50 точек роста Ваших продаж и вышлю Вам PDF отчет по результатам аудита в течение 5 дней.
- Youtube канал «ПораРасти» – подписывайтесь сейчас, чтобы получать доступ к новым материалам первыми;
- Группа в ВК «ПораРасти» – сообщество для тех, кто хочет продавать красиво и легко, развивать собственный бизнес, приносить людям реальную пользу, а не заниматься впариванием. Присоединяйтесь сейчас! Здесь много бесплатных материалов, PDF и т.д.
Введение
Всем нам приходится — кому реже, кому чаще — повторять одни и те же действия и операции в Excel. Любая офисная работа предполагает некую «рутинную составляющую» — одни и те же еженедельные отчеты, одни и те же действия по обработке поступивших данных, заполнение однообразных таблиц или бланков и т.д. Использование макросов и пользовательских функций позволяет автоматизировать эти операции, перекладывая монотонную однообразную работу на плечи Excel. Другим поводом для использования макросов в вашей работе может стать необходимость добавить в Microsoft Excel недостающие, но нужные вам функции. Например функцию сборки данных с разных листов на один итоговый лист, разнесения данных обратно, вывод суммы прописью и т.д.
Макрос — это запрограммированная последовательность действий (программа, процедура), записанная на языке программирования Visual Basic for Applications (VBA). Мы можем запускать макрос сколько угодно раз, заставляя Excel выполнять последовательность любых нужных нам действий, которые нам не хочется выполнять вручную.
В принципе, существует великое множество языков программирования (Pascal, Fortran, C++, C#, Java, ASP, PHP…), но для всех программ пакета Microsoft Office стандартом является именно встроенный язык VBA. Команды этого языка понимает любое офисное приложение, будь то Excel, Word, Outlook или Access.
Способ 1. Создание макросов в редакторе Visual Basic
Для ввода команд и формирования программы, т.е. создания макроса необходимо открыть специальное окно — редактор программ на VBA, встроенный в Microsoft Excel.
- В старых версиях (Excel 2003 и старше) для этого идем в меню Сервис — Макрос — Редактор Visual Basic (Toos — Macro — Visual Basic Editor).
- В новых версиях (Excel 2007 и новее) для этого нужно сначала отобразить вкладку Разработчик (Developer). Выбираем Файл — Параметры — Настройка ленты (File — Options — Customize Ribbon) и включаем в правой части окна флажок Разработчик (Developer). Теперь на появившейся вкладке нам будут доступны основные инструменты для работы с макросами, в том числе и нужная нам кнопка Редактор Visual Basic (Visual Basic Editor)
:
К сожалению, интерфейс редактора VBA и файлы справки не переводятся компанией Microsoft на русский язык, поэтому с английскими командами в меню и окнах придется смириться:
Макросы (т.е. наборы команд на языке VBA) хранятся в программных модулях. В любой книге Excel мы можем создать любое количество программных модулей и разместить там наши макросы. Один модуль может содержать любое количество макросов. Доступ ко всем модулям осуществляется с помощью окна Project Explorer в левом верхнем углу редактора (если его не видно, нажмите CTRL+R). Программные модули бывают нескольких типов для разных ситуаций:
- Обычные модули — используются в большинстве случаев, когда речь идет о макросах. Для создания такого модуля выберите в меню Insert — Module. В появившееся окно нового пустого модуля можно вводить команды на VBA, набирая их с клавиатуры или копируя их из другого модуля, с этого сайта или еще откуда нибудь:
- Модуль Эта книга — также виден в левом верхнем углу редактора Visual Basic в окне, которое называется Project Explorer. В этот модуль обычно записываются макросы, которые должны выполнятся при наступлении каких-либо событий в книге (открытие или сохранение книги, печать файла и т.п.):
- Модуль листа — доступен через Project Explorer и через контекстное меню листа, т.е. правой кнопкой мыши по ярлычку листа — команда Исходный текст (View Source). Сюда записывают макросы, которые должны выполняться при наступлении определенных событий на листе (изменение данных в ячейках, пересчет листа, копирование или удаление листа и т.д.)
Обычный макрос, введенный в стандартный модуль выглядит примерно так:
Давайте разберем приведенный выше в качестве примера макрос Zamena:
- Любой макрос должен начинаться с оператора Sub, за которым идет имя макроса и список аргументов (входных значений) в скобках. Если аргументов нет, то скобки надо оставить пустыми.
- Любой макрос должен заканчиваться оператором End Sub.
- Все, что находится между Sub и End Sub — тело макроса, т.е. команды, которые будут выполняться при запуске макроса. В данном случае макрос выделяет ячейку заливает выделенных диапазон (Selection) желтым цветом (код = 6) и затем проходит в цикле по всем ячейкам, заменяя формулы на значения. В конце выводится окно сообщения (MsgBox).
С ходу ясно, что вот так сразу, без предварительной подготовки и опыта в программировании вообще и на VBA в частности, сложновато будет сообразить какие именно команды и как надо вводить, чтобы макрос автоматически выполнял все действия, которые, например, Вы делаете для создания еженедельного отчета для руководства компании. Поэтому мы переходим ко второму способу создания макросов, а именно…
Способ 2. Запись макросов макрорекордером
Макрорекордер — это небольшая программа, встроенная в Excel, которая переводит любое действие пользователя на язык программирования VBA и записывает получившуюся команду в программный модуль. Если мы включим макрорекордер на запись, а затем начнем создавать свой еженедельный отчет, то макрорекордер начнет записывать команды вслед за каждым нашим действием и, в итоге, мы получим макрос создающий отчет как если бы он был написан программистом. Такой способ создания макросов не требует знаний пользователя о программировании и VBA и позволяет пользоваться макросами как неким аналогом видеозаписи: включил запись, выполнил операци, перемотал пленку и запустил выполнение тех же действий еще раз. Естественно у такого способа есть свои плюсы и минусы:
- Макрорекордер записывает только те действия, которые выполняются в пределах окна Microsoft Excel. Как только вы закрываете Excel или переключаетесь в другую программу — запись останавливается.
- Макрорекордер может записать только те действия, для которых есть команды меню или кнопки в Excel. Программист же может написать макрос, который делает то, что Excel никогда не умел (сортировку по цвету, например или что-то подобное).
- Если во время записи макроса макрорекордером вы ошиблись — ошибка будет записана. Однако смело можете давить на кнопку отмены последнего действия (Undo) — во время записи макроса макрорекордером она не просто возрвращает Вас в предыдущее состояние, но и стирает последнюю записанную команду на VBA.
Чтобы включить запись необходимо:
- в Excel 2003 и старше — выбрать в меню Сервис — Макрос — Начать запись (Tools — Macro — Record New Macro)
- в Excel 2007 и новее — нажать кнопку Запись макроса (Record macro) на вкладке Разработчик (Developer)
Затем необходимо настроить параметры записываемого макроса в окне Запись макроса:
- Имя макроса — подойдет любое имя на русском или английском языке. Имя должно начинаться с буквы и не содержать пробелов и знаков препинания.
- Сочетание клавиш — будет потом использоваться для быстрого запуска макроса. Если забудете сочетание или вообще его не введете, то макрос можно будет запустить через меню Сервис — Макрос — Макросы — Выполнить (Tools — Macro — Macros — Run) или с помощью кнопки Макросы (Macros) на вкладке Разработчик (Developer) или нажав ALT+F8.
- Сохранить в… — здесь задается место, куда будет сохранен текст макроса, т.е. набор команд на VBA из которых и состоит макрос.:
- Эта книга — макрос сохраняется в модуль текущей книги и, как следствие, будет выполнятся только пока эта книга открыта в Excel
- Новая книга — макрос сохраняется в шаблон, на основе которого создается любая новая пустая книга в Excel, т.е. макрос будет содержаться во всех новых книгах, создаваемых на данном компьютере начиная с текущего момента
- Личная книга макросов — это специальная книга Excel с именем Personal.xls, которая используется как хранилище макросов. Все макросы из Personal.xls загружаются в память при старте Excel и могут быть запущены в любой момент и в любой книге.
После включения записи и выполнения действий, которые необходимо записать, запись можно остановить командой Остановить запись (Stop Recording).
Запуск и редактирование макросов
Управление всеми доступными макросами производится в окне, которое можно открыть с помощью кнопки Макросы (Macros) на вкладке Разработчик (Developer) или — в старых версиях Excel — через меню Сервис — Макрос — Макросы (Tools — Macro — Macros):
- Любой выделенный в списке макрос можно запустить кнопкой Выполнить (Run).
- Кнопка Параметры (Options) позволяет посмотреть и отредактировать сочетание клавиш для быстрого запуска макроса.
- Кнопка Изменить (Edit) открывает редактор Visual Basic (см. выше) и позволяет просмотреть и отредактировать текст макроса на VBA.
Создание кнопки для запуска макросов
Чтобы не запоминать сочетание клавиш для запуска макроса, лучше создать кнопку и назначить ей нужный макрос. Кнопка может быть нескольких типов:
Кнопка на панели инструментов в Excel 2003 и старше
Откройте меню Сервис — Настройка (Tools — Customize) и перейдите на вкладку Команды (Commands). В категории Макросы легко найти веселый желтый «колобок» — Настраиваемую кнопку (Custom button):
Перетащите ее к себе на панель инструментов и затем щелкните по ней правой кнопкой мыши. В контекстом меню можно назначить кнопке макрос, выбрать другой значок и имя:
Кнопка на панели быстрого доступа в Excel 2007 и новее
Щелкните правой кнопкой мыши по панели быстрого доступа в левом верхнем углу окна Excel и выберите команду Настройка панели быстрого доступа (Customise Quick Access Toolbar):
Затем в открывшемся окне выберите категорию Макросы и при помощи кнопки Добавить (Add) перенесите выбранный макрос в правую половину окна, т.е. на панель быстрого доступа:
Кнопка на листе
Этот способ подходит для любой версии Excel. Мы добавим кнопку запуска макроса прямо на рабочий лист, как графический объект. Для этого:
- В Excel 2003 и старше — откройте панель инструментов Формы через меню Вид — Панели инструментов — Формы (View — Toolbars — Forms)
- В Excel 2007 и новее — откройте выпадающий список Вставить (Insert) на вкладке Разработчик (Developer)
Выберите объект Кнопка (Button):
Затем нарисуйте кнопку на листе, удерживая левую кнопку мыши. Автоматически появится окно, где нужно выбрать макрос, который должен запускаться при щелчке по нарисованной кнопке.
Создание пользовательских функций на VBA
Создание пользовательских функций или, как их иногда еще называют, UDF-функций (User Defined Functions) принципиально не отличается от создания макроса в обычном программном модуле. Разница только в том, что макрос выполняет последовательность действий с объектами книги (ячейками, формулами и значениями, листами, диаграммами и т.д.), а пользовательская функция — только с теми значениями, которые мы передадим ей как аргументы (исходные данные для расчета).
Чтобы создать пользовательскую функцию для расчета, например, налога на добавленную стоимость (НДС) откроем редактор VBA, добавим новый модуль через меню Insert — Module и введем туда текст нашей функции:
Обратите внимание, что в отличие от макросов функции имеют заголовок Function вместо Sub и непустой список аргументов (в нашем случае это Summa). После ввода кода наша функция становится доступна в обычном окне Мастера функций (Вставка — Функция) в категории Определенные пользователем (User Defined):
После выбора функции выделяем ячейки с аргументами (с суммой, для которой надо посчитать НДС) как в случае с обычной функцией:
На чтение 5 мин. Просмотров 20.7k.
Содержание
- Что такое VBA?
- Программирование объектов в VBA — свойства и методы
- Объекты, свойства и методы
- Что дальше?
Visual Basic for Application (VBA) — это язык программирования, который мы используем при написании макросов в Excel (и других программах Office). Написал макрос, запустил и сэкономил время на скучных повторяющихся задачах. Начать лучше с автоматизации небольших задач. Потом уже, набив руку, писать целые приложения и надстройки.
Когда в первый раз в жизни видишь код VBA, то становится дурно. Ничего не понятно. Но на самом деле любой VBA код не так сложно прочитать. Надо просто смотреть не на весь код сразу, а двигаться по строчкам и пытаться понять что делает каждая команда. Минимальных знаний английского хватит.
Программирование объектов в VBA — свойства и методы
VBA — это объектно-ориентированный язык программирования. Мы пишем код, который манипулирует объектами в Excel.
Объекты — это практически все, что вы можете себе представить в Excel: таблицы, диапазоны, диаграммы, сводные таблицы и т.д.
При написании кода VBA мы может читать/записывать свойства объектов или выполнять действия (методы) над объектами.
Посмотрите на примеры ниже и попробуйте догадаться что делает каждая из команд. Далее я расскажу что каждая из команд делает
i = Worksheets.Count Range("A1"). Copy Range("D1") Range("A1").Value = 6000 Workbook("Бюджет.xls").Save MsgBox(Worksheets(2).Name) ActiveWorkbook.Close Worksheets("Лист1").Name="Отчет" Range("А1").Font.Size = 20 Worksheets.Add Worksheets("Лист5").Delete
Ещё одно понятие, с которым вы должны познакомиться — это объектная модель Excel. Это библиотека всех объектов в Excel. Как вы можете себе представить, это огромная библиотека!
Каждый объект имеет свои собственные свойства и методы, которые мы можем использовать. Есть три основных вещи, которые мы можем сделать со свойствами и методами.
# 1 — Чтение свойств
Мы можем получить информацию из Excel, читая свойства объектов. Это похоже на задание вопросов о текущей книге, листе и т.д.
Вот несколько примеров:
i = Worksheets.Count '(1) передаём переменной i кол-во листов в файле MsgBox(Worksheets(2).Name) ' (2) показываем сообщение с именем 2-го листа
- Worksheets.Count — возвращает количество листов в активной книге.
- Worksheets(2).Name — возвращает имя второго по счёту листа в активном Excel-файле
# 2 — Написать свойства
Мы также можем установить или изменить свойства объектов в Excel. Обычно это делается с помощью знака равенства «=» в VBA.
Вот несколько примеров:
Range("A1").Value = 6000 Worksheets("Лист1").Name="Отчет" Range("А1").Font.Size = 20
- Range(«A1»).Value = 6000 — изменяет значение в ячейке А1 на 6000.
- Worksheets(«Лист1″).Name=»Отчет» — изменяет имя Лист1 в активном Excel-файле на «Отчет»
- Range(«А1»).Font.Size = 20 — изменяет размер шрифта в ячейке А1 на 20.
# 3 — Выполнять действия с методами
Методы — это действия, которые можно выполнить с объектом.
Обычно это действия, которые вы выполняете в Excel, нажимая кнопку меню или
сочетание клавиш. Вот несколько примеров.
Range("A1"). Copy Range("D1") Workbook("Бюджет.xls").Save ActiveWorkbook.Close Worksheets.Add Worksheets("Лист5").Delete
- Range («A1»). Copy Range («D1») — копирует ячейку A1 и вставляет ее в ячейку D1
- Workbook(«Бюджет.xls»).Save — сохраняет файл Бюджет.
- ActiveWorkbook.Close — закрывает активную книгу.
- Worksheets.Add — добавляет рабочий лист перед активным листом (аналогично сочетанию клавиш Shift + F11)
- Worksheets(«Лист5»).Delete — удаляет Лист5 из активного Excel файла
Большинство свойств и методов содержат дополнительные параметры, которые вы можете указать для настройки вашего запроса. Оглядываясь назад на пример резки картофеля, моя жена хотела кубики 1/2 дюйма, поэтому я указал это при использовании метода вырезания.
Когда мы используем метод Worksheets.Add в Excel для добавления листа, метод Add имеет необязательные аргументы или параметры, которые можно указать, чтобы сообщить VBA: где разместить новый лист, сколько листов для вставки и какой тип листа.
Вы также
можете нажать Ctrl + I, чтобы вызвать это информационное окно с параметрами.
Объекты, свойства и методы
Объектная модель Excel — это огромная библиотека. Я кодирую VBA 10 лет и до сих пор не знаю всего. Я, вероятно, никогда не буду. Но легко получить помощь и узнать об объектах, которые вы хотите использовать.
Поместите текстовый курсор в любое свойство или метод и
нажмите клавишу F1 на клавиатуре, чтобы просмотреть страницу справки для этого
элемента. Это отличный способ увидеть все параметры и узнать больше о VBA.
Вот ссылка на страницу справки для Sheets.Add Method
Кстати, сочетание клавиш для открытия редактора VB — Alt +
F11. Нажмите Alt + F11 (Function + Option + F11 на Mac 2011) в любом месте
Excel, чтобы открыть редактор VB и просмотреть модули кода.
Что дальше?
В следующей статье мы рассмотрим иерархию объектов Excel и узнаем, что означают точки между словами. Покажу как лучше всего ссылаться на эти объекты, чтобы у вас не было ошибок и проблем
Читайте следующую статью:
Введение в VBA: Объектная модель VBA (Часть 2 из 3)
VBA Excel: примеры программ. Макросы в Excel
Смотрите такжеСервис — НастройкаМакрорекордер записывает только те нам кнопкаDim могут оказаться неверными упомянуть ещё одинВозвращает верхний индекс измеренияInStr(1, «Вот искомое слово»,оба равныSubSub взглянуть на особенностиКроме того, полный список в описании формата. от 1 до приступать к рассмотрениюНемногие знают, что первая
Что такое VBA
(Tools — Customize) действия, которые выполняютсяРедактор Visual Basicможно использовать ключевое и неожиданными, а очень важный момент. заданного массива.
«слово»)Trueключевое слово не, то в выделенном и отличия этих встроенных функций VBAи пр. 11, то пишем: конкретных примеров программ версия популярного продуктаи перейдите на
в пределах окна(Visual Basic Editor) слово найти причину ошибок Если мы объявляемПримечание:возвращает число 13., в противном случае вставлено, то по диапазоне ячеек будет двух типов процедур. с примерами можноИзучение свойств этих функцийFor i = 1 VBA Excel. Лучше Microsoft Excel появилась вкладку Microsoft Excel. Как:Private будет гораздо сложнее.Возможно переменную, но не
Объекты, коллекции, свойства и методы
Для многомерных массивовInStr(14, «Вот искомое слово, возвратит умолчанию для процедуры установлен размер шрифта, Далее приведены краткие найти на сайте и их применение to 10 step всего начать с в 1985 году.Команды (Commands) только вы закрываете
К сожалению, интерфейс редактора, которое укажет на также, что макрос присваиваем ей какое-либо в качестве необязательного а вот ещеFalse устанавливается свойство заданный пользователем. обсуждения процедур VBA
Visual Basic Developer позволит значительно расширить 1 Next. самых элементарных кодов. С тех пор. В категории Excel или переключаетесь VBA и файлы
то, что данная будет «успешно» выполнен. значение, то она аргумента может быть искомое слово», «слово»).
PublicСледующая процедура похожа наFunction Centre. сферу применения «Эксель».Здесь step — шаг.Задача: написать программу, которая он пережил несколькоМакросы в другую программу справки не переводятся переменная предназначена для В результате ошибка инициализируется значением по указано, индекс какого
возвращает число 38.Or(то есть она только что рассмотренную,
Как начать
иВ Excel Visual BasicПопробуем перейти к решению В данном случае будет копировать значение модификаций и востребован
легко найти веселый — запись останавливается. компанией Microsoft на использования только в останется незамеченной и
- умолчанию: именно измерения нужоПримечание:Операция дизъюнкции, логический оператор будет доступна везде
- но на этот
- Sub набор команд, выполняющий более сложных задач.
- он равен двум. содержимое одной ячейки
у миллионов пользователей
желтый «колобок» -
Макрорекордер может записать только
русский язык, поэтому
текущем модуле. работа продолжится с• текстовые строки возвратить. Если неАргумент-число может бытьИЛИ в данном проекте раз, вместо изменения
и показаны простые определённую задачу, помещается Например: По умолчанию отсутствие и затем записывать по всему миру.Настраиваемую кнопку те действия, для с английскими командамиДля объявления констант также неверными данными! — инициализируются пустыми указано, то по не задан, в
Макросы в Excel
. Например, выражение VBA). В этом размера, применяется полужирное примеры. в процедуруДан бумажный документ отчета этого слова в в другую. При этом многие(Custom button) которых есть команды в меню и можно использовать ключевыеВ связи с этим, строками; умолчанию равно 1. таком случае поискA Or B состоит отличие от начертание шрифта в
Пример 1
Редактор VBA распознаёт процедуруFunction фактического уровня издержек цикле означает, чтоДля этого:
работают лишь с
- :
- меню или кнопки
- окнах придется смириться:
- слова
неверный тип данных• числа —Year начинается с первоговозвратит объявления переменных, которые выделенном диапазоне ячеек.Function(Функция) или
предприятия. Требуется: шаг единичный.открывают вкладку «Вид»; малой толикой возможностейПеретащите ее к себе в Excel. ПрограммистМакросы (т.е. наборы командPublic желательно обнаруживать и
значением 0;
- Возвращает целое число, соответствующее символа строки, заданной
- True по умолчанию бывают
- Это пример процедуры, когда встречает группуSub
разработать его шаблонную частьПолученные результаты нужно сохранятьпереходят на пиктограмму «Макросы»; этого табличного процессора
на панель инструментов же может написать на языке VBA)и как можно раньше• переменные типа году в заданной во втором аргументе, еслиPrivateSub команд, заключённую между
(Подпрограмма). Главное отличие посредством табличного процессора в ячейки сжмут на «Запись макроса»; и даже не и затем щелкните макрос, который делает хранятся в программныхPrivate исправлять такие ошибкиBoolean дате.Пример:
функции.A., которой не передаются вот такими открывающим между процедурами «Эксель»;
Пример 2
номером (i,1). Тогдазаполняют открывшуюся форму. догадываются, как им
по ней правой то, что Excel модулях. В любой, но не вместо в коде. По— False;Year(«29/01/2015»)IntилиЕсли нужно завершить выполнение
никакие аргументы: и закрывающим операторами:Functionсоставить программу VBA, которая при каждом запускеДля простоты в поле могло бы облегчить кнопкой мыши. В никогда не умел
книге Excel мы ключевого слова этим причинам при• даты —возвращает значение 2015.Возвращает целую часть заданногоB
VBA процедуры
Sub Format_Centered_And_Bold() Selection.HorizontalAlignment
Function … End
и
будет запрашивать исходные
цикла с увеличением «Имя макроса» оставляют жизнь умение программирования контекстом меню можно (сортировку по цвету,
можем создать любоеConst
написании макроса VBA 30 декабря 1899.Данный список включает в числа.
равныFunction = xlCenter Selection.VerticalAlignment Function
Sub данные для ее
i на величину «Макрос1», а в в Excel.
назначить кнопке макрос,
например или что-то
количество программных модулей, а вместе с рекомендуется объявлять всеПрежде чем использовать переменную себя только избранныеПример:Trueили
= xlCenter Selection.Font.BoldКак упоминалось ранее, процедурасостоит в том,
Пример 3
заполнения, осуществлять необходимые шага автоматически будет поле «Сочетание клавиш»Программирование в Excel осуществляется выбрать другой значок подобное). и разместить там
ним. переменные. или константу, её наиболее часто употребляемыеInt(5.79), и возвратитSub = True EndFunction
что процедура расчеты и заполнять расти и номер вставляют, например, hh посредством языка программирования и имя:Если во время записи наши макросы. Один
В следующих примерах показаноОператор
нужно объявить. Для встроенные функции Excelвозвращает результат 5.False, не дожидаясь её
Subв VBA (вFunction ими соответствующие ячейки у строки. Таким (это значит, что
Visual Basic forКнопка на панели быстрого макроса макрорекордером вы
модуль может содержать использование ключевых словOption Explicit этого в макрос Visual Basic. ИсчерпывающийIsdate, если
естественного финала, тоЧтобы вызвать VBA процедуру отличие отвозвращает результат, процедура шаблона. образом, произойдет оптимизация запустить программку можно Application, который изначально доступа в Excel ошиблись — ошибка любое количество макросов.
Publicзаставляет объявлять все
добавляют вот такую
список функций VBA,ВозвращаетA для этого существуютSubSub
SubРассмотрим один из вариантов кода. будет блиц-командой «Ctrl+h»). встроен в самый
2007 и новее будет записана. Однако Доступ ко всеми
переменные, которые будут
простую строку кода: доступных для использованияTrueи операторыиз другой VBA), возвращает значение. Для– нет. решения.В целом код будет Нажимают Enter.
Пример 4
известный табличный процессорЩелкните правой кнопкой мыши смело можете давить модулям осуществляется сPrivate использованы в кодеDim в макросах Excel,, если заданное значениеBExit Function процедуры, нужно записать возвращаемых значений действуютПоэтому, если требуется выполнитьВсе действия осуществляются на выглядеть, как:Теперь, когда уже запущена
от Microsoft. по панели быстрого на кнопку отмены помощью окна Projectв применении к VBA, и при
Имя_Переменной
можно найти на
является датой, или
оба равныи ключевое слово следующие правила: действия и получить стандартном листе в
Sub program()
запись макроса, производятК его достоинствам специалисты доступа в левом последнего действия (Undo) Explorer в левом
переменным и к компиляции выделяет все
As сайте Visual Basic
False
False
Exit SubCallТип данных возвращаемого значения какой-то результат (например,
Функции VBA
Excel. Резервируются свободныеFor i = 1 копирование содержимого какой-либо относят сравнительную легкость верхнем углу окна — во время верхнем углу редактора константам. не объявленные переменныеТип_Данных Developer Center.– если датой.. Применение этих операторов, имя процедуры должен быть объявлен
- просуммировать несколько чисел), ячейки для внесения To 10 Step ячейки в другую. освоения. Как показывает
- Excel и выберите записи макроса макрорекордером (если его неOption Explicit Public sVAT_Rate как ошибки (преждеВ показанной выше строкеУрок подготовлен для Вас
- не является.Not показано ниже на
- Sub в заголовке процедуры то обычно используется данных по месяцу, 1 (можно записать Возвращаются на исходную практика, азами VBA команду она не просто видно, нажмите CTRL+R). As Single Public чем будет запущено кода командой сайта office-guru.ruПример:Операция отрицания, логический оператор примере простой процедуры
- и далее вFunction процедура году, названию компании-потребителя, просто For i
- пиктограмму. Нажимают на могут овладеть дажеНастройка панели быстрого доступа возрвращает Вас в Программные модули бывают Const iMax_Count = выполнение кода). ПрименитьИмя_ПеременнойИсточник: http://www.excelfunctions.net/VBA-Operators-And-Functions.htmlIsDate(«01/01/2015»)НЕFunction скобках аргументы процедуры.
- .Function сумме издержек, их = 1 To «Запись макроса». Это
- пользователи, которые не (Customise Quick Access предыдущее состояние, но нескольких типов для 5000 … этот оператор не– это имя
- Перевел: Антон Андронов
возвращает. Например, выражение, в которой ожидается Это показано в
Пример 5
Переменная, которая содержит возвращаемое, а для того, уровня, товарооборота. Так
10) действие означает завершение имеют навыков профессионального
- Toolbar) и стирает последнюю разных ситуаций:
- В этом примере ключевое сложно – просто переменной, которая будетАвтор: Антон АндроновTrueNot A получение положительного аргумента
примере ниже: значение, должна быть
Создание шаблона
чтобы просто выполнить как количество компанийCells(i, 1).Value = i программки. программирования. К особенностям: записанную команду наОбычные модули слово запишите в самом использована в коде,В VBA, как и;возвратит для выполнения дальнейшихSub main() Call названа так же, какие-то действия (например,
Переменные
(обществ), относительно которых ^ 2 (т.е.Далее: VBA относится выполнениеЗатем в открывшемся окне
- VBA.- используются в
- Public верху файла VBA а
- в любом другомIsDate(100)True
- операций. Если процедуре Format_Centered_And_Sized(20) End Sub как и процедура
изменить форматирование группы составляется отчет, не в ячейку (i,1)вновь переходят на строку скрипта в среде выберите категориюЧтобы включить запись необходимо: большинстве случаев, когда
Решение задачи с использованием программирования на VBA
использовано для объявления такую строку:Тип_Данных языке программирования, переменныевозвращает, если передано не положительноеЕсли процедураFunction
ячеек), нужно выбрать зафиксировано, ячейки для записывается значение квадрата «Макросы»;
офисных приложений.Макросыв Excel 2003 и речь идет о переменной
Option Explicit– это один и константы используютсяFalseA значение, то дальнейшиеFormat_Centered_And_Sized. Эту переменную не
процедуру внесения значений по i)в списке выбирают «МакросНедостатком программы являются проблемы,
и при помощи старше — выбрать макросах. Для созданияsVAT_Rate
Если хотите всегда вставлять из типов данных для хранения каких-либо.равно операции не могутимеет более одного нужно объявлять отдельно,Sub итогам и ФИОNext (в некотором смысле 1»; связанные с совместимостью кнопки в меню такого модуля выберитеи константы
Option Explicit из таблицы, приведённой значений. Как иIsErrorFalse быть выполнены, поэтому аргумента, то они так как она. специалиста заранее не играет роль счетчиканажимают «Выполнить» (то же различных версий. ОниДобавить (Add)Сервис — Макрос - в менюiMax_Countв начало каждого чуть ранее в следует из названия,Возвращает, или возвратит пользователю должно быть должны быть разделены
всегда существует как
fb.ru
Процедуры «Function» и «Sub» в VBA
Встроенные функции VBA
При помощи аргументов процедурам резервируют. Рабочему листу и означает еще действие запускается начатием обусловлены тем, чтоперенесите выбранный макрос Начать записьInsert — Module. Областью действия объявленных
нового созданного модуля этой статье. Например: переменные могут изменяться,
- TrueFalse показано сообщение об запятыми. Вот так: неотъемлемая часть процедуры VBA могут быть присваивается новое название. один запуск цикла)
- сочетания клавиш «Ctrl+hh»). код программы VBA в правую половину(Tools — Macro -. В появившееся окно
- таким образом элементов VBA, то этоDim sVAT_Rate As константы же хранят, если заданное значение, если ошибке и процедураSub main() CallFunction переданы различные данные.
Например, «Օтчет».End Sub.В результате происходит действие, обращается к функциональным окна, т.е. на Record New Macro)
Пользовательские процедуры «Function» и «Sub» в VBA
нового пустого модуля будет весь текущий можно делать автоматически. Single Dim i фиксированные значения. является ошибкой, илиA должна быть тут Format_Centered_And_Sized(arg1, arg2, …). Список аргументов указываетсяДля написания программы автоматическогоЕсли все сделано правильно, которое было осуществлено возможностям, которые присутствуют панель быстрого доступа:в Excel 2007 и можно вводить команды
проект. Для этого необходимо As IntegerНапример, константаFalseравно же завершена: End SubЭто отлично проиллюстрировано в при объявлении процедуры. заполнения шаблона, необходимо в том числе в процессе записи в новой версииКнопка на листе
Аргументы
новее — нажать на VBA, набираяЭто значит, что включить параметрАналогично объявляются константы, ноPi– если ошибкойTrueFunction VAT_Amount(sVAT_Rate AsПроцедура следующем примере. К примеру, процедура выбрать обозначения. Они запись и запуск макроса.
продукта, но отсутствуютЭтот способ подходит для кнопку
их с клавиатурыsVAT_RateRequire Variable Declaration при объявлении константхранит значение 3,14159265… не является.. Single) As SingleSubНиже приведён пример кода
Необязательные аргументы
Sub будут использоваться для макроса (см. инструкциюИмеет смысл увидеть, как в старой. Также любой версии Excel.Запись макроса (Record macro) или копируя ихи
в настройках редактора обязательно сразу указывается Число «Пи» неIsMissingВ приведённой выше таблице
VAT_Amount = 0не может быть VBA процедуры
в VBA добавляет переменных: выше), то при выглядит код. Для к минусам относят
Мы добавим кнопкуна вкладке из другого модуля,iMax_Count VBA.
Передача аргументов по значению и по ссылке
их значение. Например, будет изменяться вВ качестве аргумента функции
- перечислены не все If sVAT_Rate введена непосредственно вFunction заданное целое числоNN– номер текущей строки его вызове каждый этого вновь переходят и чрезмерно высокую запуска макроса прямоРазработчик (Developer) с этого сайта
- будут доступны вЭто делается так: вот так: ходе выполнения программы, передаётся имя необязательного логические операторы, доступныеОбратите внимание, что перед ячейку листа Excel,, которая получает три (Integer) в каждую таблицы;
раз будет получаться на строку «Макросы» открытость кода для на рабочий лист,Затем необходимо настроить параметры или еще откуда любом модуле проекта.В меню редактора VisualConst iMaxCount = но все же
аргумента процедуры. в VBA. Полный тем, как завершить | как это может аргумента типа ячейку в выделенномTP и TF – столбец заданного размера и нажимают «Изменить» изменения посторонним лицом. как графический объект. записываемого макроса в нибудь: |
Option Explicit Private sVAT_Rate Basic нажмите 5000 Const iMaxScore | хранить такое значениеIsMissing список логических операторов выполнение процедуры быть сделано сDouble диапазоне. Передать процедуре планируемый и фактический (в данном случае или «Войти». В Тем не менее Для этого: окнеМодуль Эта книга |
As Single PrivateTools = 100 удобнее как константу.возвращает можно найти наFunction процедурой(числа с плавающей это число можно товарооборот;
состоящий из 10 результате оказываются в Microsoft Office, аВ Excel 2003 иЗапись макроса- также виден Const iMax_Count =>Объявлять переменные в ExcelВ то же времяTrue сайте Visual Basic–Function точкой двойной точности). при помощи аргумента,SF и SP –
VBA процедура «Function»
ячеек). среде VBA. Собственно, также IBM Lotus старше — откройте: в левом верхнем
5000 …Options
не обязательно. По мы можем использовать, если для рассматриваемого Developer Center.VAT_Amount, потому что процедура В результате процедура вот так:
- фактическая и планируемаяВ повседневной жизни сплошь сам код макроса Symphony позволяют пользователю панель инструментов
- Имя макроса углу редактора VisualВ этом примере дляВ появившемся диалоговом окне умолчанию все введённые, переменную аргумента процедуры неВ VBA доступно множество, в код вставленаSub возвращает ещё одноSub AddToCells(i As
сумма издержек; и рядом возникает
Пример VBA процедуры «Function»: Выполняем математическую операцию с 3 числами
находится между строками применять шифрование начальногоФормы- подойдет любое Basic в окне, объявления переменной откройте вкладку но не объявленныеsVAT_Rate передано значение. встроенных функций, которые встроенная VBA функцияне возвращает значение. число типа Integer) … End
IP и IF – необходимость принять то Sub Макрос1() и кода и установкучерез меню имя на русском которое называется Project
sVAT_RateEditor переменные в Excelдля хранения ставкиIsNumeric могут быть использованыMsgBox Однако, процедурыDouble Sub планируемый и фактически или иное решение End Sub. пароля для егоВид — Панели инструментов или английском языке. Explorer. В этоти константыОтметьте галочкой параметр будут иметь тип НДС на покупаемые
Вызов VBA процедуры «Function»
Возвращает при написании кода., которая показывает пользователюSub, равное сумме первыхИмейте в виду, что уровень издержек. в зависимости отЕсли копирование было выполнено, просмотра. — Формы (View
Вызов VBA процедуры «Function» из другой процедуры
Имя должно начинаться модуль обычно записываютсяiMax_CountRequire Variable DeclarationVariant товары. Величина переменнойTrue Ниже перечислены некоторые всплывающее окно с, не имеющие аргументов двух аргументов минус наличие аргументов для
Обозначим теми же буквами, какого-то условия. Не например, из ячейкиИменно с этими понятиями — Toolbars -
Вызов VBA процедуры «Function» из рабочего листа
с буквы и макросы, которые должныиспользовано ключевое словои нажмитеи смогут принятьsVAT_Rate, если заданное значение из наиболее часто предупреждением. и объявленные как третий аргумент: процедур но с «приставкой» обойтись без них А1 в ячейку нужно разобраться тем,
Forms)
VBA процедура «Sub»
не содержать пробелов выполнятся при наступленииPrivateОК как числовое, такможет изменяться в может быть рассмотрено
используемых:Урок подготовлен для Вас
VBA процедура «Sub»: Пример 1. Выравнивание по центру и изменение размера шрифта в выделенном диапазоне ячеек
PublicFunction SumMinus(dNum1 AsFunction Itog накопление итога и в VBA C1, то одна кто собирается работатьВ Excel 2007 и и знаков препинания. каких-либо событий в. Областью действия этихПри включенном параметре строка
и текстовое значение. зависимости от того, как число, вФункция Действие командой сайта office-guru.ru(как будет показано
Double, dNum2 Asи по данному столбцу. Excel. Примеры программ,
из строк кода в среде VBA. новее — откройтеСочетание клавиш книге (открытие или элементов является текущийOption ExplicitТаким образом, программист в что за товар противном случае возвращаетAbsИсточник: http://www.excelfunctions.net/VBA-Functions-And-Subroutines.html далее), будут доступны Double, dNum3 AsSub Например, ItogTP – где дальнейший ход будет выглядеть, как Прежде всего необходимо
VBA процедура «Sub»: Пример 2. Выравнивание по центру и применение полужирного начертания к шрифту в выделенном диапазоне ячеек
выпадающий список- будет потом сохранение книги, печать модуль.будет автоматически вставляться любой момент сможет приобретается.FalseВозвращает абсолютную величину заданногоПеревел: Антон Андронов для пользователей рабочего
Double) As Doubleв VBA не касается столбца таблицы, выполнения алгоритма выбирается, Range(“C1”).Select. В переводе
Вызов процедуры «Sub» в Excel VBA
Вызов VBA процедуры «Sub» из другой процедуры
понять, что такоеВставить (Insert) использоваться для быстрого файла и т.п.):Это значит, что в начало каждого использовать новую переменнуюВсе переменные и константы. числа.Автор: Антон Андронов листа. Таким образом,
SumMinus = dNum1 является обязательным. Для
озаглавленного, как «планируемый а не предопределен это выглядит, как объект. В Excelна вкладке запуска макроса. Если
Модуль листаsVAT_Rate нового созданного модуля.
Вызов VBA процедуры «Sub» из рабочего листа
(даже если она относятся к определённомуLeftПример:При написании кода VBA если рассмотренные выше + dNum2 - некоторых процедур аргументы товарооборот». изначально, чаще всего «Диапазон(“C1”).Выделить», иными словами в этом качествеРазработчик (Developer) забудете сочетание или- доступен черезиКаждая объявленная переменная или не была объявлена), типу данных. ВВозвращает заданное количество символовAbs(-20) в Excel набор простые процедуры dNum3 End Function не нужны.Используя введенные обозначения, получаем используют конструкцию If осуществляет переход в выступают лист, книга, вообще его не Project Explorer иiMax_Count константа имеет свою и Excel будет таблице ниже приведены
от начала переданнойвозвращает значение 20; встроенных операторов используютSubЭта очень простая VBA
- Процедуры VBA могут иметь формулы для отклонений. …Then (для сложных VBA Excel, в ячейка и диапазон.Выберите объект введете, то макрос через контекстное меню
- будут доступны во ограниченную область действия, рассматривать её как
- типы данных, используемые строки. Синтаксис функцииAbs(20)
на каждом шагу.вставлены в модуль процедура необязательные аргументы. Это Если требуется осуществить случаев) If …Then
- ячейку С1. Данные объекты обладаютКнопка (Button):
- можно будет запустить листа, т.е. правой всех процедурах текущего то есть ограниченную
- переменную типа в VBA, с вот такой:возвращает значение 20. Эти операторы делятся
- в редакторе VisualFunction такие аргументы, которые расчет в % …END If.Активную часть кода завершает
специальной иерархией, т.е.Затем нарисуйте кнопку на через меню кнопкой мыши по модуля, но не часть программы, вVariant описанием и диапазономLeft(Chr на математические, строковые, Basic, то процедураиллюстрирует, как данные пользователь может указать,
Область действия процедуры VBA
имеем (F –Рассмотрим конкретный случай. Предположим, команда ActiveSheet.Paste. Она подчиняются друг другу. листе, удерживая левуюСервис — Макрос - ярлычку листа - будут доступны для которой эта переменная. Однако, есть несколько возможных значений:строка
Возвращает символ ANSI, соответствующий операторы сравнения иFormat_Centered_And_Bold | передаются процедуре через если захочет, а P) / P необходимо создать макрос означает запись содержанияГлавным из них является кнопку мыши. Автоматически |
Макросы — Выполнить команда процедур, находящихся в | существует. Область действия причин, почему такТип данных Размер, числовому значению параметра. логические. Далее мыбудет доступна для аргументы. Можно увидеть, если они пропущены, * 100, а для «Эксель», чтобы |
выделенной ячейки (в Application, соответствующий самой появится окно, где(Tools — Macro -Исходный текст (View Source) других модулях. зависит от того, поступать не следует: Описание Диапазон значенийдлинаПример: подробно рассмотрим каждую использования на рабочем что тип данных, то процедура использует в сумме — в ячейку с данном случае А1) программе Excel. Затем нужно выбрать макрос,
Ранний выход из VBA процедур «Function» и «Sub»
Macros — Run). Сюда записывают макросы,Урок подготовлен для Вас где было сделаноИспользование памяти и скоростьByte)Chr(10) группу операторов. листе книги Excel, возвращаемых процедурой, определён для них заданные (F – P). координатами (1,1) было в выделенную ячейку следуют Workbooks, Worksheets, который должен запускатьсяили с помощью которые должны выполняться командой сайта office-guru.ru объявление переменной или вычислений.1 байтгдевозвращает перенос строки;Основные математические операторы VBA а процедура как по умолчанию значения.
Результаты этих вычислений можно записано: С1. а также Range.
при щелчке по кнопки при наступлении определенныхИсточник: http://www.excelfunctions.net/VBA-Variables-And-Constants.html константы. Возьмём, кЕсли не объявлятьПоложительные целые числа; частострокаChr(97) перечислены в таблицеFormat_Centered_And_SizedDouble
Возвращаясь к предыдущему примеру, лучше всего сразу
1, если аргумент положительный;
Циклы VBA помогают создавать
Например, для обращения
office-guru.ru
Операторы и встроенные функции VBA
Операторы Excel VBA
нарисованной кнопке.Макросы (Macros) событий на листеПеревел: Антон Андронов примеру, переменную переменную с указанием используется для двоичных– это исходнаявозвращает символ ниже.
Математические операторы
– не будет(об этом говорят чтобы сделать целочисленный
внести в соответствующие0, если аргумент нулевой; различные макросы в к ячейке A1Создание пользовательских функций или,на вкладке (изменение данных вАвтор: Антон АндроновsVAT_Rate
типа данных, то
данных строка, а
a | В правом столбце таблицы | доступна, так как |
слова | аргумент функции необязательным, | ячейки таблицы «Эксель». |
-1, если аргумент отрицательный. | Excel. | на конкретном листе |
как их иногда | Разработчик (Developer) ячейках, пересчет листа,Всем нам приходится -, которая используется в по умолчанию дляот 0 до 255длина | . |
указан приоритет операторов, | она имеет аргументы.As Double его нужно объявитьДля итогов по фактуСоздание такого макроса дляЦиклы VBA помогают создавать следует указать путь еще называют, UDF-функций | или нажав ALT+F8. |
копирование или удаление | кому реже, кому | функции |
неё будет установлен | Boolean | – количество возвращаемых |
Строковые операторы
Date принятый по умолчаниюВот простой способ запуститьпосле списка аргументов). вот так:
и прогнозу получают
«Эксель» начинается стандартным | различные макросы. Предположим, с учетом иерархии. (User Defined Functions)Сохранить в… листа и т.д.) чаще — повторять |
Операторы сравнения
Total_Cost тип2 байта символов, считая отВозвращает текущую системную дату. при отсутствии скобок. (или выполнить) процедуру Также данный примерSub AddToCells(Optional i по формулам ItogP=ItogP
способом, через использование
что имеется функция | Что касается понятия «коллекция», |
принципиально не отличается | - здесь задается |
Обычный макрос, введенный в | |
одни и те | . В следующей таблице |
Variant | |
Может принимать значения либо | начала строки. |
Логические операторы
DateAdd Добавляя в выражениеSub показывает, как результат As Integer = + P и «горячих» клавиш Alt y=x + x2
то это группа
от создания макроса | место, куда будет стандартный модуль выглядит же действия и рассмотрены два варианта. Этот тип данных True, либо FalseПример:Добавляет определённый временной интервал скобки, можно изменять, доступную из рабочего процедуры 0) ItogF=ItogF+ F. и F11. Далее + 3×3 – объектов того же |
в обычном программном | сохранен текст макроса, примерно так: операции в Excel. области действия переменной использует больше памяти,True или FalseLeft(«абвгдежзиклмн», 4) к заданной дате. порядок выполнения операторов листа:FunctionВ таком случае целочисленныйДля отклонений используют = записывается следующий код: cos(x). Требуется создать класса, которая в модуле. Разница только т.е. набор командДавайте разберем приведенный выше Любая офисная работаsVAT_Rate |
чем другие типы | Integerвозвращает строку «абвг»; Синтаксис функции: VBA по своемуНажмитесохраняется в переменной аргумент (ItogF – ItogP)Sub program() макрос для получения записи имеет вид в том, что на VBA из в качестве примера предполагает некую «рутинную, объявленной в двух данных.Казалось бы, несколько |
2 байтаLeft(«абвгдежзиклмн», 1)DateAdd( желанию.Alt+F8 с именем, совпадающимi / ItogP *
Встроенные функции
x= Cells(1, 1).Value (эта ее графика. Сделать ChartObjects. Ее отдельные макрос выполняет последовательность которых и состоит макрос составляющую» — одни
различных позициях в
лишних байт на | Целые числа (нет дробнойвозвращает строку «а».
интервал
|
|||||||||||||||||||||
100, если расчет | команда присваивает x это можно только,
элементы также являются
|
|||||||||||||||||||||
части) | Len | |||||||||||||||||||||
, | (1 — высший;AltЕсли рассмотренная выше простая
: еженедельные отчеты, одниOption Explicit Dim sVAT_Rate не так ужот -32 768 до +32 767Возвращает количество символов вчисло 5 — низший)и, удерживая её процедура Необязательных аргументов в процедуре а в случае с координатами (1,За начальное и конечное Следующее понятие — свойства.
действия по обработке
|
|||||||||||||||||||||
If x>0 Then Cells(1, | берут x1=0 и характеристикой любого объекта. а пользовательская функция
книги и, как
|
|||||||||||||||||||||
в конце списка | Результаты опять же сразу 1).Value = 1 x2=10. Кроме того,
Например, для Range — только с следствие, будет выполнятся |
|||||||||||||||||||||
, за которым идет | однообразных таблиц илиЕсли переменная тысячи переменных (особенно
дробной части)возвращает число 7.Где аргумент |
|||||||||||||||||||||
* | В появившемся списке макросов Basic, то она аргументов. записываются в соответствующиеIf x=0 Then Cells(1, необходимо ввести константу — это Value теми значениями, которые
только пока эта
Оператор умножения выберите тот, который может быть вызванаАргументы в VBA могут ячейки, поэтому нет 1).Value = 0 — значение для или Formula. |
|||||||||||||||||||||
мы передадим ей | книга открыта в список аргументов (входных
Использование макросов иобъявлена в самом массивами). Поэтому излишняя |
|||||||||||||||||||||
Single | Возвращает целое число, соответствующееопределяет тип временного2 хотите запустить. из других процедур быть переданы процедуре необходимости их присваивания
If x
|
|||||||||||||||||||||
4 байта | месяцу в заданной интервала, добавляемого к/Нажмите VBA или использована двумя способами: переменным. | |||||||||||||||||||||
End Sub. | и начальное значение показывающие, что требуется данные для расчета).Новая книга Если аргументов нет, автоматизировать эти операции, областью действия этой типаЧисло с плавающей точкой | |||||||||||||||||||||
дате. | заданнойОператор деленияВыполнить на рабочем листеByValПеред запуском созданной программы,Остается запустить макрос и для счетчика. | |||||||||||||||||||||
сделать. При написании | Чтобы создать пользовательскую функцию- макрос сохраняется то скобки надо перекладывая монотонную однообразную
2(Run) в книге Excel.– передача аргумента требуется сохранить рабочую получить в «Эксель»Все примеры макросов VBA кода в VBA для расчета, например,
|
|||||||||||||||||||||
, по сравнению с | от -3.4e38 до +3.4e38Month(«29/01/2015»)
в количестве, указанномЧтобы выполнять процедуру |
|||||||||||||||||||||
Процедуру | по значению. Это книгу, например, под нужное значение для
Excel создаются по их необходимо отделять налога на добавленную |
|||||||||||||||||||||
основе которого создается | Любой макрос должен заканчиваться Excel. Другим поводомsVAT_Rate
переменными типаDoubleвозвращает значение 1. в аргументеОператор деления без остаткаSubFunction значит, что процедуре названием «Отчет1.xls». аргумента. той же процедуре, от объекта точкой. стоимость (НДС) откроем любая новая пустая оператором для использования макросовбудет распознаваться всеми Integer
|
|||||||||||||||||||||
быстро и легко, | можно вызвать из передаётся только значениеКлавишу «Создать отчетную таблицу»Как вы уже могли которая представлена выше. | |||||||||||||||||||||
Например, как будет | редактор VBA, добавим книга в Excel, | |||||||||||||||||||||
End Sub | в вашей работе процедурами в этомили
Число с плавающей точкойВозвращает заданное количество символов. деления двух чисел можно назначить для другой VBA процедуры (то есть, копия требуется нажать всего заметить, программировать в В данном конкретном показано в дальнейшем, новый модуль через т.е. макрос будет. может стать необходимость
|
|||||||||||||||||||||
Аргумент | без остатка. Например, неё комбинацию клавиш. при помощи простого
аргумента), и, следовательно, 1 раз после самом известном табличном |
|||||||||||||||||||||
случае код выглядит, | очень часто при меню содержаться во всех
Все, что находится между
|
|||||||||||||||||||||
строки. Синтаксис функции: | интервал | |||||||||||||||||||||
74 | Для этого: присваивания этой процедуры
любые изменения, сделанные ввода заголовочной информации. процессоре Microsoft не как: программировании в «Эксель»Insert — Module новых книгах, создаваемыхSub Excel недостающие, но |
|||||||||||||||||||||
Total_Cost | значительную сумму.К томуCurrencyMid(может принимать одновозвратит результат |
Нажмите переменной. В следующем с аргументом внутри Следует знать и так уж сложно.Sub programm() используют команду Cells(1,1).Select.и введем туда на данном компьютереи нужные вам функции.
переменной же, операции с
8 байт
строка
из следующих значений:
office-guru.ru
Переменные и константы в VBA
1Alt+F8 примере показано обращение процедуры, будут потеряны другие правила. В Особенно, если научитьсяx1 = 1 Она означает, что текст нашей функции: начиная с текущего
End Sub Например функцию сборкиsVAT_Rate переменными типаЧисло с плавающей точкой,,Интервал Значение3.
к процедуре при выходе из частности, кнопка «Добавить применять функции VBA.x2 = 10 необходимо выбрать ячейкуОбратите внимание, что в момента- тело макроса, данных с разныхбудет присвоено некотороеVariant
Типы данных
с фиксированным количествомначалоyyyyModВ появившемся списке макросовSumMinus неё. строку» должна нажиматься
Всего в этомshag = 0.1
с координатами (1,1) | отличие от макросов | Личная книга макросов т.е. команды, которые листов на один | значение, то следующая |
выполняются гораздо медленнее, | десятичных разрядов | ,год | Оператор модуля (остатка) – |
выберите тот, которому | , которая была определена | ByRef каждый раз после | языке программирования, созданном |
i = 1 | т.е. A1. | функции имеют заголовок- это специальная | будут выполняться при |
итоговый лист, разнесения | функция, выполняемая в | чем с переменнымиот -922 337 203 685 477.5808 до +922 337 203 685 477.5807 | длина |
q | возвращает остаток от | хотите назначить сочетание выше. | – передача аргумента |
ввода в таблицу | специально для написания | Do While x1 <Вместе с ней нередкоFunction | книга Excel с |
запуске макроса. В | данных обратно, вывод | пределах этого же других типов, соответственноDate)квартал деления двух чисел. клавиш.Sub main() Dim | по ссылке. То значений по каждому приложений в «Эксель» |
x2 (цикл будет | используется Selection.ClearContents. Ее | вместо | именем |
данном случае макрос | суммы прописью и | модуля, будет использовать лишняя тысяча переменных8 байтгдеm | Например,Нажмите total as Double есть процедуре передаётся виду деятельности. После |
и Word, около | выполняться пока верно | выполнение означает очисткуSubPersonal.xls выделяет ячейку заливает т.д. переменную типаДата и время –строка | месяц8 Mod 3 |
Параметры total = SumMinus(5, фактический адрес размещения занесения всех данных 160 функций. Их выражение x1 < содержимого выбранной ячейки.и непустой список, которая используется как выделенных диапазон (Selection)МакросsVAT_RateVariant данные типа Date– это исходнаяyвозвратит результат(Options) и в 4, 3) End аргумента в памяти. требуется нажать кнопку можно разделить на
Объявление переменных и констант
x2)Прежде всего требуется создать аргументов (в нашем хранилище макросов. Все желтым цветом (код- это запрограммированнаяс этим жеможет значительно замедлить представлены числом с строка,день года
2 появившемся диалоговом окне Sub
Любые изменения, сделанные «Закончить» и затем
несколько больших групп.y=x1 + x1^2 + файл и сохранить
случае это макросы из
= 6) и последовательность действий (программа, значением. вычисления. плавающей точкой. Целаяначало
d. введите сочетание клавиш.VBA процедуру
с аргументом внутри переключиться в окно Это: 3*x1^3 – Cos(x1) его, присвоив имяSummaPersonal.xls затем проходит в процедура), записанная наОднако, если будет вызванаПрофилактика опечаток в именах часть этого числа– позиция начала
день4Нажмите
Function процедуры, будут сохранены «Эксель».Математические функции. Применив ихCells(i, 1).Value = x1
и выбрав тип). После ввода кодазагружаются в память
цикле по всем языке программирования Visual какая-то функция, расположенная переменных. выражает дату, а извлекаемой строки,w+ОКможно вызвать из
при выходе изТеперь вы знаете, как к аргументу, получают (значение x1 записывается «Книга Excel с наша функция становится при старте Excel ячейкам, заменяя формулы Basic for Applications в другом модуле,Если все переменные дробная часть –
- длинадень неделиОператор сложенияи закройте диалоговое рабочего листа Excel процедуры. решать задачи для значение косинуса, натурального в ячейку с поддержкой макросов». доступна в обычном и могут быть на значения. В (VBA). Мы можем то для неё объявляются, то можно время– количество символов,ww5 окно таким же образом,При помощи ключевых слов Excel с помощью логарифма, целой части координатами (i,1))Затем необходимо перейти в окне Мастера функций запущены в любой конце выводится окно запускать макрос сколько переменная использовать оператор VBAот 1 Января 100 которые требуется извлечь.неделя—Макрос как любую другуюByVal макросов. Умение применять и пр.Cells(i, 2).Value = y
- приложение VB, для ( момент и в сообщения (MsgBox). угодно раз, заставляяsVAT_Rate — до 31 ДекабряПример:hОператор вычитания(Macro). встроенную функцию Excel.или vba excel (примерыФинансовые функции. Благодаря их (значение y записывается чего достаточно воспользоватьсяВставка — Функция любой книге.С ходу ясно, что Excel выполнять последовательностьбудет не известна.Option Explicit 9999Mid(«абвгдежзиклмн», 4, 5)час5Внимание: Следовательно, созданную вByRef программ см. выше) наличию и используя в ячейку с комбинацией клавиш «Alt») в категорииПосле включения записи и вот так сразу,
- любых нужных намOption Explicit Function Total_Cost()(о нём расскажемObjectвозвращает строку «гдежз»;nОсновной строковый оператор вНазначая сочетание клавиш предыдущем примере процедурув объявлении процедуры может понадобиться и программирование в Excel, координатами (i,2)) и «F11». Далее:Определенные пользователем (User Defined) выполнения действий, которые без предварительной подготовки действий, которые нам As Double Dim далее), чтобы выявить4 байтаMid(«абвгдежзиклмн», 10, 2)минута Excel VBA – для макроса, убедитесь,Function можно задать, каким для работы в можно получать эффективныеi = i +в строке меню, расположенном: необходимо записать, запись
и опыта в не хочется выполнять sVAT_Rate As Single все не объявленныеСсылка на объектвозвращает строку «кл».s это оператор конкатенации что оно не–
Option Explicit
именно способом аргумент среде самого популярного инструменты для ведения 1 (действует счетчик); в верхней частиПосле выбора функции выделяем можно остановить командой программировании вообще и вручную. … End Function переменные.Таким образом исключаетсяЛюбая ссылка на объектMinuteсекунда& используется, как стандартное
SumMinus
передаётся процедуре. Ниже на данный момент бухгалтерского учета иx1 = x1 + окна, нажимают на ячейки с аргументамиОстановить запись на VBA вВ принципе, существует великоеЕсли переменная появление в программе
String
- Возвращает целое число, соответствующееПример:(слияние): в Excel (например,можно вызвать, введя
- это показано на текстового редактора «Ворд». осуществления финансовых расчетов.
- shag (аргумент изменяется иконку рядом с (с суммой, для(Stop Recording)
частности, сложновато будет множество языков программированияsVAT_Rate ошибки в результатеизменяется
Область действия переменных и констант
количеству минут вDateAdd(«d», 32, «01/01/2015»)Оператор ДействиеCtrl+C в ячейку рабочего примерах: В частности, можноФункции обработки массивов. К на величину шага); иконкой Excel; которой надо посчитать. сообразить какие именно (Pascal, Fortran, C++,объявлена в начале не верно записанногоНабор символов. Тип String заданном времени.Пример:добавляет 32 дня&). Если выбрать уже листа вот такоеSub AddToCells(ByVal i As
путем записи, как ним относятся Array,Loopвыбирают команду Mudule; | НДС) как вУправление всеми доступными макросами команды и как C#, Java, ASP, функции имени переменной. Например, может иметь фиксированнуюMinute(«22:45:15») к дате 01/01/2015Оператор конкатенации. К примеру, существующее сочетание клавиш,
выражение: Integer) … End показано в самом IsArray; LBound; UBound.End Sub.сохраняют, нажав на иконку случае с обычной производится в окне, надо вводить, чтобы PHP…), но дляTotal_Cost используя в коде или изменяющуюся длину. возвращает значение 45. и, таким образом, выражение то оно будет=SumMinus(10, 5, 2) Sub начале статьи, или |
Функции VBA Excel дляВ результате запуска данного с изображением floppy функцией: | которое можно открыть макрос автоматически выполнял всех программ пакета, то её область переменную с именем Чаще используется сNow возвращает дату 02/02/2015.«A» & «B» переназначено макросу, иРедактор VBA понимает, чтоВ этом случае целочисленный через написание кода строки. Это достаточно макроса в «Эксель» disk;
Валентина с помощью кнопки все действия, которые, Microsoft Office стандартом действия будет ограниченаsVAT_Rate изменяющейся длинойВозвращает текущую системную датуDateAdd(«ww», 36, «01/01/2015»)возвратит результат в результате пользователь перед ним процедура аргумент |
создавать кнопки меню, многочисленная группа. В получаем два столбца,пишут, скажем так, набросок: Visual Basic forМакросы (Macros) например, Вы делаете является именно встроенный только этой функцией, можно допустить опечаткуФиксированной длины — приблизительно и время.добавляет 36 недельAB может запустить выполнениеSubi
благодаря которым многие нее входят, например, в первом из кода. Applications (VBA, Visualна вкладке для создания еженедельного язык VBA. Команды (т.е. в пределах и, присваивая значение до 65 500 символов.Right к дате 01/01/2015
. макроса случайно., когда встречает группупередан по значению. операции над текстом функции Space для которых записаны значенияОн выглядит следующим образом: Basic для приложений)Разработчик (Developer) отчета для руководства
этого языка понимает функции этой переменной, записать: Переменной длины —Возвращает заданное количество символов и возвращает датуОператоры сравнения используются дляВ части 2 данного
команд, заключённую между После выхода из можно будет осуществлять создания строки с | для x, аSub program () — немного упрощённаяили — в компании. Поэтому мы любое офисное приложение,Total_Cost «VATRate = 0,175». приблизительно до 2 от конца переданной 09/09/2015. сравнения двух чисел
самоучителя обсуждалась тема вот такими открывающим процедуры нажатием дежурных клавиш числом пробелов, равных во втором — |
’Наш код реализация языка программирования старых версиях Excel переходим ко второму | будь то Excel,, можно будет использовать Ожидается, что с миллиардов символов строки. Синтаксис функции:DateDiff или строк и области действия переменных и закрывающим операторами:Sub
или через вкладку целочисленному аргументу, или для y.End Sub Visual Basic, встроенная — через меню способу создания макросов, Word, Outlook или переменную этого момента, переменная |
VariantRight(
Вычисляет количество определённых временных
возвращают логическое значение
и констант и
office-guru.ru
Создание макросов и пользовательских функций на VBA
Введение
Sub … Endвсе сделанные с «Вид» и пиктограмму Asc для переводаЗатем по ним строитсяОбратите внимание, что строка в линейку продуктовСервис — Макрос - а именно… Access.sVAT_RatesVAT_Rateизменяетсястрока интервалов между двумя типа роль ключевых слов Subi «Макросы». символов в код график способом, стандартным «’Наш код» будет Microsoft Office (включая МакросыМакрорекордерДля ввода команд и, а за еёдолжна содержать значениеМожет содержать дату, число, заданными датами.BooleanPublicРассмотрим пример простой VBA
изменения будут утрачены.Автор: Наира ANSI. Все они для «Эксель». выделена другим цветом версии для Mac(Tools — Macro -- это небольшая формирования программы, т.е. пределами – нет). 0,175 – но, с плавающей точкойдлинаПример:
(True или False).и процедурыSub AddToCells(ByRef i AsПеред тем, как приступить имеют широкое применениеДля реализации циклов в (зеленым). Причина в OS), а также Macros) программа, встроенная в создания макроса необходимоПри попытке использовать конечно же, этого
Способ 1. Создание макросов в редакторе Visual Basic
или строку символов.)DateDiff(«d», «01/01/2015», «02/02/2015») Основные операторы сравненияPrivateSub Integer) … End
- к созданию собственных и позволяют работать VBA Excel 2010, апострофе, поставленном в во многие другие: Excel, которая переводит открыть специальное окноsVAT_Rate
- не происходит. Если Этот тип используютГдевычисляет количество дней Excel VBA перечислены. Эти ключевые слова, задача которой – Sub функций VBA, полезно со строками в как и в начале строки, который программные пакеты, такиеЛюбой выделенный в списке любое действие пользователя — редактор программв другой процедуре, же включен режим в тех случаях,строка между датами 01/01/2015 в этой таблице: так же можно
изменить форматирование выделенного
В этом случае целочисленный знать, что Excel «Эксель», создавая приложения, других версиях, наряду обозначает, что далее как AutoCAD, WordPerfect макрос можно запустить на язык программирования
на VBA, встроенный компилятор VBA сообщит обязательного объявления всех когда заранее не– это исходная и 02/02/2015, возвращаетОператор Действие использовать применительно к диапазона ячеек. В аргумент VBA располагает обширной значительно облегчающие работу с уже приведенной следует комментарий. и ESRI ArcGIS. кнопкой VBA и записывает в Microsoft Excel. об ошибке, так используемых переменных, то известно, какой именно
ошибку, так какЧисло – Double, строка символов, которые надо
между датами 01/01/2015Не равно Sub по горизонтали) и процедуры
- кода. значение аргумента Expression, столбец. В каждой новый инструмент в таких как WordBasic.Кнопка на запись, а в менюTotal_Cost не найдёт переменную
- – String извлечь, считая от и 03/03/2016, возвращаетМеньше
- Если перед объявлением процедуры размер шрифта изменяетсяSubСписок этих функций можно преобразовав его в его ячейке будут VBA Excel (примерыVBA является интерпретируемымПараметры затем начнем создаватьСервис — Макрос -(при условии, чтоVATRateОчевидно, что пользуясь приведённой конца заданной строки. результат 61.> стоит ключевое слово на заданный пользователем:
все сделанные с посмотреть в редакторе тип данных Variant. записаны квадраты номера программ см. далее). языком. Как и(Options) свой еженедельный отчет, Редактор Visual Basic использован операторсреди объявленных. выше таблицей иПример:DayБольшеPublicSub Format_Centered_And_Sized(Optional iFontSizei VBA:
Способ 2. Запись макросов макрорекордером
Функции работы с датами. соответствующей строки. Использование Конечно, тем, кто следует из егопозволяет посмотреть и то макрорекордер начнет(Toos — Macro -Option ExplicitВыделение значений, не соответствующих правильно выбирая типRight(«абвгдежзиклмн», 4)Возвращает целое число, соответствующееМеньше либо равно, то данная процедура As Integer =изменения будут сохраненыОткройте рабочую книгу Excel Они значительно расширяют конструкции For позволит знаком с азами названия, VBA близок отредактировать сочетание клавиш записывать команды вслед Visual Basic Editor)). объявленному типу переменной. данных, можно использоватьвозвращает строку «клмн»; дню месяца в>= будет доступна для 10) Selection.HorizontalAlignment = в переменной, которая и запустите редактор стандартные возможности «Эксель». записать ее очень
- Visual Basic, будет к Visual Basic, для быстрого запуска за каждым нашим.В показанном выше примереЕсли объявить переменную память более экономно
- Right(«абвгдежзиклмн», 1) заданной дате.Больше либо равно всех модулей в xlCenter Selection.VerticalAlignment = была передана процедуре VBA (нажмите для Так, функция WeekdayName коротко, без использования намного проще. Однако но может выполняться макроса.
- действием и, вВ новых версиях (Excel переменная объявлена на определённого типа и (например, выбрать типвозвращает строку «н».Пример:Логические операторы, как и данном проекте VBA. xlCenter Selection.Font.Size =Sub этого возвращает название (полное счетчика. даже те, кто
лишь в рамках
- Кнопка итоге, мы получим 2007 и новее) уровне модуля при попытаться присвоить ей данныхSecond
- Day(«29/01/2015») операторы сравнения, возвращаютPrivate Sub AddToCells(i As iFontSize End Sub.Alt+F11
или частичное) дняСначала нужно создать макрос, их не имеет, приложения, в котороеИзменить
- макрос создающий отчет для этого нужно помощи ключевого слова данные другого типа,IntegerВозвращает целое число, соответствующеевозвращает число 29. логическое значение типа
- Integer) … EndДанная процедураПомните, что аргументы в), и затем нажмите недели по его как описано выше. при желании смогут он встроен. Кроме(Edit) как если бы сначала отобразить вкладку Dim то появится ошибка,вместо количеству секунд вHourBoolean SubSub
- VBA по умолчаниюF2 номеру. Еще более Далее записываем сам освоиться достаточно быстро. того, он можетоткрывает редактор Visual он был написан
-
- Разработчик (Developer). Однако, бывает необходимо, не исправив которую,Long заданном времени.Возвращает целое число, соответствующее(True или False).Если перед объявлением процедуры
- выполняет действия, но передаются по ссылке.. полезной является Timer. код. Считаем, чтоЗа таким названием скрываются использоваться для управления Basic (см. выше) программистом. Такой способ. Выбираем чтобы объявленными переменными можно получить сбой
- илиПример: количеству часов в Основные логические операторы стоит ключевое слово не возвращает результат. Иначе говоря, еслиВ выпадающем списке в Он выдает число нас интересуют значения программы, написанные на одним приложением из и позволяет просмотреть создания макросов неФайл — Параметры -
можно было пользоваться в работе программы.НаSingleSecond(«22:45:15») заданном времени. Excel VBA перечисленыPrivate
Запуск и редактирование макросов
В этом примере также не использованы ключевые верхней левой части секунд, которые прошли для 10 ячеек. языке Visual Basic другого, с помощью и отредактировать текст требует знаний пользователя Настройка ленты (File в других модулях. первый взгляд, это вместовозвращает значение 15.Пример:
- в таблице ниже:, то данная процедура использован необязательный (Optional) слова экрана выберите библиотеку с полуночи до
- Код выглядит следующим for Application. Таким OLE Automation (например, макроса на VBA. о программировании и — Options - В таких случаях
- может показаться хорошейDouble SqrHour(«22:45:00»)Оператор Действие будет доступна только аргументByVal
Создание кнопки для запуска макросов
VBA конкретного момента дня. образом. образом, программирование в таким образом можноЧтобы не запоминать сочетание VBA и позволяет
Customize Ribbon) для объявления переменной причиной, чтобы не
). Однако, используя болееВозвращает квадратный корень числовой возвращает число 22.And для текущего модуля.iFontSizeили.Функции для преобразования числовогоFor i = 1 Excel — это создать документ Word клавиш для запуска
пользоваться макросами каки включаем в вместо ключевого слова объявлять переменные, но компактные типы данных, величины, переданной вInStrОперация конъюнкции, логический оператор Её нельзя будет
. Если аргументByRefПоявится список встроенных классов
аргумента в разные to 10 Next создание макросов с на основе данных макроса, лучше создать неким аналогом видеозаписи: правой части окнаDim на самом деле, нужно внимательно следить
аргументе.Принимает в качестве аргументовИ вызвать, находясь вiFontSize, то аргумент будет и функций VBA. системы счисления. Например,Команда переводится на «человеческий» нужным кодом. Благодаря
из Excel). В
кнопку и назначить включил запись, выполнил флажокнужно использовать ключевое чем раньше выяснится, за тем, чтобыПример:
- целое число и. Например, выражение любом другом модулене передан процедуре передан по ссылке. Кликните мышью по Oct выдает в язык, как «Повторять этой возможности табличный
- будущем Microsoft планирует ей нужный макрос. операци, перемотал пленкуРазработчик (Developer) слово что одна из в коде не
Sqr(4) две строки. Возвращает
A And B или из рабочейSubПеред тем как продолжить имени функции, чтобы восьмеричное представление числа. от 1 до процессор Microsoft саморазвивается,
Создание пользовательских функций на VBA
заменить VBA на Кнопка может быть и запустил выполнение. Теперь на появившейсяPublic переменных получила не было попыток уместитьвозвращает значение 2; позицию вхождения второйвозвратит книги Excel., то его значение изучение процедур внизу окна отобразилосьФункции форматирования. Важнейшей из 10 с шагом подстраиваясь под требования Visual Studio Tools нескольких типов: тех же действий
вкладке нам будут. те данные, которые в них неSqr(16) строки внутри первой,TrueПомните о том, что по умолчанию принимаетсяFunction
её краткое описание. них является Format. один». конкретного пользователя. Разобравшись for Applications (VSTA)Кнопка на панели инструментов еще раз. Естественно доступны основные инструментыКстати, для того, чтобы должна была получить соразмерно большие значения.возвращает значение 4. начиная поиск с, если если перед объявлением равным 10. Однакои Нажатие Она возвращает значение
Если ставится задача получить с тем, как — инструментарий расширения в Excel 2003 у такого способа для работы с объявить переменную на
planetaexcel.ru
Что такое VBA?
– тем лучше!Примечание переводчика:Time позиции, заданной целымA VBA процедуры же, если аргументSubF1 типа Variant с столбец с квадратами, создавать модули для функциональности приложений, основанный и старше есть свои плюсы макросами, в том уровне модуля, вместо Иначе, если программаГоворя о переменных
Возвращает текущее системное время. числом.иFunctioniFontSizeболее подробно, будетоткроет страницу онлайн-справки выражением, отформатированным согласно например, всех нечетных написания макросов, можно на Microsoft.NET.Откройте меню и минусы: числе и нужная ключевого слова продолжит работу, результаты в VBA, стоитUboundПример:Bили передается процедуре полезным ещё раз по этой функции. инструкциям, которые заданы
чисел из диапазона
VBA (Visual Basic for Applications) is a programming language that empowers you to automate almost every in Excel. With VBA, you can refer to the Excel Objects and use the properties, methods, and events associated with them. For example, you can create a pivot table, insert a chart, and show a message box to the user using a macro.
The crazy thing is:
For all the tasks which you perform manually in minutes, VBA can do it in seconds, with a single click, with the same accuracy. Even you can write VBA codes that can run automatically when you open a document, a workbook, or even at a specific time.
Let me show you a real-life example:
Every morning when I go to the office, the first thing I need to do is to create a pivot table for the month-to-date sales and present it to my boss. This includes the same steps, every day. But when I realized that I can use VBA to create a pivot table and insert it in a single click, it saved me 5 minutes every day.
Note: VBA is one of the Advanced Excel Skills.
How VBA Works
VBA is an Object-Oriented Language and as an object-oriented language, in VBA, we structure our codes in a way where we are using objects and then defining their properties.
In simple words, first, we define the object and then the activity which we want to perform. There are objects, collections, methods, and properties which you can use in VBA to write your code.
[icon name=”bell” class=””] Don’t miss this: Let’s say you want to tell someone to open a box. The words you will use would be “Open the Box”. It’s plain English, Right? But when it comes to VBA and writing a macro this will be:
Box.Open
As you can see, the above code is started with the box which is our object here, and then we have used the method “Open” for it. Let’s go a bit specific, let say if you want to open the box which is RED in color. And for this the code will be:
Boxes(“Red”).Open
In the above code, boxes are the collection, and open is the method. If you have multiple boxes we are defining a specific box here. Here’s another way:
Box(“Red”).Unlock = True
In the above code, again boxes are the collection, and Unlock is the property that is set to TRUE.
What is VBA used for in Excel?
In Excel, you can use VBA for different things. Here are a few:
- Enter Data: You can enter data in a cell, range of cells. You can also copy and paste data from one section to another.
- Task Automation: You can automate tasks that want you to spend a lot of time. The best example I can give is using a macro to create a pivot table.
- Create a Custom Excel Function: With VBA, you can also create a Custom User Defined Function and use it in the worksheet.
- Create Add-Ins: In Excel, you can convert your VBA codes into add-ins and share them with others as well.
- Integrate with other Microsoft Applications: You can also integrate Excel with other Microsoft applications. Like, you can enter data into a text file.
Excel Programming Fundamentals
A procedure in VBA is a set of codes or a single line of code that performs a specific activity.
- SUB: Sub procedure can perform actions but doesn’t return a value (but you can use an object to get that value).
- Function: With the help of the Function procedure, you create your function, which you can use in the worksheet or the other SUB and FUNCTION procedures (See this: VBA Function).
2. Variables and Constants
You need variables and constants to use values in the code multiple times.
- Variable: A Variable can store a value, it has a name, you need to define its data type, and you can change the value it stores. As the name suggests, “VARIABLE” has no fixed value. It is like a storage box that is stored in the system.
- Constant: A constant also can store a value, but you can’t change the value during the execution of the code.
3. Data Types
You need to declare the data type for VARIABLES and CONSTANTS.
When you specify the data type for a variable or a constant, it ensures the validity of your data. If you omit the data type, VBA applies the Variant data type to your variable (it’s the most flexible), VBA won’t guess what the data type should be.
Tip: VBA Option Explicit
4. Objects, Properties, and Methods
Visual Basic for Applications is an Object-Oriented language, and to make the best out of it; you need to understand Excel Objects.
The workbook you use in Excel has different objects, and with all those objects, there are several properties that you can access and methods that you can use.
5. Events
Whenever you do something in Excel, that’s an event: enter a value in a cell, insert a new worksheet, or insert a chart. Below is the classification of events based on the objects:
- Application Events: These are events that are associated with the Excel application itself.
- Workbook Events: These are events that are associated with the actions that happen in a workbook.
- Worksheet Events: These events are associated with the action that happens in a worksheet.
- Chart Events: These events are associated with the chart sheets (which are different from worksheets).
- Userform Events: These events are associated with the action that happens with a user form.
- OnTime Events: OnTime events are those which can trigger code at a particular point in time.
- OnKey Events: OnKey events are those which can trigger code when a particular key is pressed.
6. Range
The range object is the most common and popular way to refer to a range in your VBA codes. You need to refer to the cell address, let me tell you the syntax.
Worksheets(“Sheet1”).Range(“A1”)
7. Conditions
Just like any other programming language, you can also write codes to test conditions in VBA. It allows you to do it in two different ways.
- IF THEN ELSE: It’s an IF statement that you can use to test a condition and then run a line of code if that condition is TRUE. You can also write nesting conditions with it
- SELECT CASE: In the select case, you can specify a condition and then different cases for outcomes to test to run different lines of code to run. It’s a little more structured than the IF statement.
8. VBA Loops
You can write codes that can repeat and re-repeat an action in VBA, and there are multiple ways that you can use to write code like this.
- For Next: The best fit for using For Next is when you want to repeat a set of actions a fixed number of times.
- For Each Next: It’s perfect to use when you want to loop through a group of objects from a collection of objects.
- Do While Loop: The simple idea behind the Do While Loop is to perform an activity while a condition is true.
- Do Until Loop: In the Do Until, VBA runs a loop and continues to run it if the condition is FALSE.
9. Input Box and Message Box
- Input Box: The input Box is a function that shows an input box to the user and collects a response.
- Message Box: Message Box helps you show a message to the user but, you have an option to add buttons to the message box to get the response of the user.
10. Errors
Excel has no luck when it comes to programming errors, and you have to deal with them, no matter what.
- Syntax Errors: It’s like typos that you do while writing codes, but VBA can help you by pointing out these errors.
- Compile Errors: It comes when you write code to perform an activity, but that activity is not valid.
- Runtime Errors: A RUNTIME error occurs at the time of executing the code. It stops the code and shows you the error dialog box.
- Logical Error: It’s not an error but a mistake while writing code and sometimes can give you nuts while finding and correcting them.
Write a Macro (VBA Program) in Excel
I have a strong belief that in the initial time when someone is starting programming in Excel, HE/SHE should write more and more codes from scratch. The more codes you write from scratch, the more you understand how VBA works.
But you need to start with writing simple codes instead of jumping into complex ones. That’s WHY I don’t want you to think about anything complex right now.
You can even write a macro code to create a pivot table, but right now, I don’t want you to think that far. Let’s think about an activity that you want to perform in your worksheet, and you can write code for it.
- Go to the Developer Tab and open the Visual Basic Editor from the “Visual Basic” button.
- After that, insert a new module from the “Project Window” (Right-click ➢ Insert ➢ Module).
- After that, come to the code window and create a macro with the name “Enter Done” (we are creating a SUB procedure), just like I have below.
- From here, you need to write a code which we have just discussed above. Hold for second and think like this: You need to specify the cell where you want to insert the value and then the value which you wish to enter.
- Enter the cell reference, and for this, you need to use RANGE object and specify the cell address in it, like below:
- After that, enter a dot, and the moment you add a dot, you’ll have a list of properties that you can define and activities that you can do with the range.
- From here, you need to select the “Value” property and set the text which you want to insert in the cell “A1” and when to do it, your code with look something like below.
- Finally, above the line of code, enter the text (‘this code enters the value “Done” in the cell A5). It’s a VBA Comment that you can insert to define the line of code that you have written.
Sub Enter_Done()
'this code enters the value “Done” in the cell A5
Range("A1").Value = "Done"
End Sub
Let’s understand this…
You can split this code into two different parts.
- In the FIRST part, we have specified the cell address by using the RANGE object. And, to refer to a cell using a range object you need to wrap the cell address with double quotes (you can also use square brackets).
- In the SECOND part, we have specified the value to enter into the cell. What you have done is, you have defined the value property for cell A5 by using “.Value”. After that, the next thing that you have specified is the value against the value property. Whenever you are defining a value (if it’s text), you need to wrap that value inside double quotation marks.
Here I have listed some of the most amazing tutorials (not in any particular sequence) that can help you learn VBA in NO TIME.