将剪贴板粘贴到新工作簿 VBA 宏
Pasting Clipboard to new Workbook VBA Macro
我正在尝试遍历文件夹中的文件,从每个文件复制未知大小的数据,然后将它们依次粘贴到新工作簿中。我似乎无法让剪贴板正确粘贴,因为它总是给我一个运行时错误 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) 当您打开 "StrFile" 的工作簿时,您会在引号中找到它:
Set wb = Workbooks.Open("StrFile")
这意味着您实际上是在寻找一个名为 "StrFile." 的工作簿。如果您删除引号,它将改为插入变量的内容,我相信这就是您想要的
2) 我不清楚您要从哪个文档复制粘贴到哪个文档。您的描述似乎很清楚,但是您的代码中存在混淆。您指的是 "active" 个对象——我认为更好的方法是明确指出您要从哪个对象复制和粘贴到哪个对象。
换句话说,替换分配 Activeworkbook 的调用,而只使用工作簿
3) 严格来说做select/copy/paste并没有错,但是直接做copy/paste可以跳过一步。更好的是,您可以通过将一个范围复制到另一个范围来避免使用剪贴板
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,您可以用这样的方式消除 copy/paste:
dump.Worksheets("Sheet1").Range("A1").Value2 = wb.Range("A1").Value2
如果其他应用程序正在尝试使用剪贴板,这可能会有很大帮助。
我正在尝试遍历文件夹中的文件,从每个文件复制未知大小的数据,然后将它们依次粘贴到新工作簿中。我似乎无法让剪贴板正确粘贴,因为它总是给我一个运行时错误 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) 当您打开 "StrFile" 的工作簿时,您会在引号中找到它:
Set wb = Workbooks.Open("StrFile")
这意味着您实际上是在寻找一个名为 "StrFile." 的工作簿。如果您删除引号,它将改为插入变量的内容,我相信这就是您想要的
2) 我不清楚您要从哪个文档复制粘贴到哪个文档。您的描述似乎很清楚,但是您的代码中存在混淆。您指的是 "active" 个对象——我认为更好的方法是明确指出您要从哪个对象复制和粘贴到哪个对象。
换句话说,替换分配 Activeworkbook 的调用,而只使用工作簿
3) 严格来说做select/copy/paste并没有错,但是直接做copy/paste可以跳过一步。更好的是,您可以通过将一个范围复制到另一个范围来避免使用剪贴板
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,您可以用这样的方式消除 copy/paste:
dump.Worksheets("Sheet1").Range("A1").Value2 = wb.Range("A1").Value2
如果其他应用程序正在尝试使用剪贴板,这可能会有很大帮助。