2014-11-25 10 views
0

Следующий код должен скопировать все рабочие листы (за исключением последних 2) из ​​книги под названием PCReport в новую книгу под названием Insp &.Копирование нескольких листов в другую книгу

Он падает на линии

Workbooks(xWkb).Sheets(sheet.Name).Copy after:=Workbooks(tgtWkb).Sheets(x) 

Ошибка ошибки во время выполнения 424, объект, необходимый.

х = 1, всего = 10, xWkb = "PCReport.xlsm", tgtWkb = "Insp25112015.xls"

Dim total As Integer 
Dim NewWkb As Workbook 
Dim xWs As Worksheet 
Dim xWkb As String 
Dim tgtWkb As String 
Dim i As Integer 

xWkb = "PCReport.xlsm" 
Set NewWkb = Workbooks.Add 
'ActiveWorkbook.SaveAs "C:\Users\Carol\Desktop\Insp" & Format(Date, "ddmmyyyy") & ".xls" 
ActiveWorkbook.SaveAs "C:\Users\Carol.Hedges\Insp" & Format(Date, "ddmmyyyy") & ".xls" 
tgtWkb = ActiveWorkbook.Name 
total = Workbooks(xWkb).Worksheets.Count 
i = 1 
For x = 1 To total - 2 
    Workbooks(xWkb).Sheets(sheet.Name).Copy after:=Workbooks(tgtWkb).Sheets(x) 
    i = i + 1 
Next 
+0

Откуда взялась переменная x, я думаю, вы используете переменную 'i'? –

+0

Что такое 'sheet'' sheet.Name'? Вы не заявляете об этом. –

+0

изменить строку на «Рабочие книги (xWkb). Таблицы (x). Копировать после: = Рабочие книги (tgtWkb). Таблицы (x)'. примечание: использование индекса может быть сложным, возможно, лучше всего соединить все листы и добавить условие, чтобы избежать двух последних листов по имени. Примечание 2: какая переменная i используется для?, Используйте Option Explicit, некоторые переменные не объявлены. –

ответ

1

Это может помочь вам, вам не нужно я, как предложил Paresh, его может быть полезно при использовании цикла while, но не здесь:

Dim NewWkb As Workbook 
Dim xWkb As Workbook 
Dim x as Integer 

Set xWkb = Workbooks("PCReport.xlsm") 
Set NewWkb = Workbooks.Add 
NewWkb.SaveAs "C:\Users\Carol.Hedges\Insp" & Format(Date, "ddmmyyyy") & ".xls" 
For x = 1 To xWkb.Worksheets.Count - 2 
    xWkb.Sheets(x).Copy after:=NewWkb.worksheets(NewWkb.worksheets.count) 
Next x 
+0

Хороший ответ. Вам все равно нужно объявить x как long или integer. –

+0

Я отредактировал ответ. Но на самом деле, если Option Explicit не написан, код все еще работает. Для более крупных проектов, объявляющих все переменные, необходимо четко указать области переменных, но для одной процедуры я не знаю, является ли необходимость такой сильной. –

Смежные вопросы