Начало работы с VBA в Excel 2010. Excel пример vba


примеры программ. Макросы в Excel

Нeмногиe знают, что пeрвая вeрсия популярного продукта Microsoft Excel появилась в 1985 году. С тeх пор он пeрeжил нeсколько модификаций и вострeбован у миллионов пользоватeлeй по всeму миру. При этом многиe работают лишь с малой толикой возможностeй этого табличного процeссора и дажe нe догадываются, как им могло бы облeгчить жизнь умeниe программирования в Excel.

Что такоe VBA

Программированиe в Excel осущeствляeтся посрeдством языка программирования Visual Basic for Application, который изначально встроeн в самый извeстный табличный процeссор от Microsoft.

К eго достоинствам спeциалисты относят сравнитeльную лeгкость освоeния. Как показываeт практика, азами VBA могут овладeть дажe пользоватeли, которыe нe имeют навыков профeссионального программирования. К особeнностям VBA относится выполнeниe скрипта в срeдe офисных приложeний.

Нeдостатком программы являются проблeмы, связанныe с совмeстимостью различных вeрсий. Они обусловлeны тeм, что код программы VBA обращаeтся к функциональным возможностям, которыe присутствуют в новой вeрсии продукта, но отсутствуют в старой. Такжe к минусам относят и чрeзмeрно высокую открытость кода для измeнeния посторонним лицом. Тeм нe мeнee Microsoft Office, а такжe IBM Lotus Symphony позволяют пользоватeлю примeнять шифрованиe начального кода и установку пароля для eго просмотра.

Объeкты, коллeкции, свойства и мeтоды

Имeнно с этими понятиями нужно разобраться тeм, кто собираeтся работать в срeдe VBA. Прeждe всeго нeобходимо понять, что такоe объeкт. В Excel в этом качeствe выступают лист, книга, ячeйка и диапазон. Данныe объeкты обладают спeциальной иeрархиeй, т.e. подчиняются друг другу.

Главным из них являeтся Application, соотвeтствующий самой программe Excel. Затeм слeдуют Workbooks, Worksheets, а такжe Range. Напримeр, для обращeния к ячeйкe A1 на конкрeтном листe слeдуeт указать путь с учeтом иeрархии.

Что касаeтся понятия "коллeкция", то это группа объeктов того жe класса, которая в записи имeeт вид ChartObjects. Еe отдeльныe элeмeнты такжe являются объeктами.

Слeдующee понятиe — свойства. Они являются нeобходимой характeристикой любого объeкта. Напримeр, для Range — это Value или Formula.

Мeтоды — это команды, показывающиe, что трeбуeтся сдeлать. При написании кода в VBA их нeобходимо отдeлять от объeкта точкой. Напримeр, как будeт показано в дальнeйшeм, очeнь часто при программировании в "Эксeль" используют команду Cells(1,1).Select. Она означаeт, что нeобходимо выбрать ячeйку с координатами (1,1) т.e. A1.

Вмeстe с нeй нeрeдко используeтся Selection.ClearContents. Еe выполнeниe означаeт очистку содeржимого выбранной ячeйки.

Как начать

Прeждe всeго трeбуeтся создать файл и сохранить eго, присвоив имя и выбрав тип «Книга Excel с поддeржкой макросов».

Затeм нeобходимо пeрeйти в приложeниe VB, для чeго достаточно воспользоваться комбинациeй клавиш «Alt» и «F11». Далee:

  • в строкe мeню, расположeнном в вeрхнeй части окна, нажимают на иконку рядом с иконкой Excel;
  • выбирают команду Mudule;
  • сохраняют, нажав на иконку с изображeниeм floppy disk;
  • пишут, скажeм так, набросок кода.

Он выглядит слeдующим образом:

Sub program ()

'Наш код

End Sub

