首页 > 解决方案 > 最初如何让 Range 成为 Nothing?

问题描述

编辑:如果我将它放在 ThisWorkbook 的顶部,则此方法有效,但如果它位于另一个Workbook_SheetChange事件下方,则无效

当我选择了一个单元格时,我试图让评论出现,这样我就不必抓住鼠标并将鼠标悬停在单元格上。我有多个工作表,所以这段代码是工作簿:

Public FRg As Range
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
   'Update 20140909
    If Not FRg Is Nothing Then
        FRg.Comment.Visible = False
    End If
    If Not Target.Comment Is Nothing Then
        Target.Comment.Visible = True
    End If

End Sub

我第if一句话就出错了Object Required

我认为 FRg 基本上是为了跟踪最后一条评论,所以在我离开一个单元格后,我不会得到评论 STAYING ON,但也许它最初需要一些东西?

更新:

我稍微更改了代码:

Public FRg As Range

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
   'Update 20140909
    If Not FRg Is Nothing Then
        If Not FRg.Comment Is Nothing Then
            'MsgBox "Hiding comment in cell w text: " & FRg.Value
            FRg.Comment.Visible = False
            Set FRg = Nothing
            'MsgBox "previous comment turned off"
        End If
    End If
    If Not Target.Comment Is Nothing Then
        Target.Comment.Visible = True
        Set FRg = Target
        Again = True
    End If

End Sub

标签: excelvba

解决方案


您的声明:

Public FRg As Range

必须始终位于页面顶部,高于该工作表/书籍/模块中的所有其他子项。

代码的其余部分可以放在任何地方,但您在工作表/书籍/模块级别的声明必须放在第一位。您收到错误的原因是因为当您将其他代码放在声明上方时,Excel 会忽略您在 subs 之间的错误声明并将未声明的变量“Frg”设置为变体(它不是对象),这就是您得到的原因错误。


推荐阅读