Excel пример vba: Excel примеры vba

Содержание

Примеры макросов Excel — ОфисГуру

Главная » Уроки MS Excel » Макросы (VBA)







Автор Антон Андронов На чтение 6 мин Опубликовано



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

Содержание

  1. Макрос Excel: пример 1
  2. Макрос Excel: пример 2
  3. Макрос Excel: пример 3
  4. Макрос Excel: пример 4
  5. Макрос Excel: пример 5
  6. Макрос Excel: пример 6

Макрос 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
Источник: http://www.excelfunctions.net/Excel-Macro-Example.html
Перевел: Антон Андронов
Правила перепечатки
Еще больше уроков по Microsoft Excel

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




18 готовых макросов VBA Excel

В этом уроке я покажу Вам самые популярные макросы в VBA Excel, которые вы сможете использовать для оптимизации своей работы. VBA — это язык программирования, который может использоваться для расширения возможностей MS Excel и других приложений MS Office. Это чрезвычайно полезно для пользователей MS Excel, поскольку VBA может использоваться для автоматизации вашей работы и значительно увеличить Вашу эффективность. В этой статье Вы познакомитесь с VBA и я вам покажу некоторые из наиболее полезных, готовых к использованию примеров VBA. Вы сможете использовать эти примеры для создания собственных скриптов, соответствующих Вашим потребностям.

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

Я подготовил для вас несколько самых полезных примеров VBA Excel с большой функциональностью, которую вы сможете использовать для оптимизации своей работы. Чтобы их использовать, вам необходимо записать их в файл. Следующий параграф посвящен установке макроса Excel. Пропустите эту часть, если вы уже знакомы с этим.

Table of Contents
Как включить макросы в Excel

В Excel нажмите комбинацию клавиш alt + F11. Это приведет вас к редактору VBA в MS Excel. Затем щелкните правой кнопкой мыши папку Microsoft Excel Objects слева и выберите Insert => Module. Это место, где сохраняются макросы. Чтобы использовать макрос, вам нужно сохранить документ Excel как макрос. Из табуляции File => Save as, выберите Save as macro-enabled Workbok (расширение .xlsm) Теперь пришло время написать свой первый макрос!

1. Копирование данных из одного файла в другой.

Очень полезный макрос, поскольку он показывает, как скопировать ряд данных изнутри vba и как создать и назвать новую книгу. Вы можете изменить этот макрос в соответствии с вашими собственными требованиями:

Sub CopyFiletoAnotherWorkbook()
    'Copy the data
        Sheets("Example 1").Range("B4:C15").Copy
    'Create a new workbook
        Workbooks.Add
    'Paste the data
        ActiveSheet.Paste
    'Turn off application alerts
        Application. DisplayAlerts = False
    'Save the newly file. Change the name of the directory.
        ActiveWorkbook.SaveAs Filename:="C:\Temp\MyNewBook.xlsx"
    'Turn application alerts back on
        Application.DisplayAlerts = True
End Sub
2. Отображение скрытых строк

Иногда большие файлы Excel можно содержать скрытые строки для большей ясности И для лучшего удобства пользователей. Вот один макрос, который отобразит все строки из активной рабочей таблицы:

Sub ShowHiddenRows()
    Columns.EntireColumn.Hidden = False
    Rows.EntireRow.Hidden = False
End Sub
3. Удаление пустых строк и столбов

Пустые строки в Excel — может быть проблемой для обработки данных. Вот как избавиться от них:

Sub DeleteEmptyRowsAndColumns()
    'Declare your variables.
        Dim MyRange As Range
        Dim iCounter As Long
    'Define the target Range.
        Set MyRange = ActiveSheet.UsedRange
        'Start reverse looping through the range of Rows.
        For iCounter = MyRange. Rows.Count To 1 Step -1
    'If entire row is empty then delete it.
           If Application.CountA(Rows(iCounter).EntireRow) = 0 Then
               Rows(iCounter).Delete
               'Remove comment to See which are the empty rows
               'MsgBox "row " & iCounter & " is empty"
           End If
    'Increment the counter down
        Next iCounter
    'Step 6:  Start reverse looping through the range of Columns.
        For iCounter = MyRange.Columns.Count To 1 Step -1
    'Step 7: If entire column is empty then delete it.
               If Application.CountA(Columns(iCounter).EntireColumn) = 0 Then
                Columns(iCounter).Delete
               End If
    'Step 8: Increment the counter down
        Next iCounter      
End Sub
4. Нахождение пустых ячеек
Sub FindEmptyCell()
    ActiveCell.Offset(1, 0).Select
       Do While Not IsEmpty(ActiveCell)
          ActiveCell.Offset(1, 0).Select
       Loop
End Sub

#### 5. Заполнение пустых ячеек
Как упоминалось ранее, пустые ячейки препятствуют обработке данных и созданию сводных таблиц. Вот один примерный код, который заменяет все пустые ячейки на 0. Этот макрос имеет очень большое приложение, потому что Вы можете использовать его для поиска и замены результатов N/A, а также других символов, таких как точки, запятые или повторяющиеся значения:

Sub FindAndReplace()
    'Declare your variables
        Dim MyRange As Range
        Dim MyCell As Range
    'Save the Workbook before changing cells?
        Select Case MsgBox("Can't Undo this action.  " & _
                            "Save Workbook First?", vbYesNoCancel)
            Case Is = vbYes
            ThisWorkbook.Save
            Case Is = vbCancel
            Exit Sub
        End Select
    'Define the target Range.
        Set MyRange = Selection
    'Start looping through the range.
        For Each MyCell In MyRange
    'Check for zero length then add 0.
            If Len(MyCell. Value) = 0 Then
                MyCell = 0
            End If
    'Get the next cell in the range
        Next MyCell
End Sub

#### 6. Сортировка данных
Следующий макрос сортирует по возрастанию все числа из столбца активной ячейки. Просто дважды нажмите любую ячейку из столбца, который вы хотите отсортировать.
NB: Здесь нам нужно поставить этот код в Sheet1 (папка Microsoft Excel Objects), а не в Module1 (папка Modules):