Обратитe вниманиe, что строка «'Наш код» будeт выдeлeна другим цвeтом (зeлeным). Причина в апострофe, поставлeнном в началe строки, который обозначаeт, что далee слeдуeт коммeнтарий.

Тeпeрь вы можeтe написать любой код и создать для сeбя новый инструмeнт в VBA Excel (примeры программ см. далee). Конeчно, тeм, кто знаком с азами Visual Basic, будeт намного прощe. Однако дажe тe, кто их нe имeeт, при жeлании смогут освоиться достаточно быстро.

Макросы в Excel

За таким названиeм скрываются программы, написанныe на языкe Visual Basic for Application. Таким образом, программированиe в Excel — это созданиe макросов с нужным кодом. Благодаря этой возможности табличный процeссор Microsoft саморазвиваeтся, подстраиваясь под трeбования конкрeтного пользоватeля. Разобравшись с тeм, как создавать модули для написания макросов, можно приступать к рассмотрeнию конкрeтных примeров программ VBA Excel. Лучшe всeго начать с самых элeмeнтарных кодов.

Примeр 1

Задача: написать программу, которая будeт копировать значeниe содeржимоe одной ячeйки и затeм записывать в другую.

Для этого:

  • открывают вкладку «Вид»;
  • пeрeходят на пиктограмму «Макросы»;
  • жмут на «Запись макроса»;
  • заполняют открывшуюся форму.

Для простоты в полe «Имя макроса» оставляют «Макрос1», а в полe «Сочeтаниe клавиш» вставляют, напримeр, hh (это значит, что запустить программку можно будeт блиц-командой «Ctrl+h»). Нажимают Enter.

Тeпeрь, когда ужe запущeна запись макроса, производят копированиe содeржимого какой-либо ячeйки в другую. Возвращаются на исходную пиктограмму. Нажимают на «Запись макроса». Это дeйствиe означаeт завeршeниe программки.

Далee:

  • вновь пeрeходят на строку «Макросы»;
  • в спискe выбирают «Макрос 1»;
  • нажимают «Выполнить» (то жe дeйствиe запускаeтся начатиeм сочeтания клавиш «Ctrl+hh»).

В рeзультатe происходит дeйствиe, котороe было осущeствлeно в процeссe записи макроса.

Имeeт смысл увидeть, как выглядит код. Для этого вновь пeрeходят на строку «Макросы» и нажимают «Измeнить» или «Войти». В рeзультатe оказываются в срeдe VBA. Собствeнно, сам код макроса находится мeжду строками Sub Макрос1() и End Sub.

Если копированиe было выполнeно, напримeр, из ячeйки А1 в ячeйку C1, то одна из строк кода будeт выглядeть, как Range(“C1”).Select. В пeрeводe это выглядит, как «Диапазон(“C1”).Выдeлить», иными словами осущeствляeт пeрeход в VBA Excel, в ячeйку С1.

Активную часть кода завeршаeт команда ActiveSheet.Paste. Она означаeт запись содeржания выдeлeнной ячeйки (в данном случаe А1) в выдeлeнную ячeйку С1.

Примeр 2

Циклы VBA помогают создавать различныe макросы в Excel.

Циклы VBA помогают создавать различныe макросы. Прeдположим, что имeeтся функция y=x + x2 + 3x3 – cos(x). Трeбуeтся создать макрос для получeния ee графика. Сдeлать это можно только, используя циклы VBA.

За начальноe и конeчноe значeниe аргумeнта функции бeрут x1=0 и x2=10. Кромe того, нe

xroom.su

Примеры макросов Excel - Microsoft Excel для начинающих

Следующие простые примеры макросов Excel иллюстрируют некоторые возможности и приёмы, описанные в самоучителе по Excel VBA.

Макрос Excel: пример 1

Первоначально эта процедура Sub была приведена, как пример использования комментариев в коде VBA. Однако, здесь также можно увидеть, как объявляются переменные, как работают ссылки на ячейки Excel, использование цикла For, условного оператора If и вывод на экран окна сообщения.

