I am having trouble getting my code for copying worksheets from one
workbook to another to work. Here is my code in its entirety:
Sub Save_Report()
Dim rngAllFiles(), rngSelectFiles(), m, fileSaveName, wkshtName As
Variant
Dim a, s, i As Integer
Dim newBook As Object
rngAllFiles = Array("1 Cover.xls", "2 Table of Contents.xls", "3 Top
Ten.xls", "4 FX Impact.xls", "5A MTD IS.xls", "5B QTD IS.xls", "5C YTD
IS.xls", "6 Sales-Internal.xls", "7 Sales-WS.xls", "8A MTD GM.xls", "8B
QTD GM.xls", "8C YTD GM.xls", "9 Op Exp by Location.xls", "10 RD Exp by
Month.xls", "11 AZ versus Pr. Year.xls", "12 AZ versus Budgdt.xls", "13
Payroll by BU.xls", "14 PR Tax by BU.xls", "15 Supplies by BU.xls", "16
Catalog by BU.xls", "17 R&M by BU.xls", "18 A&P by BU.xls", "19 T&E
BU.xls", "20 LP&C BU.xls", "21 R&H by BU.xls", "22 Headcount.xls", "23
Payroll by Location.xls", "24 Payroll versus Pr. Year.xls", "25 Payroll
versus Budget.xls", "26 BS.xls", "27 AR.xls", "28 Inventory.xls", "29
Cap Ex.xls")
a = 0
s = 0
i = Workbooks("Save_Final_Op_Summary.xls").Worksheets("Save Final
Report").Cells(40, 2)
If i = 1 Then
ReDim rngSelectFiles(i)
Else: ReDim rngSelectFiles(i - 1)
End If
For r = 7 To 39
If ActiveSheet.Cells(r, 2) = "True" Then
rngSelectFiles(s) = rngAllFiles(a)
s = s + 1
Else: End If
a = a + 1
Next r
Set newBook = Workbooks.Add
fileSaveName = Application.GetSaveAsFilename("newBook", "Microsoft
Excel Workbook (*.xls), *.xls")
newBook.SaveAs Filename:=fileSaveName
For Each m In rngSelectFiles
Workbooks.Open Filename:=m
Workbooks(m).Sheets(1).Copy
before:=Workbooks(fileSaveName).Sheets(1)
fileSaveName.Activate
ActiveSheet.UsedRange.PasteSpecial Paste:=xlPasteValues
Next m
End Sub
I am getting a subscript out of range error on this line
"Workbooks(m).Sheets(1).Copy
before:=Workbooks(fileSaveName).Sheets(1)".
Can anyone help me with this?
Thx,
wisccal@googlemail.com - 22 Nov 2006 08:12 GMT
The problem is that the function getSaveAsFileName returns a full path
like "c:\myFile.xls". The Workbook Collection's index can only be used
with file names, though. In your case Workbooks("myFile.xls"). The
following should fix this problem
Workbooks(Mid(fileSaveName, InStrRev(fileSaveName, "\") + 1)).Sheets(1)
InStrRev looks up the last occurrence of the file separator "\", and
Mid returns a substring from that position + 1 to fileSaveName's end.
Regards,
Steve
Also, you are referring to
andrea schrieb:
> I am having trouble getting my code for copying worksheets from one
> workbook to another to work. Here is my code in its entirety:
[quoted text clipped - 56 lines]
>
> Thx,
andrea - 22 Nov 2006 15:50 GMT
Thanks! That did it and the macro works great now.
> The problem is that the function getSaveAsFileName returns a full path
> like "c:\myFile.xls". The Workbook Collection's index can only be used
[quoted text clipped - 72 lines]
> >
> > Thx,