【发布时间】:2020-02-04 18:48:29
【问题描述】:
我查看了这个问题并看到了几个解决方案,例如选择或具有受保护的工作表,这些都不适用于我。
由于各种原因,我无法发布整个代码,但我会描述它的作用并发布给我带来问题的确切子代码。
我有一个宏,它根据用户输入的月份和年份(例如“1”-“31”或“1”-“30”等)生成许多工作表。为了生成这些工作表,宏会复制一个恰当地命名为“EXAMPLE”的工作表。复制的一件事是附有宏的图片(只是一个带有“导出”字样的矩形)。
我最近通过移动这张图片的位置做了我认为是外观上的改变,从那时起,当我运行宏时出现错误:
“运行时错误‘1004’: Microsoft Excel 无法粘贴数据。”
“结束”“调试”和“帮助”选项
如果我选择“调试”,它会将我指向在生成宏的过程中调用的第二个宏'
Sub CopyAllShapes()
Dim ws As Worksheet
' Sets the non-generated worksheets as an array
nSheets = Array("EXAMPLE", "Weekly Totals", "Menu")
' Copies the Picture from the EXAMPLE sheet to all worksheets not in the array and then assigns a
' seperate Macro called "Export" to the picture on each of these sheets.
For Each ws In ActiveWorkbook.Worksheets
If Not IsNumeric(Application.Match(ws.Name, nSheets,0)) Then
Sheets("EXAMPLE").Shapes("Picture 1").Copy
ws.Range("J62").PasteSpecial
ws.Shapes("Picture 1").OnAction = "Export"
End If
Next ws
Application.CutCopyMode = xlCopy
End Sub
Debug 选项突出显示该行
ws.Range("J62").PasteSpecial
真正让我感到困惑的是,如果我选择“结束”而不是“调试”,宏会停止,但所有工作表都已粘贴图片以及分配的导出宏,并且一切都按预期工作。如果我是唯一一个使用这个的人,那将是一个小麻烦,但是这个文档被许多不能可靠地被告知“忽略”错误的人使用。由于宏按预期运行,我该如何解决导致问题的原因并使错误消失?
正如我所说,我不能发布整个宏,但如果有人需要更多信息,我可以发布一些零碎的信息。
【问题讨论】:
-
我运行代码并添加了一个名为“图片 1”的形状,它对我来说粘贴得很好。
-
把它移回去有用吗?
-
@PeterT 将其移回并不是一个真正的选择,因为我必须调整单元格。但是,我仍然保存了工作簿预先更改的副本,并且在那里运行良好。
-
@BrandonMurphy -
Dim ws as Worksheet是正确的选择。 -
@BrandonMurphy 正如我所说,某些在 Excel 2016 中有效的东西在 2013 年无效。有时只是因为错误,我猜。即使没有,改变看似不重要的事情(对于像我这样的新手)可能会有所帮助。当出现类似错误时,我通常会稍微更改代码。也许试试这个approach。而不是 'ws.Range("J62").PasteSpecial',我会添加三行 'Set myPic = ws.Pictures.Paste', 'myPic.Left = ws.Range("J62").Left', 'myPic .Top = ws.Range("J62").Top' 并声明 myPic 为图片。