VBA尝试指定新创建的工作簿而不是activeworkbook(将一些数据粘贴到新工作簿中)

时间:2017-12-08 16:01:59

标签: excel vba excel-vba

我有一些复制某些数据的代码,然后我希望它创建一个新工作簿并将复制的数据粘贴到新工作簿中。目前代码使用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选择保存文件夹后崩溃没有失败。这有明显的原因吗?

1 个答案:

答案 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