Vba excel цикл по листам книги

Аннотация

Данная статья содержит Microsoft Visual Basic для приложений макроса (процедура Sub), который в цикле проходит через все листы активной книги. Этот макрос также отображается имя каждого листа.

Дополнительная информация

Корпорация Майкрософт предлагает примеры программного кода только для иллюстрации и без гарантии или подразумеваемых. Это включает, но не ограничиваясь, подразумеваемые гарантии товарной пригодности или пригодности для определенной цели. В данной статье предполагается, что вы знакомы с демонстрируемым языком программирования и средствами, которые используются для создания и отладки. Сотрудники службы поддержки Майкрософт могут объяснить возможности конкретной процедуры, но не выполнять модификации примеров для обеспечения дополнительных функциональных возможностей или создания процедур для определенных требований. Пример макроса, выполните следующие действия:

  1. Введите следующий код макроса в лист модуля.

          Sub WorksheetLoop()         Dim WS_Count As Integer         Dim I As Integer         ' Set WS_Count equal to the number of worksheets in the active         ' workbook.         WS_Count = ActiveWorkbook.Worksheets.Count         ' Begin the loop.         For I = 1 To WS_Count            ' Insert your code here.            ' The following line shows how to reference a sheet within            ' the loop by displaying the worksheet name in a dialog box.            MsgBox ActiveWorkbook.Worksheets(I).Name         Next I      End Sub

  2. Чтобы запустить макрос, поместите курсор в строку, которая считывает «Sub WorksheetLoop()» и нажмите клавишу F5.

Макрос будет цикла книги и отображает окно сообщения с именем другого листа при каждом выполнении цикла. Обратите внимание, что этот макрос будет отображать только имена листов; он будет отображаться имена других типов листов в книге. Можно также использовать цикл через все листы в книге с помощью цикла «For Each».

  1. Введите следующий код макроса в лист модуля.

          Sub WorksheetLoop2()         ' Declare Current as a worksheet object variable.         Dim Current As Worksheet         ' Loop through all of the worksheets in the active workbook.         For Each Current In Worksheets            ' Insert your code here.            ' This line displays the worksheet name in a message box.            MsgBox Current.Name         Next      End Sub

  2. Чтобы запустить макрос, поместите курсор в строку, которая считывает «Sub WorksheetLoop2()» и нажмите клавишу F5.

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

Ссылки

Дополнительные сведения о получении справки по Visual Basic для приложений обратитесь к следующей статье Microsoft Knowledge Base:

163435 VBA: программные ресурсы для Visual Basic для приложений

226118 OFF2000: программные ресурсы для Visual Basic для приложений

Нужна дополнительная помощь?

Summary

This article contains a Microsoft Visual Basic for Applications macro (Sub procedure) that loops through all the worksheets in the active workbook. This macro also displays the name of each worksheet.

More Information

Microsoft provides programming examples for illustration only, without warranty either expressed or implied. This includes, but is not limited to, the implied warranties of merchantability or fitness for a particular purpose. This article assumes that you are familiar with the programming language that is being demonstrated and with the tools that are used to create and to debug procedures. Microsoft support engineers can help explain the functionality of a particular procedure, but they will not modify these examples to provide added functionality or construct procedures to meet your specific requirements. To try the sample macro, follow these steps:

  1. Type the following macro code into a new module sheet.

          Sub WorksheetLoop()

    Dim WS_Count As Integer
    Dim I As Integer

    ' Set WS_Count equal to the number of worksheets in the active
    ' workbook.
    WS_Count = ActiveWorkbook.Worksheets.Count

    ' Begin the loop.
    For I = 1 To WS_Count

    ' Insert your code here.
    ' The following line shows how to reference a sheet within
    ' the loop by displaying the worksheet name in a dialog box.
    MsgBox ActiveWorkbook.Worksheets(I).Name

    Next I

    End Sub

  2. To run the macro, position the insertion point in the line that reads «Sub WorksheetLoop(),» and press F5.

The macro will loop through the workbook and display a message box with a different worksheet name each time it runs through the loop. Note that this macro will only display worksheet names; it will not display the names of other types of sheets in the workbook.

You can also loop through all of the worksheets in the workbook by using a ‘For Each’ loop.

  1. Enter the following macro code into a new module sheet.

          Sub WorksheetLoop2()

    ' Declare Current as a worksheet object variable.
    Dim Current As Worksheet

    ' Loop through all of the worksheets in the active workbook.
    For Each Current In Worksheets

    ' Insert your code here.
    ' This line displays the worksheet name in a message box.
    MsgBox Current.Name
    Next

    End Sub

  2. To run the macro, position the insertion point in the line that reads «Sub WorksheetLoop2(),» and press F5.

This macro works identically to the WorksheetLoop macro, except that it uses a different type of loop to process all of the worksheets in the active workbook.

References

For additional information about getting help with Visual Basic for Applications, please see the following article in the Microsoft Knowledge Base:

163435 VBA: Programming Resources for Visual Basic for Applications

226118 OFF2000: Programming Resources for Visual Basic for Applications

Need more help?

