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

为什么范围工作,而不是细胞?

为什么范围工作,而不是细胞?

为什么范围工作,而不是细胞?我试图通过将值从一个范围分配到另一个工作簿,将一些数据从一个工作簿转移到另一个工作簿。当我使用普通范围语法来指定目标范围(“A1:B2”)时,我的代码可以工作,但是如果我尝试使用范围,单元格语法(范围(单元格(1,1),单元格(2,2)不能工作。我激活目标工作簿(ActiveWorkbook),并在源工作簿(ThisWorkbook)中运行代码。此代码适用于:ActiveWorkbook.Worksheets(1).Range("A1:B2").Value _= ThisWorkbook.Worksheets(1).Range(Cells(1, 1), Cells(2, 2)).Value但是这个代码没有:ActiveWorkbook.Worksheets(1).Range(Cells(1, 1), Cells(2, 2)).Value _= ThisWorkbook.Worksheets(1).Range(Cells(1, 1), Cells(2, 2)).Value我得到的错误是运行时错误‘1004’:应用程序定义的或对象定义的错误。有谁知道为什么使用Cells对象会给我带来问题,或者是否还有其他我不知道的问题?
查看完整描述

2 回答

?
三国纷争

TA贡献1804条经验 获得超7个赞

问题是Cells不合格,这意味着这些单元格引用的工作表根据代码所在位置不同。任何时候你打电话RangeCellsRowsUsedRange或任何返回Range对象的内容,如果您不指定它在哪个表上,该工作表将根据以下内容分配:

  • 在工作表的类模块中:不管什么是活动的
  • 在任何其他模块中:ActiveSheet

你有资格Range引用,但是Cells引用是不限定的,很可能指向ActivSheet。就像写作

ThisWorkbook.Worksheets(1).Range(ActiveSheet.Cells(1, 1), ActiveSheetCells(2, 2)).Value

当然,这没有任何意义,除非ThisWorkbook.WorkSheets(1)碰巧是活动的。我经常喜欢使用WITH块,以确保所有的内容都是完全合格的。

With Sheets(1)
    .Range(.Cells(1,1), .Cells(2,2)).Value = "something"End With

但是您引用了两个不同的工作表,所以最好使用简短的工作表变量,如下所示:

Dim shSource As WorksheetDim shDest As WorksheetSet shSource = ThisWorkbook.Worksheets(1)Set shDest = Workbooks("myBook").
Worksheets(1)shDest.Range(shDest.Cells(1, 1), shDest.Cells(2, 2)).Value = _
    shSource.Range(shSource.Cells(1, 1), shSource.Cells(2, 2)).Value

但实际上,如果要硬编码Cells争论,你可以像

shDest.Cells(1, 1).Resize(2, 2).Value = shSource.Cells(1, 1).Resize(2, 2).Value


查看完整回答
反对 回复 2019-06-24
?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

不需要限定指令中的范围shDest.Range(shDest.Cells(1, 1), shDest.Cells(2, 2)).Value = _ shSource.Range(shSource.Cells(1, 1), shSource.Cells(2, 2)).Value这也是正确的Range(shDest.Cells(1, 1), shDest.Cells(2, 2)).Value= _ Range(shSource.Cells(1, 1), shSource.Cells(2, 2)).Value

查看完整回答
反对 回复 2019-06-24
  • 2 回答
  • 0 关注
  • 528 浏览

添加回答

举报

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