Excel VBA,从非活动工作表中获取范围

时间:2011-11-08 08:55:07

标签: excel vba

当我查看“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
  • 我不想激活“Temp”表来获取此

我还能做什么

3 个答案:

答案 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")