【问题标题】:Highlight and unhighlight specific ranges when a box is clicked单击框时突出显示和取消突出显示特定范围
【发布时间】:2010-10-04 23:04:37
【问题描述】:

我是 Visual Basic 的初学者。我想要做的是每当单击一个框时,突出显示一个特定范围。然后,如果在此之后单击另一个框,则先前的范围将取消突出显示,而另一个范围将突出显示。这是我的代码,但它现在不起作用。

Dim FSelect As Boolean
Dim myRange As Range

Sub Rectangle18_Click()

   If FSelect Then
        UnhighlightBox (myRange) <---error - runtime error "424" object required
   End If

   Range("C9:D9").Select
   HighlightBox

   FSelect = True

   Set myRange = Range("C9:D9")
   End Sub

Sub Rectangle19_Click()

   If FSelect Then
        UnhighlightBox (myRange)
   End If

   Range("C11:D11").Select
   HighlightBox

   FSelect = True

   Set myRange = Range("C11:D11")

End Sub    

Sub HighlightBox()
   Selection.Interior.ColorIndex = 36
End Sub

Sub UnhighlightBox(cellRng As Range)
   cellRng.Interior.ColorIndex = 2
End Sub

【问题讨论】:

  • 那条线上有什么错误? (同样在 StackOverflow 中,如果您突出显示所有代码并单击帖子编辑框上方引号图标旁边的“101”图标,那么它将全部显示为格式化代码)

标签: vba automation excel


【解决方案1】:

当我将此代码放入 excel 时,它会抱怨 Select。我认为您不能将 Select 用作​​变量...

编辑:Select 是 VB/A 中的保留关键字,它开始 Select Case 块。

【讨论】:

    【解决方案2】:

    在调用 UnhighlightBox 过程时将括号放在参数周围是不正确的。

    两种可能的正确形式:

    UnhighlightBox myRange

    Call UnhighlightBox(myRange)

    我发现第一种形式(没有Call 关键字)更可取

    有关 Excel 2003 帮助:

    您不需要使用通话 调用过程时的关键字。 但是,如果您使用 Call 关键字 调用一个需要 参数,参数列表必须是 括在括号中。如果你省略 Call 关键字,你也必须省略 参数列表周围的括号。

    请注意,这不适用于返回值的函数。函数需要作为赋值的一部分被调用(例如a = f(x))并且参数必须用括号括起来

    您使用FSelect 布尔值(初始化为false)应该可以防止在设置myRange 之前调用UnhighlightBox 的问题。

    【讨论】:

      【解决方案3】:

      使用 UnhighlightBox 例程时,您要么需要将 Call 语句放在手边,要么删除括号。

      例如:

      Call UnhighlightBox (myRange)
      

      UnhighlightBox myRange
      

      有关为什么要使用 Call 等的更多信息,请参阅以下任一内容:

      what-does-the-call-keyword-do-in-vb6

      MSDN

      【讨论】:

        猜你喜欢
        • 2015-09-27
        • 2022-06-14
        • 1970-01-01
        • 1970-01-01
        • 2011-04-12
        • 2020-11-12
        • 2013-05-20
        • 1970-01-01
        • 2012-08-02
        相关资源
        最近更新 更多