2014-11-25 168 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

相关问题