我有一些复制某些数据的代码,然后我希望它创建一个新工作簿并将复制的数据粘贴到新工作簿中。目前代码使用ActiveSheet.Range("A1").PasteSpecial
等,如果新创建的工作簿是活动工作表,但是如果它显然不起作用,那么这很好。这里是整个子(有一些stop
标记,因为我一直在调试它):
Sub ExportToCSV()
Dim ws As Worksheet, xFolder As String, xName As String
Dim InitialFoldr$
InitialFoldr$ = "L:\107xxx\1077898 A34 Oxford junctions 1718\200 M & A"
MsgBox ("Choose where to save the Paramics demands")
xFolder = GetFolder(InitialFoldr$)
For Each ws In ThisWorkbook.Worksheets
If ws.Name Like "*PDMND" Then
xName = ws.Name
ws.Range("BJ4:CK82").Copy
'Stop
With CreateObject("Excel.Application")
.Workbooks.Add
.Visible = True
End With
ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteValues
Stop
ActiveWorkbook.SaveAs Filename:=xFolder + "\" + xName + ".csv", FileFormat:=xlCSV, CreateBackup:=False
Application.DisplayAlerts = False
ActiveWorkbook.Close
Application.DisplayAlerts = True
End If
'Stop
Next
End Sub
在创建新工作簿的with
循环后,我想创建一个引用新工作簿的变量,然后我可以使用该变量将数据粘贴到正确的位置 - 或类似于此的东西 - 替换ActiveSheet.Paste
位。我该如何做到这一点?
编辑:我使用了类似答案here中的信息,所以我的代码现在看起来像这样:
xFolder = GetFolder(InitialFoldr$)
For Each ws In ThisWorkbook.Worksheets
If ws.Name Like "*PDMND" Then
xName = ws.Name
ws.Range("BJ4:CK82").Copy
Set oWb = Workbooks.Add
oWb.Range("A1").PasteSpecial Paste:=xlPasteValues
Stop
但是现在Excel选择保存文件夹后崩溃没有失败。这有明显的原因吗?
答案 0 :(得分:1)
创建新工作簿时,保存工作簿对象,以便稍后可以引用它...像这样:
在开始循环之前添加:
Dim wbNew as Workbook
然后在你的循环中...
With CreateObject("Excel.Application")
Set wbNew = .Workbooks.Add
.Visible = True
End With
wbNew.WorkSheets(1).Range("A1").PasteSpecial Paste:=xlPasteValues