Копировать рабочий лист, указав его индекс, не работает

#excel #vba

Вопрос:

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

 Dim targetWb As Workbook
Dim targetSh As Worksheet
Dim sourceWb As Workbook
Dim sourceSh As Worksheet

Set targetWb = Workbooks.Open(Targetfilename)
Set targetSh = targetWb .Sheets("Sheet1")

Set sourceWb = Workbooks.Open(Sourcefilename)

'Specify the index of the sheet here 
'When specifying its sheet name, it works
Set sourceSh = sourceWb.Sheets(2)

targetSh.Activate
sourceSh.Copy After:=targetSh 
 

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

1. Что вы подразумеваете под «не работает»? Получена ошибка или не скопирована правильная? Сколько листов имеет исходный ВБ?

2. @ACCtionMan он не получает никаких ошибок. При выполнении макроса он завершается без ошибок, но не копирует и не вставляет лист в целевой файл. Исходный файл состоит из 13 листов.

3. Есть ли sourceWb скрытые простыни? Что Debug.Print sourceWb.Sheets("Sheetname").Index возвращается в ближайшем окне?

4. Я просто продублировал ваш код с помощью двух моих собственных рабочих книг, и это сработало, так что не знаю, что случилось с вашим. Если вы это сделаете Debug.Print sourceWb.Sheets(2).Name , получите ли вы предполагаемое имя листа?

5. Обратите внимание, что Sheets и Worksheets имеют разные подсчеты. В то время Sheets как все виды листов (рабочие листы, таблицы диаграмм и т. Д.) Worksheets Содержат только рабочие листы! Также обратите внимание, что индекс-это позиция вкладки на панели вкладок «Листы» под листами и не имеет никакого отношения к названию листов. Таким Sheets("Sheet1") образом, может быть тот же лист, Sheets(2) что Sheet1 и второй лист на панели вкладок.