#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
и второй лист на панели вкладок.