VBA:"工作表类的粘贴方法失败"偶尔会发生

时间:2015-07-02 20:46:14

标签: excel vba excel-vba

某些上下文:以下宏打开指定目录中的最新文件。我试图将新打开的工作表中的所有数据复制到另一个工作表中。有时,只有有时,我收到1004错误。

  

" Worksheet类的粘贴方法失败"。

有时宏工作。我无法确定为什么会发生这种情况。

任何人都可以识别代码问题吗? 清除剪贴板有时会起作用,但并非总是如此。 此外,我一直在使用几个宏,就像这个宏(链接到不同的文件夹)在一个更大的宏。我偶尔遇到同样的问题。

Sub ImportOldRates()

'Declare the variables
Dim MyPath As String
Dim MyFile As String
Dim LatestFile As String
Dim LatestDate As Date
Dim LMD As Date

'Specify the path to the folder
MyPath = "C:\Folder1\Folder2\"

'Make sure that the path ends in a backslash
If Right(MyPath, 1) <> "\" Then MyPath = MyPath & "\"

'Get the first Excel file from the folder
MyFile = Dir(MyPath & "*.xls", vbNormal)

'If no files were found, exit the sub
If Len(MyFile) = 0 Then
    MsgBox "No files were found...", vbExclamation
    Exit Sub
End If

'Loop through each Excel file in the folder
Do While Len(MyFile) > 0

    'Assign the date/time of the current file to a variable
    LMD = FileDateTime(MyPath & MyFile)

    'If the date/time of the current file is greater than the latest
    'recorded date, assign its filename and date/time to variables
    If LMD > LatestDate Then
        LatestFile = MyFile
        LatestDate = LMD
    End If

    'Get the next Excel file from the folder
    MyFile = Dir

Loop

        'Open the latest file
Workbooks.Open MyPath & LatestFile
Application.DisplayAlerts = False
Application.EnableEvents = False
Application.Run "ConnectChartEvents"
Cells.Select
Range("E2").Activate
Selection.copy
ActiveWindow.Close
ActiveSheet.PasteSpecial Format:="Unicode Text", Link:=False, _
DisplayAsIcon:=False, NoHTMLFormatting:=True
Application.CutCopyMode = False
Selection.Columns.AutoFit
Range("A1").Select
Application.DisplayAlerts = True
Application.EnableEvents = True

End Sub

4 个答案:

答案 0 :(得分:2)

这可能更适合作为评论,但我想加上我的两分钱,但还没有能力在这里发表评论。

我在宏中不时遇到类似的错误,用于将图表从Excel复制并粘贴到PowerPoint演示文稿中;至少对我来说,当宏试图粘贴到PPT时,偶尔会出现错误,这让我相信问题在于在Excel程序和PPT程序之间翻转。

由于我懒得找出一种更有效的方法将图像传送到PPT,我在下面的行中添加了以避免错误在大多数情况下。

Application.Wait (Now + TimeValue("0:00:01"))

我在调用PPT之前立即添加了这个,它大大减少了错误的发生(我现在很少得到它,当我再次运行宏时工作正常)。它基本上只是强制宏停止并等待1秒再继续,允许程序在尝试粘贴数据之前赶上。理论上有更多直接的方法可以实现这一点,例如DoEvents应该使宏等待当前进程完成,但是从未解决过这个问题。

答案 1 :(得分:1)

感谢大家的贡献。

事实证明,问题是由

引起的
 Range("E2").Activate

复制整张表有时会耗尽系统内存并导致复制功能失败。对于那些感兴趣的人,我只选择了一个较小的范围。

 Range("A1,Z400").Activate

这解决了问题

答案 2 :(得分:0)

我最近遇到了这个问题,上述修复程序对我来说都不是完全一致的。我找到了要加入该线程的解决方案。

实施错误处理以重试副本和粘贴似乎是最一致的解决方案。我们中间比较保守的人可能还希望实现一个计数器,将重试次数限制为100次左右。

这解决了我的失败,并且由于Excel中的垃圾回收充其量是可疑的,这可能是最好的解决方案。

答案 3 :(得分:0)

我遇到了同样的问题,将复制和粘贴包装在“ DoEvents”中对我来说是成功的。在运行for循环时,我在用户窗体中的进度栏​​更新了自己时发生了错误。

...
DoEvents
Worksheets(1).Rows(i).Copy
Worksheets(2).Range("A" & i).PasteSpecial xlPasteAll
DoEvents
...