当我查看“Temp”表时,此脚本正常工作。但当我在另一张纸上时,复制命令失败..它给出了“应用程序定义的或对象定义的错误”
Sheets("Temp").Range(Cells(1), Cells(1).End(xlDown)).Copy
Sheets("Overview").Range("C40").PasteSpecial
我可以使用这个脚本,但是我遇到了粘贴问题
Sheets("Temp").Columns(1).Copy
Sheets("Overview").Range("C40").PasteSpecial
我还能做什么
答案 0 :(得分:40)
您的问题是因为Cell
内的Range
引用不合格,它们引用的是默认工作表,可能不是您想要的工作表。
对于标准模块,ThisWorkbook
模块,自定义类和用户表单模块,故障是ActiveSheet
。对于模块后面的Worksheet
代码,它就是工作表。
对于模块后面的工作表代码以外的模块,您的代码实际上是在说
Sheets("Temp").Range(ActiveSheet.Cells(1), ActiveSheet.Cells(1).End(xlDown)).Copy
Sheets("Overview").Range("C40").PasteSpecial
对于模块后面的工作表代码,您的代码实际上是在说
Sheets("Temp").Range(Me.Cells(1), Me.Cells(1).End(xlDown)).Copy
Sheets("Overview").Range("C40").PasteSpecial
在任何一种情况下,解决方案都是相同的:使用所需的工作簿完全限定范围引用:
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Set sh1 = ActiveWorkbook.Sheets("Temp")
Set sh2 = ActiveWorkbook.Sheets("Overview")
With sh1
.Range(.Cells(1,1), .Cells(1,1).End(xlDown)).Copy
End With
sh2.Range("C40").PasteSpecial
答案 1 :(得分:3)
我自己遇到了这样的问题:我试图通过单独的工作表进行搜索,以查看单元格的颜色是否与列表中单元格的颜色匹配,并返回字符串值:如果您正在使用.Cells(行,列),你只需要这个: 表格(" sheetname")。单元格(行,列) 参考那个范围的细胞。
我正在循环通过一个500个单元格的块,它对我来说非常快。
我没有尝试使用.Copy,但我认为它会以同样的方式运行。
答案 2 :(得分:1)
这样做,我不喜欢使用(xlDown)以防单元格为空。
Dim lRow As Long
lRow = Sheets("Temp").Cells(Cells.Rows.Count, "A").End(xlUp).Row
With Sheets("Temp")
.Range("A1:A" & lRow).Copy Sheets("Overview").Range("C40")
End With
或者,如果您只想使用列...
Sheets("Temp").Columns(1).SpecialCells(xlCellTypeConstants).Copy Destination:=Sheets("Overview").Range("C40")