【问题标题】:VBA trying to specify a newly created workbook rather than activeworkbook (to paste some data into the new one)VBA 试图指定一个新创建的工作簿而不是活动工作簿(将一些数据粘贴到新工作簿中)
【发布时间】:2017-12-08 16:01:58
【问题描述】:

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

【问题讨论】:

标签: vba excel


【解决方案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

【讨论】:

  • 是的!谢谢。但是现在当它粘贴时,它也会粘贴格式并弹出一个对话框,显示“您正在粘贴的范围包含无法粘贴到此 Excel 实例中的公式;但是,这些公式将作为值粘贴......”即使我有将粘贴指定为值的行。对此有什么想法吗?
  • 您是否也将保存的行更新为使用oWb 而不是ActiveWorkbook
  • 是的,我做到了。它实际上不是问题,因为我保存为 .csv 文件并且格式无论如何都不会保存,但它有点奇怪。
猜你喜欢
  • 1970-01-01
  • 2017-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-16
  • 2017-02-09
相关资源
最近更新 更多