{quote}{login=Паша}{date=28.05.2010 04:46}{thema=}{post}Sub one()  

  Dim sh As Sheets  

  For Each sh In Workbook.Sheets  
If sh.Name <> «Сводная» Then  
Range(«A1:AK37»).Select  
   Selection.Copy  
   Sheets(«Ñâîäíàÿ»).Select  
   Range(«L28»).Select  
   ActiveSheet.Paste  
End If  
Next  
End Sub  

      сделал такой макрос который копирует всё в одно место что бы посмоотреть F8 как он вставляет попеременно всё, выдаёт ошибку Метод ор дата мембер нот фаунд и выделяет строку с IF. А если не прописывать Dim sh as shеet то выдаёт Object Required и выделяет первую строку For each…. И ещё к End приписал If так как выдаёт Next whithout For{/post}{/quote}  

  просто вы обявили не тот тип    

    sheets — это коллекция листов, а вам нужно тип элементов этой коллекции, но и тут может быть засада — объекта sheet не существует, а если использовать worksheet , то не все листы могут быть рабочими, встречаются меж ними и листы диаграмм, макросов и т.п. так что использование универсального обявления object в данном случае самое оно, но я к тому, что можно вообще не объявлять тип, тогда транслятор сам присвоит тип вариант, кот очень даже прокатит..

Цикл For Each… Next в VBA Excel, его синтаксис и описание отдельных компонентов. Примеры использования цикла For Each… Next.

Цикл For Each… Next в VBA Excel предназначен для выполнения блока операторов по отношению к каждому элементу из группы элементов (диапазон, массив, коллекция). Этот замечательный цикл применяется, когда неизвестно количество элементов в группе и их индексация, в противном случае, более предпочтительным считается использование цикла For…Next.

For Each element In group

    [ statements ]

    [ Exit For ]

    [ statements ]

Next [ element ]

В квадратных скобках указаны необязательные атрибуты цикла For Each… Next.

Компоненты цикла For Each… Next

Компонент Описание
element Обязательный атрибут в операторе For Each, необязательный атрибут в операторе Next. Представляет из себя переменную, используемую для циклического прохода элементов группы (диапазон, массив, коллекция), которая предварительно должна быть объявлена с соответствующим типом данных*.
group Обязательный атрибут. Группа элементов (диапазон, массив, коллекция), по каждому элементу которой последовательно проходит цикл For Each… Next.
statements Необязательный** атрибут. Операторы вашего кода.
Exit For Необязательный атрибут. Оператор выхода из цикла до его окончания.

*Если цикл For Each… Next используется в VBA Excel для прохождения элементов коллекции (объект Collection) или массива, тогда переменная element должна быть объявлена с типом данных Variant, иначе цикл работать не будет.

**Если не использовать в цикле свой код, смысл применения цикла теряется.

Примеры циклов For Each… Next

Цикл для диапазона ячеек

На активном листе рабочей книги Excel выделите диапазон ячеек и запустите на выполнение следующую процедуру:

Sub test1()

Dim element As Range, a As String

  a = «Данные, полученные с помощью цикла For Each… Next:»

    For Each element In Selection

      a = a & vbNewLine & «Ячейка « & element.Address & _

      » содержит значение: « & CStr(element.Value)

    Next

  MsgBox a

End Sub

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

Цикл для коллекции листов

Скопируйте следующую процедуру VBA в стандартный модуль книги Excel:

Sub test2()

Dim element As Worksheet, a As String

  a = «Список листов, содержащихся в этой книге:»

    For Each element In Worksheets

      a = a & vbNewLine & element.Index _

      & «) « & element.Name

    Next

  MsgBox a

End Sub

Информационное окно MsgBox выведет список наименований всех листов рабочей книги Excel по порядковому номеру их ярлычков, соответствующих их индексам.

Цикл для массива

Присвоим массиву список наименований животных и в цикле For Each… Next запишем их в переменную a. Информационное окно MsgBox выведет список наименований животных из переменной a.

Sub test3()

Dim element As Variant, a As String, group As Variant

group = Array(«бегемот», «слон», «кенгуру», «тигр», «мышь»)

‘или можно присвоить массиву значения диапазона ячеек

‘рабочего листа, например, выбранного: group = Selection

a = «Массив содержит следующие значения:» & vbNewLine

  For Each element In group

    a = a & vbNewLine & element

  Next

MsgBox a

End Sub

Повторим ту же процедуру VBA, но всем элементам массива в цикле For Each… Next присвоим значение «Попугай». Информационное окно MsgBox выведет список наименований животных, состоящий только из попугаев, что доказывает возможность редактирования значений элементов массива в цикле For Each… Next.

Sub test4()

Dim element As Variant, a As String, group As Variant

group = Array(«бегемот», «слон», «кенгуру», «тигр», «мышь»)

‘или можно присвоить массиву значения диапазона ячеек

‘рабочего листа, например, выделенного: group = Selection

a = «Массив содержит следующие значения:» & vbNewLine

  For Each element In group

    element = «Попугай»

    a = a & vbNewLine & element

  Next

MsgBox a

End Sub