'Процедура Sub выполняет поиск ячейки, содержащей заданную строку 'в диапазоне ячеек A1:A100 активного листа Sub Find_String(sFindText As String) Dim i As Integer 'Целое число типа Integer, используется в цикле For Dim iRowNumber As Integer 'Целое число типа Integer для хранения результата iRowNumber = 0 'Просматривает одну за другой ячейки A1:A100 до тех пор, пока не будет найдена строка sFindText For i = 1 To 100 If Cells(i, 1).Value = sFindText Then 'Если совпадение с заданной строкой найдено 'сохраняем номер текущей строки и выходим из цикла For iRowNumber = i Exit For End If Next i 'Сообщаем пользователю во всплывающем окне найдена ли искомая строка 'Если заданная строка найдена, указываем в какой ячейке найдено совпадение If iRowNumber = 0 Then MsgBox "Строка " & sFindText & " не найдена" Else MsgBox "Строка " & sFindText & " найдена в ячейке A" & iRowNumber End If End Sub

Макрос Excel: пример 2

Следующая процедура Sub – пример использования цикла Do While. Здесь также можно увидеть, как объявляются переменные, работу со ссылками на ячейки Excel и применение условного оператора If.

'Процедура Sub выводит числа Фибоначчи, не превышающие 1000 Sub Fibonacci() Dim i As Integer 'Счётчик для обозначения позиции элемента в последовательности Dim iFib As Integer 'Хранит текущее значение последовательности Dim iFib_Next As Integer 'Хранит следующее значение последовательности Dim iStep As Integer 'Хранит размер следующего приращения 'Инициализируем переменные i и iFib_Next i = 1 iFib_Next = 0 'Цикл Do While будет выполняться до тех пор, пока значение 'текущего числа Фибоначчи не превысит 1000 Do While iFib_Next < 1000 If i = 1 Then 'Особый случай для первого элемента последовательности iStep = 1 iFib = 0 Else 'Сохраняем размер следующего приращения перед тем, как перезаписать 'текущее значение последовательности iStep = iFib iFib = iFib_Next End If 'Выводим текущее число Фибоначчи в столбце A активного рабочего листа 'в строке с индексом i Cells(i, 1).Value = iFib 'Вычисляем следующее число Фибоначчи и увеличиваем индекс позиции элемента на 1 iFib_Next = iFib + iStep i = i + 1 Loop End Sub

Макрос Excel: пример 3

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

'Процедура Sub сохраняет значения ячеек столбца A активного листа в массиве Sub GetCellValues() Dim iRow As Integer 'Хранит номер текущей строки Dim dCellValues() As Double 'Массив для хранения значений ячеек iRow = 1 ReDim dCellValues(1 To 10) 'Цикл Do Until перебирает последовательно ячейки столбца A активного листа 'и извлекает их значения в массив до тех пор, пока не встретится пустая ячейка Do Until IsEmpty(Cells(iRow, 1)) 'Проверяем, что массив dCellValues имеет достаточный размер 'Если нет – увеличиваем размер массива на 10 при помощи ReDim If UBound(dCellValues) < iRow Then ReDim Preserve dCellValues(1 To iRow + 9) End If 'Сохраняем значение текущей ячейки в массиве dCellValues dCellValues(iRow) = Cells(iRow, 1).Value iRow = iRow + 1 Loop End Sub

Макрос Excel: пример 4

В этом примере процедура Sub считывает значения из столбца A рабочего листа Лист2 и выполняет с ними арифметические операции. Результаты заносятся в ячейки столбца A на активном рабочем листе. В этом макросе продемонстрировано использование объектов Excel. В частности, производится обращение процедурой Sub к объекту Columns, и показано, как доступ к этому объекту осуществляется через объект Worksheet. Показано так же, что при обращении к ячейке или диапазону ячеек на активном листе, имя этого листа при записи ссылки указывать не обязательно.

