【问题标题】:Variable type for cell单元格的变量类型
【发布时间】:2019-11-21 17:27:09
【问题描述】:

我尝试过 Dim CellA As LongAs IntegerAs Range 尝试保存单元格的地址。在这个例子中,(使用 Range)我得到了

运行时错误 91 对象变量或未设置块变量

第 4 行:CellA = Cells(ActiveCell.Row - 1, 1)

Private Sub Worksheet_Change(ByVal Target As Range)

Dim ColA As String
Dim ColB As String
Dim CellA As Range

CellA = Cells(ActiveCell.Row - 1, 1)
If (Len(Cells(ActiveCell.Row - 1, 1) > 0)) Then
    ColA = CleanCode(Cells(ActiveCell.Row - 1, 1))
    ColB = CleanCode(Cells(ActiveCell.Row - 1, 2))
    If (ColA <> ColB) Then
        MsgBox (Cells(ActiveCell.Row - 1, 2))
        Range(Cells(ActiveCell.Row - 1, 1)).Select
    End If
End If

End Sub

我想用变量引用替换我所有的 Cells(ActiveCell.Row...) 引用,包括我的范围选择(这显然不能正常工作)。

仅供参考:当我在 A 列单元格中键入的内容与 B 列单元格不匹配时,此例程会生成一个消息框,其中包含(隐藏的)B 列单元格的内容。我写它是为了帮助我记住我的台词以用于我的视频头像。

【问题讨论】:

  • 错误信息很清楚——你有一个不是Set的对象变量。
  • 同意。我理解这个论点是要求不同类型的变量。我把对象这个词作为一个通用术语而不是变量类型。没有借口。

标签: excel vba variables


【解决方案1】:

因为 CellA 是一个你不能这样做的对象

CellA = Cells(ActiveCell.Row - 1, 1)

你必须像这样使用Set关键字

 Set CellA = Cells(ActiveCell.Row - 1, 1)

【讨论】:

  • 感谢 Glenn G。没想到它是一个对象。我仍然有试图将光标定位回有问题的单元格的问题。我发现 Range 命令不是正确的,或者我需要一个不同的类型参数。
  • 至于为什么您会收到该特定错误,请参阅this answer。或this one
  • @MathieuGuindon。我懂了。谢谢您的答复。我用 ActiveCell.Offset(-1, 0).Activate 替换了 range 语句。这是正确的解决方案吗?
  • 它有一个巨大的优势,就是清楚地知道发生了什么。它使用Activate 并不理想,但至少它是明确的。见how to avoid select & activate
【解决方案2】:

范围是对象。您需要使用关键字Set 进行对象分配。

Set CellA = Cells(ActiveCell.Row - 1, 1)
  • CellA 从未使用过
  • 这些额外的括号(Len(Cells(ActiveCell.Row - 1, 1) &gt; 0)) 只是杂乱无章。
  • 避免使用这样的括号:MsgBox (Cells(ActiveCell.Row - 1, 2)) 可能会导致问题。
  • Range(Cells(ActiveCell.Row - 1, 1)) 替换为ActiveCell.Offset(-1,2)ActiveCell(-1,2)

    Private Sub Worksheet_Change(ByVal Target As Range) 将 ColA 调暗为字符串 将 ColB 调暗为字符串 将 CellA 调暗为范围 将 CellB 调暗为范围

    Set CellA = ActiveCell.Offset(-1, 1)
    Set CellB = ActiveCell.Offset(-1, 2)
    
    If Len(CellA.Value) > 0 Then
        ColA = CleanCode(CellA)
        ColB = CleanCode(CellB)
    
        If (ColA <> ColB) Then
            MsgBox CellB
            ColA.Select
        End If
    End If
    

    结束子

【讨论】:

  • 哇。好多了。感谢您的改进。
  • 我确实需要改变一些事情。我将偏移量从 -1,1 更改为 -1,0,从 -1,2 更改为 -1,1。和 ColA.Select 到 CellA.Select。它完全按照我的需要工作。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-04
  • 2015-11-13
  • 2023-03-21
  • 2022-06-24
  • 1970-01-01
相关资源
最近更新 更多