PasteSpecial方法奇怪的错误

我已经经历了类似的问题,并没有发现这个具体的错误。

我试图制作一个通过大量CSV文件的macros,抽取我需要的必要信息,将这些数据复制并粘贴到新的工作簿中,然后closuresCSV文件并转到下一个。

当我testing我的代码,并让它逐步运行(使用F8),它运行良好,没有错误。 然而,每当我尝试,只是有代码运行(如按F5),我得到错误“类特征的粘贴特殊方法”失败。 当我按debugging这行代码被突出显示:copyRange.Offset(0,1).PasteSpecial粘贴:= xlPasteValues

我在这条线之前加了一个0.5秒的小延时,实际上在失败之前能够进一步浏览这些文件。

是否有Range.Offset方法? 我应该明确定义一个不同的复制范围吗?

代码我有如下:

Public Sub OpenTXT_CopyNewWBK(inPath As String) Application.ScreenUpdating = False Dim fso, oFolder, oSubfolder, oFile, queue As Collection Dim app As New Excel.Application app.Visible = True Dim dataRange As Range, dateRange As Range, copyRange As Range Dim lastCell, lastRow As String Dim newBook, wbk As Excel.Workbook Dim csvStart As Long Set newBook = Workbooks.Add With newBook .SaveAs Filename:="BETA RAY " & Format(Now, "ddmmyyhhmmss") End With Set fso = CreateObject("Scripting.FileSystemObject") Set queue = New Collection queue.Add fso.GetFolder(inPath) 'obviously replace Set objExcel = CreateObject("Excel.Application") objExcel.Visible = True Do While queue.Count > 0 Set oFolder = queue(1) queue.Remove 1 'dequeue For Each oSubfolder In oFolder.SubFolders queue.Add oSubfolder 'enqueue Next oSubfolder For Each oFile In oFolder.Files Set wbk = app.Workbooks.Add(oFile.Path) lastCell = wbk.Sheets(1).Range("A1").End(xlDown).Address If Len(lastCell) = 6 Then lastRow = Mid(lastCell, 4, 3) ElseIf Len(lastCell) = 5 Then lastRow = Mid(lastCell, 4, 2) ElseIf Len(lastCell) = 4 Then lastRow = Mid(lastCell, 4, 1) End If Set dateRange = wbk.Sheets(1).Range("A2", lastCell) dateRange.Select Set dataRange = wbk.Sheets(1).Range("AA2", "AM" & lastRow) dataRange.Select wbk.Application.CutCopyMode = True Set copyRange = Workbooks(newBook.name).Sheets(1).Range("A1048576").End(xlUp) If Not copyRange = "" Then Set copyRange = copyRange.Offset(1, 0) End If dateRange.Copy copyRange.PasteSpecial Paste:=xlPasteValues wbk.Application.CutCopyMode = False wbk.Application.CutCopyMode = True Application.Wait (Now + 500 * 0.00000001) dataRange.Copy copyRange.Offset(0, 1).PasteSpecial Paste:=xlPasteValues wbk.Application.CutCopyMode = False wbk.Close SaveChanges:=False Next oFile Loop app.Quit Set app = Nothing Range("B:B").Delete Range("G:G").Delete Range("L:L").Delete Application.ScreenUpdating = True End Sub 

我相信有很多更好的方法去做很多我在那里做的事情。 我真的只是使用VBA使我的工作更轻松,所以我使用的很多代码是复制,粘贴和修改,以适应我的需要。 我无法弄清楚如何使这个方法工作wbk2.sht2.Range("A1:A5") = wbk1.sht1.Range("B1:B5")我读过的一切说这应该是一个更好的方法。 此外,读取dataRange.SelectdateRange.Select的代码部分dateRange.Select是为了debugging目的。

尝试这个….

 wbk2.sht2.Range("A1:A5").value = wbk1.sht1.Range("B1:B5").value