Время на прочтение
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) — тут скобки нужны постоянно.
Congratulations, you have completed the Excel 2007 tutorial that explains the VBA environment in Microsoft Excel 2007.
Tutorial Summary
Excel 2007 is a version of Excel developed by Microsoft that runs on the Windows platform.
In this Excel 2007 tutorial, we covered the following:
- What is VBA?
- How to open the VBA environment
- Project Explorer
- Properties Window
- Code Window
- Immediate Window
- Watch Window
Each version of Excel can «look and feel» completely different from another. As such, we recommend that you try one of our other Excel tutorials to become familiar with the Excel version that you will be using.
Other Excel Tutorials
Now that you have learned about the VBA environment in Excel 2007, learn more.
Try one of our other Excel tutorials:
Excel 2016 Tutorials
Excel 2013 Tutorials
Excel 2011 for Mac Tutorials
Excel 2010 Tutorials
Excel 2007 Tutorials
Excel 2003 Tutorials
There is still more to learn!
August 2007
In this day and age of ‘too much information and not enough time’, the ability to get to the bottom line quickly and in a concise method is what excels companies to the top of their industry. The techniques in this book will allow you to do things you only dreamt of.
category: VBA
covers: Excel 2007
- 576 Pages
- Publisher: QUE Publishing
- PDF ISBN: 978-0-7897-3682-6
«Develop your Excel macro programming skills using VBA instantly with proven techniques and STOP producing manual reports!»
As the macro language for Microsoft Excel, Visual Basic for Applications enables you to achieve tremendous efficiencies in your day-to-day use of Excel. Stop producing those manual reports! The solution is to automate those manual processes in Excel using Visual Basic for Applications (VBA). Every copy of Excel shipped since 1993 includes VBA lurking behind the cells of the worksheet.
As MrExcel Consulting, Jelen and Syrstad have written code for hundreds of clients around the world. With 200 million users of Microsoft Excel worldwide, there are too many potential clients and not enough consultants to go around. This book describes everything you could conceivably need to know to automate reports and design applications in Excel VBA. Whether you want to write macros for yourself, automate reports for your office, or design full-blown applications for others, this book is for you.
«You are an expert at Excel, but the Macro Recorder doesn’t work and you can’t make heads or tails out of the recorded code!»
If this is you, buy this book! Macros that you record today might work today but not tomorrow. Recorded macros might handle a dataset with 14 records but not one with 12 or 16 records. These are all common problems with the macro recorder that unfortunately cause too many Excel gurus to turn away from writing macros.
«Learn why the Macro Recorder does not work AND the steps needed to convert recorded code into code that will work!»
There are two barriers to entry in learning Excel VBA. First, the macro recorder does a lousy job with about 10% of the code that it records. Something might work today but not tomorrow. Learn the steps needed to convert recorded code into code that will work every day with every dataset. Second, although «Visual Basic» sounds like «BASIC», they are not at all similar. If you’ve ever taken a class in BASIC or any other procedural language, this is actually a hindrance to figuring out VBA.
In this book, Jelen and Syrstad reveal exactly why the macro recorder fails. They will teach you how to understand recorded code so that you can quickly edit and improve the 10% of recorded code that is preventing your applications from running flawlessly every day.
«Learn how to customize the ribbon using VBA and RibbonX!»
Excel 2007 introduces a new ribbon interface. All of your old code to add items to the Excel 2003 menu will cause ugly buttons to be added to the Add-Ins tab. Now…learn the simple steps to create new custom groups on an existing tab or how to add your own ribbon tab! See how to add custom images to a button, and more!
Table of Contents
-
Introduction
- Getting Results with VBA
- What Is in This Book
- The Future of VBA and Windows Versions of Excel
- Special Elements and Typographical Conventions
- Code Files
- Next Steps
-
1. Unleash the Power of Excel with VBA
- The Power of Excel
- Barriers to Entry
- The Macro Recorder Doesn’t Work!
- Knowing Your Tools — The Developer Ribbon
- Macro Security
- Overview of Recording, Sorting, and Running a Macro
- Running a Macro
- Using New File Types in Excel 2007
- Understanding the Visual Basic Editor
- Understanding Shortcomings of the Macro Recorder
- Next Steps: Learning VBA Is the Solution
-
2. This Sounds Like BASIC, So Why Doesn’t It Look Familiar?
- I Can’t Understand This Code
- Understanding the Parts of VBA «Speech»
- Is VBA Really This Hard? No!
- Examining Recorded Macro Code — Using the VB Editor and Help
- Using Debugging Tools to Figure Out Recorded Code
- The Ultimate Reference to All Objects, Methods, Properties
- Five Easy Tips for Cleaning Up Recorded Code
- Putting It All Together — Fixing the Recorded Code
- Next Steps
-
3. Referring to Ranges
- The Range Object
- Using the Upper-Left and Lower-Right Corners of a Selection to Specify a Range
- Named Ranges
- Shortcut for Referencing Ranges
- Referencing Ranges in Other Sheets
- Referencing a Range Relative to Another Range
- Using the Cells Property to Select a Range
- Using the Offset Property to Refer to a Range
- Using the Resize Property to Change the Size of a Range
- Using the Columns and Rows Properties to Specify a Range
- Using the Union Method to Join Multiple Ranges
- Using the Intersect Method to Create a New Range from Overlapping Ranges
- Using the ISEPMTY Function to Check Whether a Cell Is Empty
- Using the CurrentRegion Property to Quickly Select a Data Range
- Using the Areas Collection to Return a Noncontiguous Range
- Referencing Tables
- Next Steps
-
4. User-Defined Functions
- Creating User-Defined Functions
- Custom Functions — Example and Explanation
- Sharing UDF’s
- Useful Custom Excel Functions
- Next Steps
-
5. Looping and Flow Control
- For…Next Loops
- Do Loops
- The VBA Loop: For Each
- Flow Control: Using If…Then…Else…End If
- Either/Or Decisions: If…Then…Else…End If
- Next Steps
-
6. R1C1-Style Formulas
- Referring to Cells: A1 Versus R1C1 References
- Switching Excel to Display R1C1 Style References
- The Miracle of Excel Formulas
- Explanation of R1C1 Reference Style
- Conditional Formatting — R1C1 Required
- Array Formulas Require R1C1 Formulas
-
7. Migrating Your Excel 2003 Apps to 2007 (a.k.a.What’s New in Excel 2007 and What Won’t Work Anymore!)
- If It’s Changed in the Front End, It’s Changed in VBA
- The Macro Recorder Won’t Record Actions That It Did Record in Earlier Excel Versions
- Learning the new Objects and Methods
- Compatibility Mode
- Next Steps
-
8. Create and Manipulate Names in VBA
- Excel Names
- Global Versus Local Names
- Adding Names
- Deleting Names
- Adding Comments
- Types of Names
- Hiding Names
- Checking for the Existence of a Name
- Next Steps
-
9. Event Programming
- Levels of Events
- Using Events
- Workbook Events
- Worksheet Events
- Quickly Entering Military Time into a Cell
- Chart Sheet Events
- Application-Level Events
- Next Steps
-
10. Userforms—An Introduction
- User Interaction Methods
- Creating a Userform
- Calling and Hiding a Userform
- Programming the Userform
- Programming Controls Using Basic Form Controls
- Verifying Field Entry
- Illegal Window Closing
- Getting a Filename
-
11. Charts
- Charting in Excel 2007
- Coding for New Charting Features in Excel 2007
- Referencing Charts and Chart Objects in VBA Code
- Creating a Chart
- Recording Commands from the Layout or Design Ribbons
- Using SetElement to Emulate Changes on the Layout Ribbon
- Changing a Chart Title Using VBA
- Emulating Changes on the Format Ribbon
- Using the Watch Window to Discover Object Settings
- Using the Watch Window to Learn Rotation Settings
- Creating Advanced Charts
- Exporting a Chart as a Graphic
- Creating Pivot Charts
- Next Steps
-
12. Data Mining with Advanced Filter
- Advanced Filter Is Easier in VBA Than in Excel
- Using Advanced Filter to Extract a Unique List of Values
- Using Advanced Filter with Criteria Ranges
- Using Filter in Place in Advanced Filter
- The Real Workhorse: xlFilterCopy with All Records Rather than Unique Records Only
- Using AutoFilter
- Next Steps
-
13. Using VBA to Create Pivot Tables
- Introducing Pivot Tables
- Understanding Versions
- Creating a Vanilla Pivot Table in the Excel Interface
- Building a Pivot Table in Excel VBA
- Creating a Report Showing Revenue by Product
- Handling Additional Annoyances When Creating Your Final Report
- Addressing Issues with Two or More Data Fields
- Summarizing Date Fields with Grouping
- Using Advanced Pivot Table Techniques
- Controlling the Sort Order Manually
- Using Sum, Average, Count, Min, Max, and More
- Creating Report Percentages
- Using New Pivot Table Features in Excel 2007
- Next Steps
-
14. Excel Power
- File Operations
- Combining and Separating Workbooks
- Working with Cell Comments
- Utilities to Wow Your Clients
- Techniques for VBA Pros
- Cool Applications
- Next Steps
-
15. Data Visualizations and Conditional Formatting
- Introduction to Data Visualizations
- New VBA Methods and Properties for Data Visualizations
- Adding Data Bars to a Range
- Adding Color Scales to a Range
- Adding Icon Sets to a Range
- Using Visualization Tricks
- Using Other Conditional Formatting Methods
- Next Steps
-
16. Reading from and Writing to the Web
- Getting Data from the Web
- Using Streaming Data
- Using Application.OnTime to Periodically Analyze Data
- Publishing Data to a Web Page
- Trusting Web Content
- Next Steps
-
17. XML in Excel 2007 Professional
- What is XML?
- Simple XML Rules
- Universal File Format
- XML as the New Universal File Format
- The Alphabet Soup of XML
- Microsoft’s Use of XML as a File Type
- Using XML Data from Amazon.com
- Next Steps
-
18. Automating Word
- Early Binding
- Late Binding
- Creating and Referencing Objects
- Using Constant Values
- Understanding Word’s Objects
- Controlling Word’s Form Fields
- Next Steps
-
19. Arrays
- Declare an Array
- Fill an Array
- Empty an Array
- Arrays Can Make It Easier to Manipulate Data, But Is That All?
- Dynamic Arrays
- Passing an Array
- Next Steps
-
20. Text File Processing
- Importing from Text Files
- Writing Text Files
- Next Steps
-
21. Using Access as a Back End to Enhance Multi-User Access to Data
- ADO Versus DAO
- The Tools of ADO
- Adding a Record to the Database
- Retrieving Records from the Database
- Updating an Existing Record
- Deleting Records via ADO
- Summarizing Records via ADO
- Other Utilities via ADO
- Next Steps
-
22. Creating Classes, Records, and Collections
- Inserting a Class Module
- Trapping Application and Embedded Chart Events
- Creating a Custom Object
- Using a Custom Object
- Using Property Let and Property Get to Control How Users Utilize Custom Objects
- Collections
- User-Defined Types (UDTs)
- Next Steps
-
23. Advanced Userform Techniques
- Using the UserForm Toolbar in the Design of Controls on Userforms
- More Userform Controls
- Controls and Collections
- Modeless Userforms
- Using Hyperlinks in Userforms
- Adding Controls at Runtime
- Adding Help to the Userform
- Multicolumn List Boxes
- Transparent Forms
- Next Steps
-
24. Windows Application Programming Interface (API)
- What Is the Windows API?
- Understanding an API Declaration
- Using an API Declaration
- API Examples
- Finding More API Declarations
- Next Steps
-
25. Handling Errors
- What Happens When an Error Occurs
- Basic Error Handling with the On Error GoTo Syntax
- Train Your Clients
- Errors While Developing Versus Errors Months Later
- The Ills of Protecting Code
- Password Cracking
- More Problems with Passwords
- Errors Caused by Different Versions
- Next Steps
-
26. Customizing the Ribbon to Run Macros
- Out with the Old, In with the New
- Where to Add Your Code:customui Folder and File
- Creating the Tab and Group
- Adding a Control to Your Ribbon
- Accessing the File Structure
- Understanding the RELS File
- Renaming the Excel File and Opening the Workbook
- Using Images on Buttons
- Converting an Excel 2003 Custom Toolbar to Excel 2007
- Troublshooting Error Messages
- Other Ways to Run a Macro
- Next Steps
-
27. Add-Ins
- Characteristics of Standard Add-Ins
- Converting an Excel Workbook to an Add-in
- Having Your Client Install the Add-In
- Using a Hidden Workbook as an Alternative to an Add-In
- Using a Hidden Code Workbook to Hold All Macros and Forms
- Next Steps
Where to Buy
Other Editions
VBA and Macros for Microsoft Excel
May 2004
In this book, Jelen and Syrstad reveal exactly why the macro recorder fails. They will teach you how to understand recorded code so that you can quickly edit and improve the 10% of recorded code that is preventing your applications from running flawlessly every day.
Microsoft Excel 2019 VBA and Macros
November 2018
Use this guide to automate virtually any routine Excel task: save yourself hours, days, maybe even weeks. Make Excel do things you thought were impossible, discover macro techniques you won’t find anywhere else, and create automated reports that are amazingly powerful.
VBA & Macros for Microsoft Excel 2016
November 2015
Use this guide to automate virtually any routine task: save yourself hours, days, maybe even weeks! Make Excel do things you thought were impossible, discover macro techniques you won’t find anywhere else, and create automated reports that are amazingly powerful.
VBA and Macros: Microsoft Excel 2010
July 2010
Using Microsoft Excel 2010 VBA scripting features, Excel users can save dozens — or even hundreds — of hours per year. But most Excel users have never written a VBA script: many haven’t even used Excel’s built-in Macro Recorder. VBA and Macros is the solution. One simple step at a time, two leading Excel VBA scripting experts teach all the techniques needed to automate virtually any Excel task and customize virtually any Excel report or business solution.
VBA and Macros Microsoft Excel 2013
February 2013
Use Excel 2013 VBA and Macros to automate virtually any routine task, and save yourself hours, days, maybe even weeks. Then, learn how to make Excel do things you thought were simply impossible! You’ll discover macro techniques you won’t find anywhere else and learn how to create automated reports that are amazingly powerful and useful.
Related Products
Статья предназначена для людей, которые хотят научиться писать программы на встроенном в Excel Visual Basic (VBA), но абсолютно не знают что это такое.
Для начала — несколько слов о том, зачем это нужно. Средство VBA в MS Excel, представляет нам универсальный инструмент для быстрого и точного решения любых индивидуальных пользовательских задач в MS Excel. Можно конечно использовать и встроенные в MS Excel функции которых великое множество, однако они далеко не всегда решают поставленную задачу.
Итак, создадим для примера простейшую программу. Будем использовать MS Excel 2007. Откройте MS Excel, нажмите «сохранить как» и сохраните файл Вашей программы нажав «Книга ексель с поддержкой макросов».
Далее необходимо включить вкладку «Разработчик». Для этого нажимаем «Параметры Excel»
Ставим галочку на «Показывать вкладку «Разработчик» на ленте»
После этого на ленте, в верху листа Excel, появится вкладка «Разработчик», которая содержит в себе инструменты для создания VBA макросов.
Представим себе небольшую задачу — допустим мы имеем 2 числа, нам необходимо их сложить и по полученной сумме получить значение из нашей таблицы.
Поставим в ячейки Листа1 следующие значения:
на Листе2 заполним ячейки, создав таблицу из 2 столбцов
Далее перейдем на Лист1, нажмем на вкладку «Разработчик», «Вставить», на ней выберем кнопку
и нарисуем кнопку на Листе1, после чего сразу появится окно «Назначить макрос объекту», в котором выбираем «Создать»
После этого откроется редактор Visual Basic, и автоматически напишется наименование процедуры, которая будет выполняться при нажатии кнопки. Под названием процедуры впишем следующий код:
Код выполнит следующие действия:
- MsgBox («Это мой первый Макрос!») — сообщение
- Переменной q присваивается значение ячейки на Листе1, с координатами 2 строка, 2 столбец
- Переменной w присваивается значение ячейки на Листе1, с координатами 3 строка, 2 столбец
- В ячейку на Листе1, с координатами 4 строка, 2 столбец, записывается сумма q+w
Далее получим значение столбца В из Листа2, которое расположено на той же строке где значение нашей суммы совпадает с значением столбца А.
Введем следующий код:
и получим при нажатии на кнопку следующий результат:
из результата видно что макрос подобрал число из таблицы на Листе2 в соответствии с нашей суммой.
Не буду вдаваться в подробности этого хитрого кода, так как цель данной статьи — начать писать макросы. Для VBA в интернете есть масса ресурсов, с примерами и разъяснениями, хотя для автоматизации расчетов вполне хватит объема информации в справке.
Таким образом с помощью VBA возможно автоматизировать расчет любой сложности и последовательности. Справочные таблицы можно копировать из различной литературы на отдельные листы Excel и писать последовательный расчет с кнопками.