VBA:粘贴范围清除后粘贴功能导致1004错误
Posted
技术标签:
【中文标题】VBA:粘贴范围清除后粘贴功能导致1004错误【英文标题】:VBA: Paste function causes 1004 error after the paste range is cleared 【发布时间】:2019-02-20 07:04:54 【问题描述】:当我尝试将一些数据从一张表(“导入”)复制到另一张表(“TIs”)时,我的代码有问题。第二张表中有一个范围,在复制数据之前将其清除。当我尝试粘贴它时,我得到一个
错误 1004“应用程序定义或对象定义错误”
Sub Data()
Sheets("Import").Cells.ClearContents
Sheets("TIs").Range("A2:F10000").ClearContents
Dim sPath As String 'Input file path
Dim k As Integer
Dim CopyData
CopyData = 10
For k = 1 To 1 'For now k=1
sPath = ThisWorkbook.Path & "\InputData\Data (" & k & ").csv" 'defines a path to csv file
copyDataFromCsvFileToSheet sPath, ",", "Import" 'imports data from csv file to "Import" Sheet (this is another functions, it works perfectly)
DataLength = Application.WorksheetFunction.CountA(Sheets("Import").Range("B:B")) 'defines last row where are imported data
Sheets("Import").Range(Cells(CopyData + 1, 2), Cells(DataLength, 7)).Copy Sheets("TIs").Range("A2") 'copies it from one sheet to another
Next k
End Sub
在我第一次运行 Clear / ClearContents 功能之前,这非常有效。在第一个版本中,这个范围没有被清除并且工作正常。然后我第一次运行带有 Clear 功能的宏,从那时起“粘贴”功能根本不起作用 - 无论 Clear / ClearContents 功能是否被注释。
你知道问题是什么吗? 感谢您的支持。
【问题讨论】:
当您运行它时,哪个工作表处于活动状态? 第一个——“导入” 始终参考Cells
的工作表,例如Sheets("Import").Cells
,否则可能会失败。还有Dim CopyData As Long
。 DataLength
也应声明为 Long
• 我建议始终激活 Option Explicit
:在 VBA 编辑器中转到 Tools › Options › @987654321 @。 • 请说出CopyData
和DataLength
的值吗?
谢谢。顺便说一句 - 在我第一次运行 Clear / ClearContents 功能之前,这非常有效。
本例中的 DataLength 是 3713(但它可以达到最大 ~8000)。 CopyData 在此示例中为 10,但可以达到 ~3000。目的是删除不相关的数据,这些数据通常位于 csv 文件的第一部分。
【参考方案1】:
用户 PEH 解决了这个问题。问题出在带行的工作表上
Sheets("Import").Range(Cells(CopyData + 1, 2), Cells(DataLength, 7)).Copy Sheets("TIs").Range("A2") 'copies it from one sheet to another
正确的版本是:
Sheets("Import").Range(Sheets("Import").Cells(CopyData + 1, 2), Sheets("Import").Cells(DataLength, 7)).Copy Sheets("TIs").Range("A2") 'copies it from one sheet to another
【讨论】:
以上是关于VBA:粘贴范围清除后粘贴功能导致1004错误的主要内容,如果未能解决你的问题,请参考以下文章