Перечислить все текущие имена листов в Excel VBA

#vba #excel

#vba #excel

Вопрос:

В настоящее время у меня есть код, который принимает вводимые пользователем данные и использует их для определения того, какой рабочий лист является «целевым» для копирования, но для многократного выполнения кода для более чем 30 листов в книге требуется много времени.
Я не уверен, с чего начать кодирование чего-то, что автоматически брало бы данные с одного листа за раз, копировало их на новый лист, запускало еще немного кода, а затем повторяло процесс до завершения. Ниже приведен текущий код.

 'Prompt User: Which sheet on Dataworkbook should be copied
    Dim mySheet As String
    mySheet = Application.InputBox("Enter a sheet name")
'User provides input

'Data copied from source workbook page from "Dataworkbook" specified by user
    x.Sheets(mySheet).Range("A1:z28").Copy
    y.Sheets("Test").Range("A1").PasteSpecial

'Copy of data appears on new sheet created when running macro
 

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

Ответ №1:

Вам просто нужна простая итерация, которая может быть выполнена с For Each ... Next помощью структурированного цикла.

Перебор Worksheets коллекции в x книге:

         'Prompt User: Which sheet on Dataworkbook should be copied
        '    Dim mySheet As String
        '    mySheet = Application.InputBox("Enter a sheet name")
        'User provides input

        Dim ws as Worksheet 
        For each ws in x.Worksheets

            'Data copied from source workbook page from "Dataworkbook" specified by user
            ws.Range("A1:z28").Copy
            y.Sheets("Test").Range("A1").PasteSpecial

            '### Put the rest of your code here to manipulate the data on ws
            '
            MsgBox ws.Range("A1").value 'etc.
            '
            '
            '###

        Next
 

Документация по каждому… Далее:

http://msdn.microsoft.com/en-us/library/office/gg264596 (v=office.15).aspx

Полный список документации по операторам VBA, которая также очень полезна:

http://msdn.microsoft.com/en-us/library/office/jj692812 (v=office.15).aspx

Комментарии:

1. Дэвид, код, которым вы поделились, работает очень хорошо, но мне нужно выполнить другой набор кода для каждого отдельного листа. Итак, мне нужно скопировать информацию из Dataworkbook-Sheet, запустить код, затем скопировать информацию из Dataworkbook-sheet2 и запустить код, скопировать информацию из Dataworkbook-sheet3 и т. Д., Если это имеет смысл.

2. Большое вам спасибо! Пришлось немного подправить, но я получил код, который делал именно то, что я хотел.