Этот код, как и все остальные в этой статье, тестировался в Excel 2016.

Цикл для коллекции подкаталогов и выход из цикла

В этом примере мы будем добавлять в переменную a названия подкаталогов на диске C вашего компьютера. Когда цикл дойдет до папки Program Files, он добавит в переменную a ее название и сообщение: «Хватит, дальше читать не буду! С уважением, Ваш цикл For Each… Next.».

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

Sub test5()

Dim FSO As Object, myFolders As Object, myFolder As Object, a As String

‘Создаем новый FileSystemObject и присваиваем его переменной «FSO»

Set FSO = CreateObject(«Scripting.FileSystemObject»)

‘Извлекаем список подкаталогов на диске «C» и присваиваем

‘его переменной «myFolders»

Set myFolders = FSO.GetFolder(«C:»)

a = «Папки на диске C:» & vbNewLine

‘Проходим циклом по списку подкаталогов и добавляем в переменную «a«

‘их имена, дойдя до папки «Program Files«, выходим из цикла

  For Each myFolder In myFolders.SubFolders

    a = a & vbNewLine & myFolder.Name

    If myFolder.Name = «Program Files» Then

      a = a & vbNewLine & vbNewLine & «Хватит, дальше читать не буду!» _

      & vbNewLine & vbNewLine & «С уважением,» & vbNewLine & _

      «Ваш цикл For Each... Next.«

  Exit For

    End If

  Next

Set FSO = Nothing

MsgBox a

End Sub

Информационное окно MsgBox выведет список наименований подкаталогов на диске C вашего компьютера до папки Program Files включительно и сообщение цикла о прекращении своей работы.

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


Home / VBA / How to Loop Through All the Sheets using VBA in Excel

There are two ways to loop through all the sheets that you have in a workbook.

  • FOR NEXT LOOP     
  • FOR EACH LOOP

1. Using For Each Loop

As you know with FOR EACH you can loop through all the objects in the collection and in a workbook worksheets are a collection of all the worksheets.

Use the following steps:

  1. First, declare a variable to refer to a worksheet for the loop.
    1-declare-a-variable-to-refer
  2. After that, start the loop with the keyword “For Each” and refer to each worksheet in the workbook.
    2-start-the-loop-with-the-keyword
  3. Now let’s say you want to enter a value in the cell A1 of each worksheet you can use write code like following.
    3-want-to-enter-a-value-in-the-cell
  4. In the end, use the keyword “End” to end the loop.
    4-use-the-keyword-end

Helpful Links: Run a Macro – Macro Recorder – Visual Basic Editor – Personal Macro Workbook

Sub vba_loop_sheets()

Dim ws As Worksheet

For Each ws In ThisWorkbook.Worksheets

    ws.Range("A1").Value = "Yes"

Next ws

End Sub

This code loops through each sheet and enters the value in the cell A1 of each sheet. The benefit of using this method is it loops through all the sheets in the workbook.

And if you want to loop through all the worksheets into a close workbook, use code like below.

Sub vba_loop_sheets()

Dim wb As Workbook
Dim ws As Worksheet

Application.DisplayAlerts = False

Set wb = Workbooks.Open("C:UsersDellDesktopsample-file.xlsx")

For Each ws In wb.Worksheets
    ws.Range("A1").Value = "Done"
Next ws

wb.Close SaveChanges:=True

Application.DisplayAlerts = True

End Sub

2. Use the For Next Loop

You can also loop by using the FOR NEXT loop, where you can use the count of the sheets to decide the number of loops to perform and use the loop counter to refer to each sheet.

Here are the steps you need to follow:

  1. First, you need to declare two variables to store count value for the loop and one for the count of the sheets that you have in the workbook.
    5-declare-to-variable-to-write-count-value
  2. Now, set the value for the “shtCount” variable equivalent to the number of sheets that you have in the workbook.
    6-set-the-value-for-the-shtcount
  3. After that, start the code for loop using the “For i” keyword and use the sheet count of the max value for the loop counter.
    7-start-the-code
  4. From here, you need to use the loop counter to loop through all the sheets and enter value “Yes” in the cell A1 of every sheet.
    8-use-the-loop-counter-to-loop

Full Code

Sub vba_loop_sheets()

Dim i As Long
Dim shtCount As Long

shtCount = Sheets.Count

For i = 1 To shtCount

    Sheets(i).Range("A1").Value = "Yes"

Next i

End Sub

And if you want to loop through a workbook that is closed then use the following code.

Sub vba_loop_sheets()

Dim i As Long
Dim shtCount As Long

Set wb = Workbooks.Open("C:UsersDellDesktopsample-file.xlsx")
shtCount = wb.Sheets.Count

Application.DisplayAlerts = False

For i = 1 To shtCount

    wb.Sheets(i).Range("A1").Value = "Yes"

Next i

wb.Close SaveChanges:=True

Application.DisplayAlerts = True

End Sub

    Понравилась статья? Поделить с друзьями:
  • Vba excel цикл по диапазону ячеек в excel
  • Vba excel функция and
  • Vba excel функции ячеек
  • Vba excel функции целое
  • Vba excel функции файлов