Worksheet_Change(ByVal Target As Range)宏未显示

时间:2017-06-29 08:50:04

标签: excel vba excel-vba

我最近发现了一个宏,它根据单元格中的部分值更改文本和单元格颜色,但是当我按F5时宏不显示在列表中。

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim i As Range
    Dim Cel As Range
    Dim A As Long

    Set i = Intersect(Target, Range("TestRange"))
    If Not i Is Nothing Then
        For Each Cel In i
            A = UCase(Cel.Text)
            If InStr(A, "NEW") Then       'Green text and bold
                With Cel.Font
                    .Color = -11489280
                    .TintAndShade = 0
                    .Bold = True
                End With
            End If


End sub

我怀疑它与sub参与争论有关。有人可以确认是否是这种情况?如果这是真的,它需要作为一个数组传递,但我不知道如何正确地做到这一点。也有人可以帮我这个吗?

很有责任,

B中。范斯塔肯堡

1 个答案:

答案 0 :(得分:0)

您问题中的示例宏是一个事件处理程序:当工作表更改时会触发它,例如当您输入单元格值时。因此,此代码需要放在Worksheet模块中,并在相应工作表上的某些内容发生更改时执行。阅读Chip Pearson's site

上的Excel VBA事件

其次,在以下情况下,宏显示在宏列表中:

  • 他们不接受任何参数
  • 它们是Public(在未设置为私有的模块中声明为Public SubSub
  • 它们被放置在常规模块中

最后但并非最不重要的是,为了让这个宏显示在宏列表中并针对&#34;当前选定的单元格&#34;执行,您可以将代码放在常规模块中,如下所示:< / p>

Public Sub DoStuff()
    Dim i As Range
    Dim Cel As Range
    Dim A As String 'With "Long" it will Error, you're looking for "NEW"

    Set i = Intersect(Selection, Range("TestRange")) 
    If Not i Is Nothing Then
        For Each Cel In i
            A = UCase(Cel.Text)   'Would error if A was a Long
            If InStr(A, "NEW") Then       'Green text and bold
                With Cel.Font
                    .Color = -11489280
                    .TintAndShade = 0
                    .Bold = True
                End With
            End If
       Next cel 'Was missing
    End If 'Was missing
End sub

无论哪种方式,您的样本都不会运行,因为

  • 您的For Each循环不完整
  • 您错过了End If声明
  • 您将字符串传递给Long变量

以上样本中的所有三个都已更正。