Private Sub Worksheet_BeforeDoubleClick (ByVal Target as Range, Cancel As Boolean)
    'Declare your Variables
        Dim LastRow As Long
    'Find last row
        LastRow = Cells (Rows.Count, 1) .End (xlUp) .Row
    'Sort ascending on double-clicked column
        Rows ("6:" & LastRow) .Sort _
        Key1: = Cells (6, ActiveCell.Column), _
        Order1: = xlAscending
End Sub

#### 7. Удаление пустых пространств
Иногда данные в книге содержат дополнительные пробелы (whitespace charachters), которые могут мешать анализу данных и коррумпировать формулы. Вот один макрос, который удалит все пробелы из предварительно выбранного диапазона ячеек:

Sub TrimTheSpaces()
    'Declare your variables
        Dim MyRange As Range
        Dim MyCell As Range
    'Save the Workbook before changing cells
        Select Case MsgBox("Can't Undo this action.  " & _
                            "Save Workbook First?", vbYesNoCancel)
            Case Is = vbYes
            ThisWorkbook.Save
            Case Is = vbCancel
            Exit Sub
        End Select
    'Define the target Range.
        Set MyRange = Selection
    'Start looping through the range.
        For Each MyCell In MyRange
    'Trim the Spaces.
            If Not IsEmpty(MyCell) Then
                MyCell = Trim(MyCell)
            End If
    'Get the next cell in the range
        Next MyCell
End Sub

#### 8. Выделение дубликатов цветом
Иногда в нескольких столбцах, которые мы хотели бы осветить, есть повторяющиеся значения. Этот макрос делает именно это:

Sub HighlightDuplicates()
    'Declare your variables
        Dim MyRange As Range
        Dim MyCell As Range
    'Define the target Range. 
        Set MyRange = Selection 
    'Start looping through the range.
        For Each MyCell In MyRange 
    'Ensure the cell has Text formatting.
            If WorksheetFunction.CountIf(MyRange, MyCell.Value) > 1 Then
                MyCell.Interior.ColorIndex = 36
            End If
    'Get the next cell in the range
        Next MyCell
End Sub

#### 9. Выделение десяти самых высоких чисел

Этот код будет отображать десять самых высоких чисел из набора ячеек:

Sub TopTen()
    Selection.FormatConditions.AddTop10
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
        With Selection.FormatConditions(1)
            .TopBottom = xlTop10Top
            'Change the rank here to highlight a different number of values
            .Rank = 10
            .Percent = False
        End With
        With Selection.FormatConditions(1).Font
            .Color = -16752384
            . TintAndShade = 0
        End With
        With Selection.FormatConditions(1).Interior
            .PatternColorIndex = xlAutomatic
            .Color = 13561798
            .TintAndShade = 0
        End With
    Selection.FormatConditions(1).StopIfTrue = False
End Sub

Вы можете легко настроить код, чтобы выделить различное количество чисел.
#### 10. Выделение данных больших чем данные число
Когда вы запустите этот код, появится окно. Вам надо написать число, которое вы хотите сравнить с выбранными ячейками.

Sub HighlightGreaterThanValues()
    Dim i As Integer
    i = InputBox("Enter Greater Than Value", "Enter Value")
    Selection.FormatConditions.Delete
    'Change the Operator to xlLower to highlight lower than values
    Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlGreater, Formula1:=i
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
        With Selection.FormatConditions(1)
            . Font.Color = RGB(0, 0, 0)
            .Interior.Color = RGB(31, 218, 154)
        End With
End Sub

Вы тоже можете настроить этот код, чтобы выделить более низкие чисел.
#### 11. Выделение ячеек комментариями
Простой макрос, который выделяет все ячейки, содержащие комментарии:

Sub HighlightCommentCells()
    Selection.SpecialCells(xlCellTypeComments).Select
    Selection.Style= "Note"
End Sub

#### 12. Выделение ячеек со словами с ошибками
Это очень полезно, когда вы работаете с функциями, которые принимают строки, однако кто-то ввел строку с ошибкой, и ваши формулы не работают. Вот как решить эту проблему:

 Sub ColorMispelledCells()
    For Each cl In ActiveSheet.UsedRange
        If Not Application.CheckSpelling(Word:=cl.Text) Then _
        cl.Interior.ColorIndex = 28
    Next cl
End Sub
13. Создание сводной таблицы

Вот как создать сводную таблицу в MS Excel (версия 2007). Особенно полезно, когда вы делаете индивидуальный отчет каждый день. Вы можете оптимизировать создание сводной таблицы следующим образом:

Sub PivotTableForExcel2007()
    Dim SourceRange As Range
    Set SourceRange = Sheets("Sheet1").Range("A3:N86")
    ActiveWorkbook.PivotCaches.Create( _
    SourceType:=xlDatabase, _
    SourceData:=SourceRange, _
    Version:=xlPivotTableVersion12).CreatePivotTable _
    TableDestination:="", _
    TableName:="", _
    DefaultVersion:=xlPivotTableVersion12
End Sub
14. Отправка активного файла по электронной почте

Мой любимый код VBA. Он позволяет вам прикреплять и отправлять файл, с которым вы работаете, с предопределенным адресом электронной почты, заголовком сообщения и телом сообщения! Сначала Вам нужно сделать референцию в Excel на Microsoft Outlook (в редакторе Excel VBA, нажмите tools => references и выберите Microsoft Outlook).

Sub SendFIleAsAttachment()
    'Declare your variables
    'Set reference to Microsoft Outlook Object library
        Dim OLApp As Outlook. Application
        Dim OLMail As Object
    'Open Outlook start a new mail item
        Set OLApp = New Outlook.Application
        Set OLMail = OLApp.CreateItem(0)
        OLApp.Session.Logon  
    'Build your mail item and send
        With OLMail
        .To = "[email protected]; [email protected]"
        .CC = ""
        .BCC = ""
        .Subject = "This is the Subject line"
        .Body = "Hi there"
        .Attachments.Add ActiveWorkbook.FullName
        .Display  'Change to .Send to send without reviewing
        End With
    'Memory cleanup
        Set OLMail = Nothing
        Set OLApp = Nothing
End Sub
15. Вставка всех графиков Excel в презентацию PowerPoint