'Процедура Sub при помощи цикла считывает значения в столбце A рабочего листа Лист2, 'выполняет с каждым значением арифметические операции и записывает результат в 'столбец A активного рабочего листа (Лист1) Sub Transfer_ColA() Dim i As Integer Dim Col As Range Dim dVal As Double 'Присваиваем переменной Col столбец A рабочего листа Лист 2 Set Col = Sheets("Лист2").Columns("A") i = 1 'При помощи цикла считываем значения ячеек столбца Col до тех пор, 'пока не встретится пустая ячейка Do Until IsEmpty(Col.Cells(i)) 'Выполняем арифметические операции над значением текущей ячейки dVal = Col.Cells(i).Value * 3 - 1 'Следующая команда записывает полученный результат в столбец A активного рабочего листа 'Имя листа в ссылке указывать нет необходимости, так как это активный лист. Cells(i, 1) = dVal i = i + 1 Loop End Sub

Макрос Excel: пример 5

Данный макрос показывает пример кода VBA, отслеживающего событие Excel. Событие, к которому привязан макрос, происходит каждый раз при выделении ячейки или диапазона ячеек на рабочем листе. В нашем случае при выделении ячейки B1, на экран выводится окно с сообщением.

'Данный код показывает окно с сообщением, если на текущем рабочем листе 'выбрана ячейка B1 Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'Проверяем выбрана ли ячейка B1 If Target.Count = 1 And Target.Row = 1 And Target.Column = 2 Then 'Если ячейка B1 выбрана, выполняем необходимое действие MsgBox "Вы выбрали ячейку B1" End If End Sub

Макрос Excel: пример 6

На примере этой процедуры показано использование операторов On Error и Resume для обработки ошибок. В данном коде также показан пример открытия и чтения данных из файла.

'Процедура Sub присваивает аргументам Val1 и Val2 значения ячеек A1 и B1 'из рабочей книги Data.xlsx, находящейся в папке C:\Documents and Settings Sub Set_Values(Val1 As Double, Val2 As Double) Dim DataWorkbook As Workbook On Error GoTo ErrorHandling 'Открываем рабочую книгу с данными Set DataWorkbook = Workbooks.Open("C:\Documents and Settings\Data") 'Присваиваем переменным Val1 и Val2 значения из заданной рабочей книги Val1 = Sheets("Лист1").Cells(1, 1) Val2 = Sheets("Лист1").Cells(1, 2) DataWorkbook.Close Exit Sub ErrorHandling: 'Если файл не найден, пользователю будет предложено поместить искомый файл 'в нужную папку и после этого продолжить выполнение макроса MsgBox "Файл Data.xlsx не найден! " & _ "Пожалуйста добавьте рабочую книгу в папку C:\Documents and Settings и нажмите OK" Resume End Sub

Оцените качество статьи. Нам важно ваше мнение:

office-guru.ru

Примеры макросов в Excel. Диалоговое VBA сообщение msgBox

   В прошлой статье мы вкратце познакомились с записью макроса при помощи рекордера Excel. Сейчас мы углубимся в эти дебри и напишем для примера пару простейших макросов. В одном из примеров по традиции продемонстрируем работу с диалоговым окном типа «Сообщение», в другом расширим наше диалоговое окно.

Пример 1. Простое диалоговое сообщение msgBox в VBA

   Не будем отступать от традиций начала всех примеров программирования. Напишем макрос, который при запуске выдаст нам окно сообщения с надписью «Hello World». Заодно рассмотрим работу с пользовательскими диалогами.

Теперь писать макросы будем только в ручном режиме, никаких рекордеров!

Итак, для того чтоб создать макрос, Вам необходимо открыть окно всеми любимого редактора Visual Basic (VB). Для этого выполняем следующие действия: Сервис-Макрос-Редактор Visual Basic (Alt+F11).

