我最近发现了一个宏,它根据单元格中的部分值更改文本和单元格颜色,但是当我按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中。范斯塔肯堡
答案 0 :(得分:0)
您问题中的示例宏是一个事件处理程序:当工作表更改时会触发它,例如当您输入单元格值时。因此,此代码需要放在Worksheet
模块中,并在相应工作表上的某些内容发生更改时执行。阅读Chip Pearson's site
其次,在以下情况下,宏显示在宏列表中:
Public
(在未设置为私有的模块中声明为Public Sub
或Sub
)最后但并非最不重要的是,为了让这个宏显示在宏列表中并针对&#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
声明以上样本中的所有三个都已更正。