Я пытаюсь создать и пропустить два разных массива, каждый из которых содержит 20 листов. Рабочие листы исходят из двух разных книг: «ежемесячно» и «еженедельно».Цитирование двух массивов рабочих таблиц в двух книгах
У меня есть следующие (после того, как некоторые предлагаемые изменения):
Dim Monthly As Excel.Workbook
Set Monthly = Workbooks("name of monthly workbook")
Dim Weekly As Excel.Workbook
Set Weekly = Workbooks.Open("path to weekly workbook")
Dim mWshtNames As Variant
Dim mWshtNameCrnt As Variant
Dim wWshtNames As Variant
Dim wWshtNameCrnt As Variant
mWshtNames = Array(Monthly.Worksheets("Reading Monthly"), Monthly.Worksheets("Writing Monthly"), Monthly.Worksheets("Science Monthly"))
'and so on, to include 20 worksheets
wWshtNames = Array(Weekly.Worksheets("Reading Weekly"), Weekly.Worksheets("Writing Weekly"), Weekly.Worksheets("Science Weekly"))
'and so on, to include 20 worksheets
For Each mWshtNameCrnt In mWshtNames
For Each wWshtNameCrnt In wWshtNames
MsgBox "Monthly sheet is " + mWshtNameCrnt.Name
MsgBox "Weekly sheet is " + wWshtNameCrnt.Name
'the real code will loop here; I am using MsgBox to test that the loop is working.
Next wWshtNameCrnt
Next mWshtNameCrnt
Конечная цель для кода необходимо скопировать данные из определенных ячеек в каждом еженедельном листе и вставить его в соответствующую ячейку в соответствующем Monthly Рабочий лист; поэтому петли должны быть похожи друг на друга.
Текущий результат (12 msgboxes):
- "Ежемесячный лист Чтение Monthly", "Еженедельный лист Reading Weekly", "Еженедельный лист Запись Weekly", "Еженедельный лист Наука Weekly"
- «Ежемесячный лист -« Письмо в месяц »,« Еженедельный листок читается еженедельно »,« Еженедельный листок пишет еженедельно »,« Еженедельный листок - это научный еженедельник »
- « Ежемесячный лист - это журнал «Monthly Monthly», «Weekly sheet is Reading Weekly», , «Еженедельный листок пишет еженедельно», «Еженедельный лист - это научный еженедельник»
Ожидаемый результат (6 msgboxes):
- "Ежемесячный лист Чтение Monthly", "Еженедельный лист чтения Еженедельно"
- "Ежемесячный лист Запись Monthly", "Еженедельный лист Запись Weekly"
- «Ежемесячный лист Наука в месяц», «Еженедельный лист Наука Weekly»
ответ на @Jeeped имеет тот же самый эффективный результат, когда Immediate Window возвращает девять результатов, где шесть, как ожидается. Мне кажется, мне нужно «Next wWshtNameCrnt» и «Next mWshtNameCrnt» активировать одновременно, но не знаю, как это записать.
Не следует «и так далее, чтобы включить 20 книг» и т. Д., Чтобы включить 20 workSHEETs'? – Jeeped
Что именно ваша петля должна *** делать ***? Если вы просто хотите отображать имена, вам нужно вызвать '.Name' в своих экземплярах листа. – Comintern
Вы должны использовать цикл 'For' для итерации массивов, а цикл' For Every' - итерации наборов объектов. Ваши комментарии показывают, что массивы содержат * книги *, но ваш код говорит иначе, и массивы фактически содержат * рабочие листы *. Кроме того, ваши массивы хранят объекты «Worksheet», а не только их имена, поэтому имя переменной вводит в заблуждение .... и 'mWshtNames' vs' wWshtNames' трудно читать и легко ошибаться для другого. Как насчет 'MonthlySheets' и' weeklySheets' вместо? –