Очень удобный макрос, который позволяет вам добавлять все ваши графики Excel в презентацию Powerpoint одним щелчком мыши:

Sub SendExcelFiguresToPowerPoint()
    'Set reference to Microsoft Powerpoint Object Library
    'Declare your variables
        Dim PP As PowerPoint.Application
        Dim PPPres As PowerPoint. Presentation
        Dim PPSlide As PowerPoint.Slide
        Dim i As Integer
    'Check for charts; exit if no charts exist
        Sheets("Slide Data").Select
            If ActiveSheet.ChartObjects.Count < 1 Then
                MsgBox "No charts existing the active sheet"
                Exit Sub
            End If
    'Open PowerPoint and create new presentation
        Set PP = New PowerPoint.Application
        Set PPPres = PP.Presentations.Add
        PP.Visible = True
    'Start the loop based on chart count
            For i = 1 To ActiveSheet.ChartObjects.Count
            'Copy the chart as a picture
                ActiveSheet.ChartObjects(i).Chart.CopyPicture _
                Size:=xlScreen, Format:=xlPicture
                Application.Wait (Now + TimeValue("0:00:1"))
            'Count slides and add new slide as next available slide number
                ppSlideCount = PPPres.Slides.Count
                Set PPSlide = PPPres.Slides.Add(SlideCount + 1, ppLayoutBlank)
                PPSlide. Select
            'Paste the picture and adjust its position; Go to next chart
                PPSlide.Shapes.Paste.Select
                PP.ActiveWindow.Selection.ShapeRange.Align msoAlignCenters, True
                PP.ActiveWindow.Selection.ShapeRange.Align msoAlignMiddles, True
            Next i
    'Memory Cleanup
        Set PPSlide = Nothing
        Set PPPres = Nothing
        Set PP = Nothing
End Sub
16. Вставка таблицы Excel в MS Word

Таблицы Excel обычно помещаются внутри текстовых документов. Вот один автоматический способ экспорта таблицы Excel в MS Word:

 Sub ExcelTableInWord()
    'Set reference to Microsoft Word Object library
    'Declare your variables
        Dim MyRange As Excel.Range
        Dim wd As Word.Application
        Dim wdDoc As Word.Document
        Dim WdRange As Word.Range
    'Copy the defined range
       Sheets("Revenue Table").Range("B4:F10").Cop
    'Open the target Word document
        Set wd = New Word.Application
        Set wdDoc = wd. Documents.Open _
        (ThisWorkbook.Path & "\" & "PasteTable.docx")
        wd.Visible = True
    'Set focus on the target bookmark
        Set WdRange = wdDoc.Bookmarks("DataTableHere").Rangе
    'Delete the old table and paste new
        On Error Resume Next
        WdRange.Tables(1).Delete
        WdRange.Paste 'paste in the table   
    'Adjust column widths
        WdRange.Tables(1).Columns.SetWidth _
        (MyRange.Width / MyRange.Columns.Count), wdAdjustSameWidth
    'Reinsert the bookmark
        wdDoc.Bookmarks.Add "DataTableHere", WdRange
    'Memory cleanup
        Set wd = Nothing
        Set wdDoc = Nothing
        Set WdRange = Nothing
End Sub
17. Извлечение слов из текста

Мы можем использовать формулы, если хотим извлечь определенное количество символов. Но что, если мы хотим извлечь только одно слово из предложения или диапазон слов в ячейке? Для этого мы можем сами создать функцию Excel с помощью VBA. Это одна из самых удобных функций VBA, поскольку она позволяет создавать собственные формулы, которые отсутствуют в MS Excel. Давайте продолжим и создадим две функции: findword() и findwordrev():

Function FindWord(Source As String, Position As Integer) As String
     On Error Resume Next
     FindWord = Split(WorksheetFunction.Trim(Source), " ")(Position - 1)
     On Error GoTo 0
End Function
Function FindWordRev(Source As String, Position As Integer) As String
     Dim Arr() As String
     Arr = VBA.Split(WorksheetFunction.Trim(Source), " ")
     On Error Resume Next
     FindWordRev = Arr(UBound(Arr) - Position + 1)
     On Error GoTo 0
End Function

Отлично, мы уже создали две новые функции в Excel! Теперь попробуйте использовать их в Excel. Функция = FindWordRev (A1,1) берет последнее слово из ячейки A1. Функция = FindWord (A1,3) берет третье слово из ячейки A1 и т. Д.

18. Защита данных в MS Excel

Иногда мы хотим защитить данных нашего файла, чтобы только мы могли его изменять. Вот как это сделать с VBA:

Sub ProtectSheets()
    'Declare your variables
        Dim ws As Worksheet
    'Start looping through all worksheets
        For Each ws In ActiveWorkbook. Worksheets
    'Protect and loop to next worksheet
        ws.Protect Password:="1234"
        Next ws
End Sub

Поздравления! Поскольку вы все еще читаете это, вы действительно заинтересованы в изучении VBA. Как вы уже сами видели, язык программирования VBA чрезвычайно полезен и может сэкономить нам много времени. Надеюсь, вы нашли эту информацию полезной и использовали ее, чтобы стать мастером MS Excel, VBA и компьютерных наук в целом.

© 2018 Атанас Йонков


Литература:
1. ExcelChamps.com: Top 100 Useful Excel Macro [VBA] Codes Examples.
2. Michael Alexander, John Walkenbach (2012). 101 Ready-To-Use Excel Macros.
3. BG Excel.info: 14 ready-to-use Macros for Excel.

Word Macro Примеры и учебник VBA

В этой статье

  • VBA PDF (бесплатные загрузки)
  • Примеры Word VBA «Cheatsheet»
    • SELECT / GO
    • Документ
    • .
    • Циклы
    • Абзац
  • Word VBA Macro Tutorial
  • Пример простого макроса Word
    • Основы макросов Word
  • Word Document Object
    • Application
  • Documents
      • ActiveDocument
      • ThisDocument
      • Document Variables
    • Document Methods
      • Open Document
      • Create New Document
      • Save Document
      • Close Document
      • Print Document
  • Диапазон, выделение, абзацы
    • Диапазон
      • Установить текст диапазона
    • Выбор
      • Переместить выделение
    • Абзацы
    • Word VBA Заключение
  • Примеры макросов Word
    • Часто задаваемые вопросы по Word VBA
      • Что такое макрос Word?
      • Есть ли в Word VBA?
      • Как использовать VBA в Word?

Добро пожаловать в наш Мега-руководство по Word VBA и макросам!

Эта страница содержит:

    1. Word VBA Учебник в формате PDF (бесплатная загрузка)
    2. Word VBA «Шпаргалка», содержащая список наиболее часто используемых фрагментов кода Word VBA
    3. Полное руководство по Word VBA/макросам.
    4. Список всех наших руководств по макросам Word VBA с возможностью поиска

Вас также может заинтересовать наше интерактивное руководство по VBA для Excel. Хотя некоторые примеры/упражнения относятся к Excel VBA, большая часть содержимого является общей для всех VBA, и вам может быть полезно изучить такие понятия, как операторы If, циклы, окна сообщений и другие.


VBA PDF (бесплатная загрузка)

Загрузите наш бесплатный учебник по Microsoft Word VBA! Или учебные пособия по VBA для других программ Office!

Скачать


Примеры Word VBA «CheatSheet»

Ниже вы найдете простые примеры кода VBA для работы с Microsoft Word.

Выбрать/Перейти к

Backspace

Selection.TypeBackspace

Выбрать весь документ

Selection.HomeKey Unit:=wdStory
Selection.Extend

Копировать

Selection.Copy

Удалить

Selection.Delete Unit:=wdCharacter, Count:=1

Insert After

Selection. InsertAfter «text»

Unit=

3 Selection: Начало строки wdLine

End of Line

Selection.EndKey Unit:=wdLine

Paste

Selection.Paste

Select All

Selection.WholeStory

Selection.WholeStory

Select Entire Line.WholeStory

Select Entire Line. вдекстенд

Переместиться вверх по абзацу

Selection.MoveUp Unit:=wdParagraph, Count:=1

Переместиться вправо на один символ

Selection.MoveRight Unit:=wdCharacter, Count:=1

Переместиться вправо на одну ячейку в таблице

Selection .MoveRight Unit:=wdCell

Перейти к началу документа

Selection.HomeKey Unit:=wdStory

Перейти к концу документа

Selection.EndKey Unit:=wdStory

Перейти к странице 1

9000 Выбор Что :=wdGoToPage, Который:=wdGoToNext, Имя:=”1″

Перейти к началу страницы

    Selection.GoTo What:=wdGoToBookmark, Name:=”\Page”
Selection.MoveLeft Unit:=wdCharacter, Count:=1

Вернуться к началу

Закладки

2

Добавить С ActiveDocument. Bookmarks
.Add Range:=Selection.Range, Name:=”Name”
.DefaultSorting = wdSortByName
.ShowHidden = False
End With

Count

Dim n as Integer
n = ActiveBookmarksDocument.

Удалить

ActiveDocument.Bookmarks(«BookmarkName»). Удалить

Существует?

If ActiveDocument.Bookmarks.Exists(«BookmarkName») = True then
‘Сделайте что-нибудь
End If

Перейти к

Selection.GoTo What:=wdGoToBookmark, Name:=»BookmarkName»

Select

ActiveDocument Bookmarks(«BookmarkName»). Select

Заменить текст

Selection.GoTo What:=wdGoToBookmark, Name:=»BookmarkName»
Selection.Delete Unit:=wdCharacter, Count:=1
Selection.InsertAfter «Новый текст»
ActiveDocument.Bookmarks.Add Range:=Selection.Range, _
Имя:=»BookmarkName»

Вернуться к началу

Документ

Активировать

Документы («Example.doc») .Активировать

Добавить в переменную

Затемнить документ как документ
Установить документ = Документы. FormDoc.doc», _
NewTemplate:=False

Закрыть

Документы(«Example.doc»). Закрыть

Закрыть – Сохранить изменения

Документы(«Example.doc»). Закрыть SaveChanges:=wdSaveChanges

Закрыть – Не сохранять

Документы(«Пример .doc»). Example.doc»).SaveAs(«C:\Example\Example.doc»)

