gpt4 book ai didi

vba - 为什么 Range 有效,但 Cells 无效?

转载 作者:行者123 更新时间:2023-12-03 08:33:55 25 4
gpt4 key购买 nike

我试图通过将值从一个范围分配到另一个范围来将一些数据从一个工作簿移动到另一个工作簿。当我使用正常的 Range 语法来指定目标范围 (Range("A1:B2")) 我的代码有效,但如果我尝试使用 Range, Cells 语法 (Range(Cells(1,1),Cells(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是不合格的,这意味着这些单元格所引用的工作表根据您的代码所在的位置而有所不同。随时调用RangeCellsRowsUsedRange或任何返回 Range 对象的东西,并且您没有指定它在哪个工作表上,工作表将根据以下方式分配:

  • 在工作表的类模块中:无论处于事件状态的工作表如何
  • 在任何其他模块中:ActiveSheet

  • 您符合 Range 的条件引用,但 Cells引用是不合格的,很可能指向事件表。这就像写作
    ThisWorkbook.Worksheets(1).Range(ActiveSheet.Cells(1, 1), ActiveSheetCells(2, 2)).Value

    除非 ThisWorkbook.Worksheets(1) 恰好处于事件状态,否则这当然没有任何意义。我经常喜欢使用 With block ,以确保所有内容都是完全合格的。
    With Sheets(1)
    .Range(.Cells(1,1), .Cells(2,2)).Value = "something"
    End With

    但是您引用了两个不同的工作表,因此最好使用短工作表变量,例如:
    Dim shSource As Worksheet
    Dim shDest As Worksheet

    Set 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

    关于vba - 为什么 Range 有效,但 Cells 无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63987984/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com