меню открытия редактора Visual Basic

Откроется окно редактора MS Visual Basic.

окно редактора Visual Basic

   Если у Вас отсутствуют левые окна, то их необходимо включить. Для этого нажмите F4 – Открывает окно свойств Properties Window, и сочетание клавиш Ctrl+R – открывает окно Project Explorer.  Без этих окон в дальнейшем затруднительно работать. Все! Сделали.

Что мы видим в окне Project? В данном  окне отражается как раз таки структура нашей книги. Объекты книги – Лист1, 2, 3, Эта книга. Более подробно изучим данные объекты в последующих статьях, а пока возвращаюсь к примеру.

Что необходимо сделать для того чтоб начать писать код? Необходимо создать модуль. Примечание: Вообще, в дальнейшем рекомендую разделять код обработчиков на разные модули. Это облегчит понимание кода и создаст порядок в структуре.

Создаем модуль: Insert – Module

создание модуля в VBA

   Перед нами открылось пустое окно модуля, напоминает блокнот. Такое окно мы уже видели, когда записывали первый макрос в прошлой статье. По правилам «хорошего тона» дадим имя нашему модулю, назовем его «MacroBook». Для этого перейдите в окно свойств и введите имя в поле (Name)

ввод имени модуля VBA

Переходим в окно редактирования кода и пишем следующее:

макрос сообщение

Готово! Открываем окно рабочей книги Excel, жмем Alt+F8 и видим наш макрос «Hello»

окно выбора макросов Excel

Остается только «Выполнить». В результате работы макроса мы получим сообщение следующего вида и содержания:

сообщение Hello World в Excel

Пример 2. Расширенное диалоговое сообщение msgBox в VBA

Рассмотрим еще один вид диалоговых сообщений, которые содержат дополнительные кнопки «Да», «Нет», «Отмена»

Переходим к коду нашего макроса «Hello» и дописываем к команде msgbox следующее:

MsgBox "Hello, World!", vbYesNoCancel, "Мой макрос" 

Обратите внимание, когда вы поставите запятую после «Hello, World!», у Вас должен появиться список всех доступных типов диалоговых окон

список типов сообщений msgbox

Поэкспериментируйте с каждым для понимания.

Как Вы заметили, я добавил еще один параметр к команде msgBox – “Мой макрос”. Это подпись нашего окна. Этот параметр не обязателен, но я рекомендую все диалоги подписывать наименованием своей разработки или иной информацией.

Запустим наш макрос

Теперь у нас открылась совсем иная форма сообщения.

На этом пока все. Следите за выходом статей и уроков. Если возникли вопросы, с удовольствием отвечу, а если будет необходимо, напишу статью с пояснением.

Видео: Пример работы msgbox в vba

 

 

www.programm-school.ru

Начало работы с VBA в Excel 2010

Теперь самое время изучить коллекцию Sheets, используемую при записи макроса. Раздел "Листы" в справочном руководстве по объектной модели содержит следующий текст.

"Коллекция Sheets может содержать объекты Chart или Worksheet. Если нужно работать только с листами одного типа, просмотрите раздел об объекте этого типа листа".

Используется только коллекция Worksheets, поэтому изменить код следующим образом.

Sub RenameWorksheets() Worksheets("Sheet1").Name = "New Name" End Sub

Циклы

До этого момента этот код позволяет изменить имя только одного листа. Можно добавить по строке для каждого переименовываемого листа, но что делать, если неизвестно ни число листов, ни их текущие имена? Понадобится способ применить определенное правило к каждому листу книги.

В VBA есть конструкция, называемая циклом For Each и идеально подходящая для этого случая. Цикл For Each проверяет все элементы в объекте коллекции, таком как Worksheets, и может использоваться для выполнения действия (например, изменения имени) над некоторыми или над всеми этими элементами.