Сохранить

Документы («Пример.doc»). Сохранить

Защитить

Документы («Пример.doc»). Непротечный пароль: = «Пароль»

Количество страниц

Dim VarnumberPages As Variant
VarnumberPages = _
Activedocument.content.information (WdactiveendAdjustedPagenumber)

Печать

Документы («Пример. Топ

Кодирование VBA стало проще

Прекратите искать код VBA в Интернете. Узнайте больше об AutoMacro — конструкторе кода VBA, который позволяет новичкам создавать процедуры с нуля с минимальными знаниями в области программирования и множеством функций, позволяющих сэкономить время для всех пользователей!

Узнать больше!!

Шрифт

Размер

Selection. Font.Size = 12

Bold

Selection.Font.Bold = True

Курсив

Selection.Font.Italic 03 True 9000

Selection.font.underline = Wdunderlinesingling

All Caps

Selection.font.allcaps = True

Color

Selection.Font.TextColor = VBRED

Имя

SELECTION.FONT.NAME = ABADI

. Subscript

Selection.Font.Subscript = True

SuperScript

Selection.Font.Superscript = True

Цвет выделения

Selection.Range.HighlightColorIndex = wdYellow

Стиль

Selection.Style = ActiveDocument.Styles(“Normal”)

Вернуться к началу

Insert

Insert AutoText

Selection.TypeText Text:=”a3″
Selection.Range.InsertAutoText

Insert3 Date Code

2 Insert3 Date Code

2 Файл

Selection.InsertFile («C:\Docs\Something.doc»)

Вставить разрыв страницы

Selection.InsertBreak Type:=wdPageBreak

Вставить символ абзаца

Selection. TypeText Text:=Chr$(182)

Вставка вкладка

Selection.typetext Text: = vbtab

Вставка текста

Выбор. Typetext Text: = ”Любой текст»

Вставка типа пункт

Selection.InpeParagraph

Вставка параграфа

SELECTER.INSERTPARAGRAPPARPH

. наверх

Циклы

Делать до конца документа

Делать до ActiveDocument.Bookmarks(«\Sel») = ActiveDocument.Bookmarks(«\EndOfDoc»)
‘Делать что-то
Sub

Для каждого документа в Документах

Dim doc As Document
ForEach doc In Documents
‘Do Something
Next doc

Цикл по абзацам

Sub через абзацы
Dim i As Long, iParCount As Long
iParCount = 19090 iParagraphs.CountForiForiForiFori ActiveDocument.Paragraphs(i).Alignment = wdAlignParagraphLeft
Далее i

Вернуться к началу

Программирование на VBA | Генератор кода работает на вас!

Пункт

KeepLinesTogether

Selection. paragraphformat.keeptogether = true

KeepWithNext

Selection.paragraphformat.shipwithnext = true

Пространство после

Selection.parachformat.spacefater = 12

Пространство до

Selection.paraphformat.pacefter = 12

. Центр

Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter

Выровнять по правому краю

Selection.ParagraphFormat.Alignment = wdAlignParagraphRight

Align Left

Selection.ParagraphFormat.Alignment = wdAlignParagraphLeft

Left Indent

Selection.ParagraphFormat.LeftIndent = InchesToPoints(3.75)

Right Indent

Selection.ParagraphFormat.RightIndent = InchesToPoints(1)

Line Spacing

С Selection.ParagraphFormat
.LineSpacingRule = wdLineSpaceExactly
.LineSpacing = 12
End With

Цикл по всем абзацам

Подпункты по абзацам
Dim i As Long, iParCount As Long
iParCount = ActiveDocument.Paragraphs. CountFori = 1 To iParCount
ActiveDocument.Paragraphs(i).Alignment = wdAlignParagraphLeft
Next i

Вернуться к началу

Это учебник по использованию VBA с Microsoft Word. В этом руководстве вы узнаете, как написать простой макрос и взаимодействовать с документами, диапазонами, выделениями и абзацами.

Примечание. Если вы новичок в макросах/VBA, вам также может быть полезна эта статья: Как писать макросы VBA с нуля.

VBA — это язык программирования, используемый для автоматизации программ Microsoft Office, включая Word, Excel, Outlook, PowerPoint и Access.

Макросы — это блоки кода VBA, выполняющие определенные задачи.

Когда вы Запишите макрос , Word запишет код VBA в макрос, что позволит вам повторить ваши действия. Вы можете увидеть список всех доступных макросов из Вид > Макросы .

После записи макроса вы сможете редактировать макрос из списка макросов:

Когда вы нажимаете Edit , вы открываете редактор VBA . Используя редактор VBA, вы можете редактировать записанные макросы или писать макросы Word с нуля. Для доступа к редактору VBA используйте сочетание клавиш ALT + F11 или нажмите Visual Basic на ленте разработчика .

Пример макроса Simple Word

Это простой пример макроса Word VBA. Он выполняет следующие задачи:

  • Открывает документ Word
  • Запись в документ
  • Закрывает и сохраняет документ Word.
 Sub WordMacroExample()

    'Открыть документ и назначить переменной
    Dim oDoc как документ
    Установите oDoc = Documents.Open("c:\Users\someone\NewDocument.docx")
    
    'Напишите доку
    Selection.TypeText "www.automateexcel.com"
    Selection.TypeParagraph
    
    'Сохранить и закрыть документ
    oDoc.Сохранить
    oDoc.Закрыть
    
Конец суб 

Основы работы с макросами Word

Весь код VBA должен храниться в рамках подобных процедур. Чтобы создать процедуру в VBA, введите «Sub WordMacroExample» (где «WordMacroExample» — имя желаемого макроса) и нажмите ENTER . VBA автоматически добавит скобки и End Sub.

Объект документа Word

При взаимодействии с Microsoft Word в VBA вы часто будете ссылаться на «Объекты» Word. Наиболее распространенные объекты:

Объект приложения — сам Microsoft Word

Объект документа — документ Word

Объект диапазона — часть документа Word

Объект выбора — выбранный диапазон или положение курсора.

Автомакрос | Окончательная надстройка VBA | Нажмите для бесплатной пробной версии!

Приложение

Приложение является объектом «верхнего уровня». Через него можно получить доступ ко всем другим объектам в Word.

В дополнение к доступу к другим объектам Word можно применить настройки «уровня приложения»:

 Application. Options.AllowDragAndDrop = True 

Это пример доступа к «Выбору» «Windows(1)» в приложении:

 Application.Windows(1).Selection.Characters.Count 

Однако , к наиболее распространенным объектам Word можно обращаться напрямую, не вводя полную иерархию. Поэтому вместо этого вы можете (и должны) просто ввести:

 Selection.Characters.Count 

Documents

ActiveDocument

Часто у вас будет два или более документов, открытых в Word, и вам нужно будет указать, какой именно документ Word взаимодействовать с. Один из способов указать, какой документ использовать Активный Документ . Например:

 ActiveDocument.PrintOut 

… будет печатать ActiveDocument. ActiveDocument — это документ в Word, который «имеет фокус»

Чтобы переключить ActiveDocument, используйте команду Activate:

 Documents("Example. docx").Activate 
ThisDocument

Вместо использования ActiveDocument для ссылки на активный документ , вы можете использовать ThisDocument для ссылки на документ, в котором хранится макрос. Этот документ никогда не изменится.

 ThisDocument.PrintOut 
Переменные документа

Однако для более сложных макросов может быть сложно отслеживать активный документ. Также может быть неудобно переключаться между документами.

Вместо этого вы можете использовать переменные документа.

Этот макрос назначит ActiveDocument переменной, а затем распечатает документ, используя переменную:

 Sub VarExample()
    Dim oDoc как документ
    Установите oDoc = ActiveDocument
    oDoc.PrintOut
Конец суб 

Методы документа

Открыть документ

Чтобы открыть документ Word:

 Documents.Open "c:\Users\SomeOne\Desktop\Test PM.docx" 

открытие:

 Dim oDoc as Document
Set oDoc = Documents. Open("c:\Users\SomeOne\Desktop\Test PM.docx") 

Создать новый документ

Чтобы создать новый документ Word:

 Documents.Add 

Мы можем указать Word для создания нового документа на основе некоторого шаблона:

 Documents.Add Template:="C:\Program Files\Microsoft Office\Templates\MyTemplate.dotx" 

Как всегда, полезно и избавляет от огромных проблем присвоение документа переменной при создании или открытии:

 Dim oDoc как документ
Установите oDoc = Documents.Add (Template:="C:\Program Files\Microsoft Office\Templates\MyTemplate.dotx") 

Сохранить документ

Чтобы сохранить документ:

 ActiveDocument.Save 

или Сохранить как:

 ActiveDocument.SaveAs FileName:= c:\Users\SomeOne\Desktop\test2.docx", FileFormat:=wdFormatDocument 

Закрыть документ

, чтобы закрыть документ и сэкономить изменения:

 Activedocument. close WdsaveChanges 

или без сбережений:

 Activedocument.close WddonotsAvechanges 

0505050106106106106106106106106.com

 ActiveDocument.PrintOut 

Диапазон, Выбор, Абзацы

Диапазон и Выбор , вероятно, являются самыми важными объектами в Word VBA и, безусловно, наиболее часто используемыми.

Диапазон относится к некоторой части документа, обычно, но не обязательно, к тексту.

Выделение относится к выделенному тексту (или другому объекту, например изображениям) или, если ничего не выбрано, к точке вставки.

Абзацы представляют собой абзацы в документе. Это менее важно, чем кажется, потому что вы не можете получить прямой доступ к тексту абзаца (вам нужно получить доступ к определенному диапазону абзаца, чтобы внести изменения).

Автомакрос | Окончательная надстройка VBA | Нажмите для бесплатной пробной версии!

Диапазон

Диапазон может быть любой частью документа, включая весь документ:

 Dim oRange As Range
Установите oRange = ActiveDocument.Content 

, или он может быть меньше одного символа.

Другой пример, этот диапазон будет относиться к первому слову в документе:

 Dim oRange As Range
Установите oRange = ActiveDocument.Range.Words(1) 

Обычно вы хотите получить диапазон, который относится к определенной части документа, а затем изменить его.

В следующем примере мы сделаем первое слово второго абзаца полужирным:

 Dim oRange As Range
Установите oRange = ActiveDocument.Paragraphs(2).Range.Words(1)
oRange.Bold = True 
Установить текст диапазона

Чтобы установить текстовое значение диапазона:

 Dim oRange As Range
Установите oRange = ActiveDocument. Paragraphs(2).Range.Words(1)
oRange.Text = «Hello » 

(Совет: обратите внимание на пробел после «Hello». Поскольку объект слова включает пробел после слова, просто «hello» мы получим «Hellonext word»)

 

С диапазонами можно делать сотни вещей. Всего несколько примеров (здесь предполагается, что вы уже создали объектную переменную oRange , относящуюся к интересующему диапазону):

Изменить шрифт

 oRange.Font.Name = "Arial" 

Отображать в окне сообщения номер символов в определенном диапазоне

 MsgBox oRange.Characters.Count 

Вставить текст перед ним

 oRange.InsertBefore "это вставленный текст" 

Добавить сноску к диапазону

 ActiveDocument.Footnotes.Add Range:=oRange, _
Text:="Подробнее читайте на сайтеautomateexcel. com." 

Скопировать в буфер обмена

 oRange.Copy
Часто вам нужно перейти к тому, что относится к конкретному диапазону. Таким образом, вы можете начать его начало и конец
oRange.Start = 5
oRange.End = 50 

После приведенного выше кода oRange будет ссылаться на текст, начинающийся с пятого и заканчивающийся 50-м символом в документе.

Selection

Selection даже более широко используется, чем Range , потому что с Selections проще работать, чем с Ranges , ЕСЛИ ваш макрос ТОЛЬКО взаимодействует с ActiveDocument.

Сначала выберите нужную часть документа. Например, выберите второй абзац в активном документе:

 ActiveDocument.Paragraphs(2).Range.Select 

Затем вы можете использовать объект выделения для ввода текста:

 Selection.TypeText "Некоторый текст" 

Мы можем ввести несколько абзацев ниже «Некоторый текст»:

 Selection. TypeText "Некоторый текст"
Selection.TypeParagraph 

Часто необходимо знать, выделен какой-то текст или у нас просто точка вставки:

 If Selection.Type <> wdSelectionIP Then
    Выбор.Шрифт.Полужирный = Истина
Еще
    MsgBox "Вам нужно выделить текст."
End If 

При работе с объектом Selection мы хотим поместить точку вставки в определенное место и выполнять команды, начиная с этой точки.

Начало документа:

 Selection.HomeKey Unit:=wdStory, Extend:=wdMove 

Начало текущей строки:

 Selection.HomeKey Unit:=wdLine, Extend:=wdMove2 905 Параметр Extend wdMove перемещает точку вставки. Вместо этого вы можете использовать wdExtend, который выделит весь текст между текущей точкой вставки. 

 Selection.HomeKey Unit:=wdLine, Extend:=wdExtend 
Перемещение выделения

Наиболее полезным методом изменения положения точки вставки является перемещение. Чтобы переместить выделение на два символа вперед:

 Selection.Move Unit:=wdCharacter, Count:=2 

для перемещения назад используйте отрицательное число для параметра Count:

 Selection.Move Unit:=wdCharacter, Count:=-2 

Параметр Unit может быть wdCharacter , wdWord, wdLine и т. д. (для просмотра других используйте справку Word VBA).

Чтобы вместо этого переместить слова:

 Selection.Move unit:=wdWord, Count:=2 

 

С выделением легче работать (по сравнению с диапазонами), поскольку оно похоже на робота, использующего Word, имитирующего пользователя-человека. Там, где точка вставки – произойдет какое-то действие. Но это означает, что вы должны позаботиться о том, где находится точка вставки! Это непросто после многих шагов в коде. В противном случае Word изменит текст в нежелательном месте.

 

В случае, если вам нужно какое-то свойство или метод, недоступный в объекте Selection, вы всегда можете легко получить диапазон, связанный с выделением:

 Set oRange = Selection. Range 

СОВЕТ. с использованием диапазонов, но и намного медленнее (важно при работе с большими документами)

Paragraphs

Вы не можете напрямую использовать объект Paragraphs для изменения текста:

 ActiveDocument.Paragraphs(1).Text = "Нет, это будет не работает" 

Выше не сработает (на самом деле выдаст ошибку). Сначала вам нужно получить диапазон, связанный с конкретным абзацем:

 ActiveDocument.Paragraphs(1).Range.Text = "Теперь это работает :)" 

Но вы можете напрямую изменить его стиль:

 ActiveDocument.Paragraphs(1). Style = "Normal" 

или измените форматирование на уровне абзаца:

 ActiveDocument.Paragraphs(1).LeftIndent = 10 

или, может быть, вы хотите сохранить этот абзац на одной линии со следующим абзацем:

 ActiveDocument.Paragraphs(1).KeepWithNext = True 

Сделать абзац центрированным:

 ActiveDocument. Paragraphs(1).Alignment = wdAlignParagraphCenter 

ОЧЕНЬ полезно назначать определенный абзац объектной переменной. Если мы назначаем конкретный абзац переменной, нам не нужно беспокоиться, станет ли первый абзац вторым, потому что мы вставили один абзац перед ним:

 dim oPara as Paragraph
Установите oPara = Selection.Paragraphs(1) ‘здесь мы назначаем первый абзац текущего выбора переменной 

Вот пример, когда мы вставляем абзац над первым абзацем, но мы все еще можем ссылаться на старый первый абзац, потому что он был присвоен переменной:

 Sub ParagraphExample()
    Dim oPara As Paragraph
    Установить oPara = ActiveDocument.Paragraphs(1)
    MsgBox oPara.Range.Text
    oPara.Range.InsertParagraphBefore 'Вставить абзац
    MsgBox oPara.Range.Text
End Sub 

Объект абзаца очень часто используется в циклах:

 Sub LoopThroughParagraphs()

    Dim oPara As Paragraph
    Для каждого oPara в ActiveDocument. Paragraphs
        'сделай что-нибудь с этим. Мы просто покажем
        'текст абзаца, если его стиль "Заголовок 4"
        Если oPara.Style = "Заголовок 4" Тогда
            MsgBox oPara.Range.Text
        Конец, если
    Следующий oPara

End Sub 

Учебное пособие по Word VBA Заключение

В этом учебном пособии рассмотрены основы Word VBA. Если вы новичок в VBA, вам также следует ознакомиться с нашим общим учебным пособием по VBA, чтобы узнать больше о переменных, циклах, окнах сообщений, настройках, условной логике и многом другом.

Автомакрос | Окончательная надстройка VBA | Нажмите для бесплатной пробной версии!

Примеры макросов Word

Часто задаваемые вопросы по Word VBA

Что такое макрос Word?

Макрос — это общий термин, который относится к набору программных инструкций, автоматизирующих задачи. Макросы Word автоматизируют задачи в Word с помощью языка программирования VBA.

Есть ли в Word VBA?

Да, в Microsoft Word есть редактор VBA. Доступ к нему можно получить, нажав клавиши ALT + F11 или выбрав «Разработчик» > «Visual Basic».

Как использовать VBA в Word?

1. Откройте редактор VBA (ALT + F11 или Developer > Visual Basic)
2. Выберите «Вставка» > «Модуль», чтобы создать модуль кода
3. Введите «Sub HelloWorld» и нажмите Enter
4. Между строками ' Sub HelloWorld» и «End Sub», введите «MsgBox «Hello World!»
5. Вы создали макрос!
6. Теперь нажмите «F5», чтобы запустить макрос

VBA для каждого примера (краткий справочник)

В этой статье

  • для каждого цикла
  • для каждого: основные примеры
    • петля через ячейки
    • Цикл через листы
    • Цикл через рабочие тетради
    • Цикл через фигуры
    • Цикл через диаграммы
    • Процессы в Array
    • .
    • Циклические номера
  • Для каждого построителя цикла
  • Для каждого — If
    • Для каждой ячейки в диапазоне — If
  • Для каждого Общие примеры
    • Закрыть все рабочие тетради
    • скрыть все листы
    • Unlide All Sheets
    • Защитите все листы
    • Непротечные листы
    • Удалить все формы на всех рабочих листах
    • Replesh All Pivottables
  • . Использование для каждого в Income in in in in incom

    В этом руководстве показаны примеры использования цикла For Each в VBA. Нажмите здесь, чтобы узнать больше о циклах в целом.

    For Each Loop

    For Each Loop позволяет пройти каждый объект в коллекции:

    • Все ячейки в диапазоне
    • Все рабочие листы в рабочей книге
    • Все открытые книги
    • Все фигуры на листе
    • Все элементы массива
    • и больше!

    For Each: основные примеры

    В этих примерах показано, как настроить циклы For Each для циклического перебора различных типов объектов.

    Цикл по ячейкам

    Эта процедура будет перебирать каждую ячейку в диапазоне A1:A10, устанавливая ячейку справа от нее равной самой себе.

     Подпрограмма ForEachCell()
        Затемнить ячейку как диапазон
        
        Для каждой ячейки в листах («Лист1»). Диапазон («A1: A10»)
            Cell.Offset(0, 1).value = Cell. value
        Следующая ячейка
        
    End Sub 

    Циклический просмотр листов

    Эта процедура будет циклически просматривать каждый лист в рабочей книге, показывая каждый лист.

     Подпрограмма ForEachSheets()
        Dim ws As рабочий лист
    
        Для каждого ws в листах
            ws.Visible = Истина
        Следующий мс
    
    Конец суб 

    Циклический просмотр рабочих книг

    Эта процедура будет выполнять циклический просмотр каждой рабочей книги, закрывая каждую из них.

     Подпрограмма ForEachWorkbooks()
        Dim wb как рабочая книга
        
        Для каждого ББ в рабочих книгах
            wb.Закрыть
        Следующий бб
        
    End Sub 

    Цикл по фигурам

    Эта процедура будет проходить по всем фигурам на Листе 1, удаляя каждую из них.

     Подпрограмма ForEachShape()
        Дим Шп Ас Шейп
        
        Для каждого листа в листах ("Лист1"). Формы
            Шп.удалить
        Следующая Шп
        
    Конец суб 

    Кодирование VBA стало проще

    Прекратите искать код VBA в Интернете. Узнайте больше об AutoMacro — конструкторе кода VBA, который позволяет новичкам создавать процедуры с нуля с минимальными знаниями в области программирования и множеством функций, позволяющих сэкономить время для всех пользователей!

    Узнать больше!!

    Циклический просмотр диаграмм

    Эта процедура будет выполнять циклический просмотр каждой диаграммы на листе 1 с удалением каждой из них.

     Подпрограмма ForEachCharts()
        Dim cht As ChartObject
        
        Для каждого чт в листах("Лист1").ChartObjects
            чт.Удалить
        Следующий чт
        
    Конец суб 

    Цикл по сводным таблицам

    Эта процедура будет проходить по всем сводным таблицам на листе 1, очищая каждую из них

     Sub ForEachPivotTables()
        Dim pvt как сводная таблица
        
        Для каждого pvt в листах («Лист1»). Сводные таблицы
            pvt.ClearTable
        Следующий пвт
        
    End Sub 

    Циклический просмотр таблиц

    Эта процедура будет выполнять циклический просмотр каждой таблицы на листе Sheet1, удаляя каждую из них.

     Подпрограмма ForEachTables()
        Dim таблица как ListObject
        
        Для каждой таблицы в листах ("Лист1").ListObjects
            табл.Удалить
        Следующая таблица
        
    Конец суб 

    Программирование на языке VBA | Генератор кода работает на вас!

    Циклический просмотр элементов в массиве

    Эта процедура выполняет циклический просмотр каждого элемента в массиве, отображает каждое значение в окне сообщения,

     Sub ForEachItemInArray()
        Dim arrValue как вариант
        Затемнить элемент как вариант
        arrValue = Array("Элемент 1", "Элемент 2", "Элемент 3")
        
        Для каждого элемента в arrValue
            Элемент MsgBox
        Следующий элемент
        
    End Sub 

    Циклические номера

    Эта процедура будет перебирать каждое число в массиве, отображать каждое значение в окне сообщения,

     Sub ForEachNumberInNumbers()
        Dim arrNumber (от 1 до 3) как целое число
        Dim num как вариант
        
        номер(1) = 10
        число(2) = 20
        номер(3) = 30
        
        Для каждого числа In arrNumber
            номер почтового ящика
        Следующий номер
        
    End Sub 

    For Each Loop Builder

    Примеры в этой статье были созданы с помощью Loop Builder в нашей надстройке VBA: AutoMacro .

     

    Loop Builder позволяет очень легко генерировать код для циклического обхода объектов. AutoMacro также содержит множество других генераторов кода , обширную библиотеку кодов и мощные средства кодирования .

    Для каждого — если

    Вы также можете использовать операторы If в циклах для проверки соответствия объектов определенным критериям, выполняя действия только над теми объектами, которые соответствуют критериям. Вот пример перебора каждой ячейки в диапазоне:

    Для каждой ячейки в диапазоне – If

     Sub If_Loop()
    Затемнить ячейку как диапазон
     
      Для каждой ячейки в диапазоне («A2: A6»)
        Если Ячейка.Значение > 0 Тогда
          Cell.Offset(0, 1).Value = "Положительное"
        ИначеЕсли Cell.Value < 0 Тогда
          Cell.Offset(0, 1).Value = "Отрицательное"
        Еще
          Ячейка.Смещение(0, 1).Значение = "Ноль"
        Конец, если
      Следующая ячейка
     
    End Sub 

     

    Автомакрос | Окончательная надстройка VBA | Нажмите для бесплатной пробной версии!

    Для каждого из общих примеров

    Закрыть все рабочие книги

    Эта процедура закроет все открытые рабочие книги с сохранением изменений.

     Sub CloseAllWorkbooks()
        
        Dim wb как рабочая книга
        
        Для каждого ББ в рабочих книгах
            wb.Close SaveChanges: = True
        Следующий бб
        
    End Sub 

    Скрыть все листы

    Эта процедура скроет все рабочие листы.

     Sub HideAllSheets()
        Dim ws As рабочий лист
    
        Для каждого ws в листах
            ws.Visible = кслшитхидден
        Следующий мс
        
    Конец суб 

    Показать все листы

    Эта процедура покажет все рабочие листы.

     Sub UnhideAllSheets()
        Dim ws As рабочий лист
    
        Для каждого ws в листах
            ws.Visible = кслшитвисибле
        Следующий мс
        
    End Sub 

    AutoMacro | Окончательная надстройка VBA | Нажмите для бесплатной пробной версии!

    Защитить все листы

    Эта процедура защитит все рабочие листы.

     Sub ProtectAllSheets()
        Dim ws As рабочий лист
    
        Для каждого ws в листах
            пароль ws. Protect: = "..."
        Следующий мс
        
    Конец суб 

    Снять защиту со всех листов

    Эта процедура снимет защиту со всех рабочих листов.

     Sub UnprotectAllSheets()
        Dim ws As рабочий лист
    
        Для каждого ws в листах
            ws.Unprotect Password:="..."
        Следующий мс
        
    End Sub 

    Удалить все фигуры на всех листах

    Эта процедура удалит все фигуры в книге.

     Sub DeleteAllShapesOnAllWorksheets()
        Dim Sheet As Worksheet
        Дим Шп Ас Шейп
        
    
        Для каждого листа в листах
            Для каждой шп в Sheet.Shapes
                Шп.удалить
            Следующая Шп
        Следующий лист
        
    Конец суб 

    Обновить все сводные таблицы

    Эта процедура обновит все сводные таблицы на листе.

     Sub RefreshAllPivotTables()
        Dim pvt как сводная таблица
        
        Для каждого pvt в листах («Лист1»). Сводные таблицы
            pvt.RefreshTable
        Следующий пвт
        
    End Sub 

    Использование For Each в Access VBA

    Цикл For Each работает в Access VBA так же, как и в Excel VBA.