【问题标题】:Pasting Clipboard to new Workbook VBA Macro将剪贴板粘贴到新的工作簿 VBA 宏
【发布时间】:2017-02-19 05:38:35
【问题描述】:

我正在尝试遍历文件夹中的文件,从每个文件中复制大小未知的数据,然后将它们全部粘贴到新工作簿中。我似乎无法正确粘贴剪贴板,因为它总是给我一个运行时错误 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

【问题讨论】:

    标签: excel vba loops copy paste


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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-29
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多