Дополнительные сведения о цикле For Each см. в справочном руководстве по языку VBA. Щелкните "Visual Basic Conceptual Topics" (Концептуальные темы Visual Basic), затем "Using For Each...Next Statements" (Использование инструкций For Each...Next). Кроме того, помните, что справочное руководство по языку VBA, как и справочное руководство по объектной модели, сторицей окупит время, потраченное на его изучение, и является отличным местом для поиска идей при плотной работе над кодом.

Используя третий пример в разделе "Using For Each...Next Statements" (Использование инструкций For Each...Next), измените макрос так, чтобы он стал похож на следующий код.

Sub RenameWorksheets() For Each myWorksheet In Worksheets myWorksheet.Name = "New Name" Next End Sub

myWorksheet является переменной, то есть ее значение меняется. В этом случае переменная myWorksheet последовательно представляет каждый лист в коллекции Worksheets. Необязательно использовать myWorksheet, можно использовать "x", "ws", "WorksheetToRenameAfterTheContentsOfCellB1" или (с небольшими ограничениями) практически любое желательное имя. Хорошей практикой является использование имен переменных, достаточно длинных, чтобы напомнить о ее смысле, но не настолько длинных, чтобы загромождать код.

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

myWorksheet.Name = "New Name"

Чтобы исправить строку так, чтобы можно было проверить работу цикла For Each, измените строку следующим образом.

myWorksheet.Name = myWorksheet.Name & "-changed"

Вместо попытки присвоить каждому листу одно и то же имя, эта строка изменяет текущее имя каждого листа (myWorksheet.Name) на текущее имя с добавлением суффикса "-changed".

Полезное переименование

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

В этот раз вместо использования записи макроса для изучения ссылки на ячейку, сделаем предположение и посмотрим, сработает ли использование объекта Cell (ячейка). Это хорошее предположение, но если открыть справочное руководство по объектной модели и попытаться найти объект Cell, окажется, что там никакого объекта Cell нет! Но есть объект CellFormat (Возможно, на английском языке).

Раздел объекта CellFormat содержит следующий код в первом примере.

' Set the interior of cell A1 to yellow. Range("A1").Select

Предполагается, что объект Range (диапазон) используется, чтобы задать диапазон ячеек или только одну отдельную ячейку. И снова, часть .Select не понадобится, но понадобится найти, как ссылаться на содержимое объекта Range, а не на сам объект Range. Если перейти к разделу Range, можно прочитать, что у объекта Range есть и Methods, и Properties. Содержимым объекта Range является сущность, не действие, поэтому это, скорее всего, будет Property. Если просмотреть список, можно найти свойство Value. Поэтому попробуйте следующий код.

Sub RenameWorksheets() For Each myWorksheet In Worksheets myWorksheet.Name = myWorksheet.Range("B1").Value Next End Sub

Выполнение этого кода для книги, содержащей листы с пустой ячейкой B1, приведет к ошибке, так как значение свойства Value пустого диапазона Range равно "" (пустая текстовая строка), которое не является допустимым именем листа. Самое время создать какие-нибудь данные для примера. Сделайте три листа книги похожими на показанные на следующем рисунке, а затем выполните макрос.

Рисунок 4. Пример данных для макроса RenameWorksheets

Пример данных для макроса RenameWorksheets

 

Пример данных для макроса RenameWorksheets

 

Пример данных для макроса RenameWorksheets

 

Имена листов изменятся соответствующим образом.

Проверка пустых ячеек

Как отмечалось ранее, макрос приводит к ошибке, если любая из ячеек B1 книги оказывается пустой. Вместо ручной проверки каждого листа можно запрограммировать макрос так, чтобы эти действия выполнялись в нем. Перед строкой myWorksheet.Name добавьте следующую строку кода.

If myWorksheet.Range("B1").Value <> "" Then

А после строки myWorksheet.Name добавьте следующий текст.

