2014-11-25 163 views
0

以下代碼應該將工作簿中名爲PCReport的所有工作表(除了最後2個)複製到名爲Insp & date的新工作簿。將多個工作表複製到不同的工作簿

它翻倒就行

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

該錯誤是運行時錯誤424,所需的對象。

X = 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'變量來自我認爲你使用變量'我'? – 2014-11-25 05:52:00

+0

'sheet.Name'的sheet應該是什麼?你不要聲明它。 – 2014-11-25 06:02:26

+0

將行更改爲'Workbooks(xWkb).Sheets(x).Copy after:= Workbooks(tgtWkb).Sheets(x)'。注意:使用索引可能會很棘手,也許會更好地循環所有工作表並添加一個條件以避免按名稱排列的最後兩個工作表。注2:我用什麼變量?,使用Option Explicit,一些變量沒有聲明。 – 2014-11-26 21:02:05

回答

1

這可以幫助你,你不需要我的建議帕雷什,它在使用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。 – 2014-11-26 21:05:41

+0

我編輯了答案。但事實上,如果Option Explicit沒有寫入,代碼仍然有效。對於更大型的項目來說,聲明所有變量對於清楚地說明變量的範圍是必要的,但對於一個程序,我不知道是否必要性很強。 – 2014-11-27 12:31:52

相關問題