#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. Большое вам спасибо! Пришлось немного подправить, но я получил код, который делал именно то, что я хотел.