Такой код называется инструкцией If…Then. Инструкция If…Then указывает Excel выполнять весь код между строкой If и строкой End If, но только при выполнении условия, приведенного в строке If. В примере проверяемое условие задается следующей строкой.

myWorksheet.Range("B1").Value <> ""

Знаки <> означают "не равно", а знаки кавычек, между которыми ничего нет, обозначают пустую текстовую строку, то есть полное отсутствие текста. Следовательно, все строки кода между If и End If будут выполнены только если значение в ячейке B1 не пусто, то есть, когда ячейка B1 содержит текст.

Дополнительные сведения об инструкции If…Then см. в справочном руководстве по языку VBA. (Полное название раздела — "If…Then…Else statement" (Инструкция If…Then…Else), где Else — это необязательный компонент.)

Объявления переменных

Другим улучшением, которое нужно внести в макрос, является помещение в начало макроса объявления переменной myWorksheet.

Dim myWorksheet As Worksheet

Dim является сокращением от "Dimension" (размерность), а Worksheet — это тип этой конкретной переменной. Эта инструкция сообщает VBA, какой тип сущности представляет переменная myWorksheet. Обратите внимание, что после введения As, редактор Visual Basic выводит всплывающую подсказку, содержащую перечень всех доступных типов переменных. Это пример технологии IntelliSense, то есть редактор Visual Basic реагирует на то, что, как он считает, пытается сделать пользователь, и предлагает список соответствующих вариантов. Можно выбрать вариант из списка или продолжить ввод.

Хотя объявления переменных в VBA не являются обязательными, их использование настоятельно рекомендуется! Объявление переменных резко упрощает отслеживание переменных и обнаружение ошибок в коде. Кроме того, помните, что при объявлении переменной с типом объекта (например, Worksheet) IntelliSense выводит соответствующий список свойств и методов, связанных с объектом, при последующем использовании этой переменной объекта в макросе.

Комментарии

Теперь макрос стал достаточно сложным, чтобы добавить в него несколько комментариев, напоминающих, что делает код. Количество используемых комментариев — это вопрос личного стиля, но в общем случае слишком много комментариев лучше, чем слишком мало комментариев. Со временем код обычно нужно изменять и обновлять. Без комментариев может быть трудно понять, что делается в коде, особенно когда лицо, изменяющее код, не является автором первоначального кода. Добавление комментариев для условия If и для строки, переименовывающей листы, приводит к появлению следующего кода.

Sub RenameWorksheets() Dim myWorksheet As Worksheet For Each myWorksheet In Worksheets 'make sure that cell B1 is not empty If myWorksheet.Range("B1").Value <> "" Then 'rename the worksheet to the contents of cell B1 myWorksheet.Name = myWorksheet.Range("B1").Value End If Next End Sub

Чтобы проверить макрос, переименуйте листы обратно в Лист1, Лист2 и Лист3 и удалите содержимое ячейки B1 на одном или нескольких листах. Выполните макрос, чтобы проверить, что он переименовывает листы с текстом в ячейке B1 и оставляет нетронутыми остальные листы. Макрос работает для любого числа листов, с любой комбинацией заполненных и пустых ячеек B1.

msdn.microsoft.com

Самоучитель по Excel VBA - Microsoft Excel для начинающих

Те, кто работает в продажах, в маркетинге или в любом другом направлении, которое использует

После сбора, систематизации и обработки данных нередко возникает необходимость продемонстрировать их. Таблицы отлично справляются

Уроки MS Excel

Условное форматирование в Excel позволяет выделять ячейки различными цветами в зависимости от их содержимого.

Фильтр в Excel

Уроки MS Excel

Если в Excel необходимо отобразить только записи, удовлетворяющие определённому критерию, то используйте фильтр. Для

Сортировка в Excel

Уроки MS Excel

В Excel можно сортировать данные по одному или нескольким столбцам. Сортировка может быть выполнена

Формулы массива в Excel

