将所有工作簿表复制到新工作簿 VBA

3
我正在使用这段代码将工作簿中的每个工作表复制到一个新的工作簿中,它可以正常运行,但会反转工作表的顺序,有没有办法防止它发生这种情况?
Sub copy()

'copies all the sheets of the open workbook to a new one
Dim thisWb As Workbook, wbTemp As Workbook
Dim ws As Worksheet

On Error GoTo Whoa

Application.DisplayAlerts = False

Set thisWb = ThisWorkbook
Set wbTemp = Workbooks.Add

On Error Resume Next
For Each ws In wbTemp.Worksheets
    ws.Delete
Next
On Error GoTo 0

For Each ws In thisWb.Sheets
    ws.copy After:=wbTemp.Sheets(1)
Next
wbTemp.Sheets(1).Delete

'save vba code here
Application.Dialogs(xlDialogSaveAs).Show Range("CA1").Text & "- (Submittal) " & Format(Date, "mm-dd-yy") & "_" & Format(Time, "hhmm") & ".xlsx"



LetsContinue:
Application.DisplayAlerts = True
Exit Sub
Whoa:
MsgBox Err.Description
Resume LetsContinue

End Sub

我正在复制所有的工作表,以便将其保存为另一种文件扩展名,而这是我找到的唯一有效的方法。

在复制前的工作簿: 输入图像描述

复制后的工作簿: 输入图像描述

2个回答

2

根据Scott Craner的评论,OP回复表明它有效:

Change

ws.copy After:=wbTemp.Sheets(1)

to:

ws.copy After:=wbTemp.Sheets(wbTemp.Worksheets.Count)

0
如果您只想更改文件格式,
(我正在复制所有工作表,以便将其保存为不同的文件扩展名,这是我找到的唯一有效的方法。)
那么您可以尝试使用以下代码:
Sub Test()
    fn = Range("CA1").Text & "- (Submittal) " & Format(Now, "mm-dd-yy_hhmm")
    fileSaveName = Application.GetSaveAsFilename(InitialFileName:=fn, fileFilter:="Excel Workbook (*.xlsx), *.xlsx")
    If fileSaveName <> False Then
     Application.DisplayAlerts = False
     ActiveWorkbook.SaveAs fileSaveName, xlOpenXMLWorkbook
     Application.DisplayAlerts = True
    End If
End Sub

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接