将剪贴板粘贴到新工作簿VBA宏

时间:2016-10-10 18:17:46

标签: excel vba loops copy paste

我尝试遍历文件夹中的文件,从每个文件中复制未知大小的数据,然后将它们全部粘贴到新工作簿中。我似乎无法正确粘贴剪贴板,因为它总是给我一个运行时错误9,下标超出范围。

Sub LoopThroughFiles()
    Dim StrFile As String
    StrFile = Dir("filepath")

    Dim wb As Excel.Workbook
    Dim itemized As Excel.Workbook
    Dim dump As Excel.Workbook

    Do While Len(StrFile) > 0
        MsgBox StrFile
        Set dump = Workbooks.Open("dump.xlsx")
        Set wb = Workbooks.Open("StrFile")
        Set wb = ActiveWorkbook

        Worksheets("DATA2").Visible = True
        Worksheets("DATA2").Activate
        Application.Goto Reference:="R1C1:R98C1"
        Selection.EntireRow.Delete
        Range("A1").Select
        ActiveCell.CurrentRegion.Select
        Selection.Copy

        Application.Wait DateAdd("s", 1, Now())

        Set dump = ActiveWorkbook
        ActiveWorkbook.Worksheets("Sheet1").Range("A1").Activate
        ActiveCell.SendKeys ("^v")
        StrFile = Dir
    Loop
End Sub

1 个答案:

答案 0 :(得分:1)

我看到一些可能存在问题的事情。

1)当您打开" StrFile"的工作簿时你有引号:

Set wb = Workbooks.Open("StrFile")

这意味着你真的在寻找名为" StrFile的工作簿。"如果删除引号,它将插入变量的内容,我认为这是你想要的

2)我不清楚你要复制和粘贴哪个文件。您的描述看起来很清楚,但代码中存在混淆。你指的是"活跃"对象 - 我认为更好地明确地调出要复制和粘贴的对象。

换句话说,替换分配Activeworkbook的调用,而只需使用工作簿

3)严格地说,选择/复制/粘贴不是错误,但您可以通过直接复制/粘贴跳过一步。更好的是,您可以通过将一个范围复制到另一个范围来避免使用剪贴板

4)你没有问过,但是当你完成它时可能关闭工作簿

没有建议#3,它的外观如下:

Sub LoopThroughFiles()
    Dim StrFile As String
    StrFile = Dir("filepath")

    Dim wb, itemized, dump As Excel.Workbook
    Dim ws As Worksheet

    Do While Len(StrFile) > 0
        'MsgBox StrFile
        Set dump = Workbooks.Open("dump.xlsx")
        Set wb = Workbooks.Open(StrFile)

        wb.Worksheets("DATA2").Activate  ' specify which workbook directly
        Application.Goto Reference:="R1C1:R98C1"

        Selection.EntireRow.Delete

        wb.Range("A1").Copy   ' specify which wb to copy FROM

        Application.Wait DateAdd("s", 1, Now())

        ' specify which workbook to copy TO
        dump.Worksheets("Sheet1").Range("A1").PasteSpecial xlPasteValuesAndNumberFormats

        wb.Close

        StrFile = Dir
    Loop
End Sub

根据建议#3,您可以使用以下内容删除复制/粘贴:

dump.Worksheets("Sheet1").Range("A1").Value2 = wb.Range("A1").Value2

如果其他应用程序尝试使用剪贴板,这可能会有很大帮助。