为了账号安全,请及时绑定邮箱和手机立即绑定

EXCEL VBA,从不活动的工作表中获取范围。

EXCEL VBA,从不活动的工作表中获取范围。

皈依舞 2019-06-05 10:47:32
EXCEL VBA,从不活动的工作表中获取范围。当我查看“临时”工作表时,这个脚本工作得很好。但是当我在另一个工作表中时,复制命令就失败了。它提供了一个“应用程序定义的或对象定义的错误”。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我不想激活“临时”表来获取这个我还能做什么
查看完整描述

3 回答

?
MMMHUHU

TA贡献1834条经验 获得超8个赞

你的问题是因为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 WorksheetDim sh2 As WorksheetSet sh1 = ActiveWorkbook.Sheets("Temp")Set sh2 = ActiveWorkbook.Sheets("Overview")With sh1    
.Range(.Cells(1,1), .Cells(1,1).End(xlDown)).CopyEnd Withsh2.Range("C40").PasteSpecial


查看完整回答
反对 回复 2019-06-05
?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

我自己也遇到了这样的问题:我试图在一个单独的工作表中搜索一个单元格的颜色是否与列表中的一个单元格的颜色相匹配,并返回一个字符串值:如果您使用.Cells(行、列),您只需要这样做:Sheets(“Sheetname”).Cells(行,列)引用该范围的单元格。

我在一个由500个细胞组成的街区循环着,它对我来说运行的速度惊人的快。

我还没有尝试过这个.Copy,但是我假设它会以同样的方式工作。


查看完整回答
反对 回复 2019-06-05
?
波斯汪

TA贡献1811条经验 获得超4个赞

这样就行了,我不喜欢在单元格为空的情况下使用(Xldown)。

Dim lRow As LonglRow = Sheets("Temp").Cells(Cells.Rows.Count, "A").End(xlUp).RowWith 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")


查看完整回答
反对 回复 2019-06-05
  • 3 回答
  • 0 关注
  • 1059 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信