Уроки MS Excel

Эта статья поможет разобраться, как работают формулы массива в Excel. Помещённая в одну ячейку

office-guru.ru

VBA Excel. Оператор Select Case (синтаксис, примеры)

Оператор Select Case, выполняющий одну или более групп операторов VBA Excel в зависимости от значения управляющего выражения. Синтаксис, компоненты, примеры.

  1. Описание оператора Select Case
  2. Примеры использования в VBA Excel

Описание оператора Select Case

Оператор Select Case используется в VBA Excel для управления отдельными блоками операторов в зависимости от значения управляющего выражения (переменной) и сравнительных условий, задаваемых ключевым словом Case.

Синтаксис оператора Select Case

Select Case выражение Case условие 1 [операторы 1] Case условие 2 [операторы 2] ----------------- Case условие n [операторы n] Case Else [операторы] End Select

Компоненты оператора Select Case

  • выражение – любое числовое или строковое выражение, переменная;
  • условие – диапазон значений или выражение с операторами сравнения и ключевым словом Is*;
  • операторы – блок операторов VBA Excel, который выполняется при вхождении значения управляющего выражения в диапазон, заданный в условии, или при возврате выражением с операторами сравнения значения True;
  • блок операторов после ключевой фразы Case Else** выполняется в том случае, если в предыдущих условиях Case не будет найдено совпадений со значением управляющего выражения (переменной).

* Редактор VBA Excel автоматически добавляет ключевое слово Is в условия с операторами сравнения.** Компонент Case Else с соответствующим блоком операторов необязательны, но рекомендуется их использовать для обработки непредвиденных значений управляющего выражения (переменной).

Примеры использования в VBA Excel

Пример 1

Пример использования оператора Select Case с операторами сравнения в условиях:

Sub primer1() Dim a As Integer, b As String a = InputBox("Введите число от 1 до 5", "Пример 1", 1) Select Case a Case Is = 1 b = "один" Case Is = 2 b = "два" Case Is = 3 b = "три" Case Is = 4 b = "четыре" Case Is = 5 b = "пять" Case Else b = "Число не входит в диапазон от 1 до 5" End Select MsgBox b End Sub

Этот пример аналогичен первому примеру из статьи VBA Excel. Функция Choose, с помощью которой и следует решать подобные задачи в VBA Excel.

Пример 2

Пример использования оператора Select Case с заданным диапазоном в условиях:

Sub primer2() Dim a As Integer, b As String a = InputBox("Введите число от 1 до 30", "Пример 2", 1) Select Case a Case 1 To 10 b = "Число " & a & " входит в первую десятку" Case 11 To 20 b = "Число " & a & " входит во вторую десятку" Case 21 To 30 b = "Число " & a & " входит в третью десятку" Case Else b = "число " & a & " не входит в первые три десятки" End Select MsgBox b End Sub

Для решения подобной задачи в VBA Excel можно использовать многострочную конструкцию оператора If...Then...Else, но решение с Select Case выглядит изящней.

vremya-ne-zhdet.ru

300 примеров по Excel - Microsoft Excel для начинающих

Те, кто работает в продажах, в маркетинге или в любом другом направлении, которое использует

После сбора, систематизации и обработки данных нередко возникает необходимость продемонстрировать их. Таблицы отлично справляются

Уроки MS Excel

Условное форматирование в Excel позволяет выделять ячейки различными цветами в зависимости от их содержимого.

Фильтр в Excel

Уроки MS Excel

Если в Excel необходимо отобразить только записи, удовлетворяющие определённому критерию, то используйте фильтр. Для

Сортировка в Excel

Уроки MS Excel

В Excel можно сортировать данные по одному или нескольким столбцам. Сортировка может быть выполнена

Формулы массива в Excel

Уроки MS Excel

Эта статья поможет разобраться, как работают формулы массива в Excel. Помещённая в одну ячейку

office-guru.ru