Excel VBA中的调用函数
我是VBA新手,所以我可能做了一些完全错误的事情,也可能只是一个可笑的小错误/缺乏知识。所以,如果你有一个更简单的方法来做我想做的事情(解释如下),我愿意接受任何解决方案 所以我想计算具有特定背景颜色的单元格 为此,我在一个模块中提供了:Excel VBA中的调用函数,excel,vba,function,autorun,Excel,Vba,Function,Autorun,我是VBA新手,所以我可能做了一些完全错误的事情,也可能只是一个可笑的小错误/缺乏知识。所以,如果你有一个更简单的方法来做我想做的事情(解释如下),我愿意接受任何解决方案 所以我想计算具有特定背景颜色的单元格 为此,我在一个模块中提供了: Function CountCellsByColor(rData As Range, cellRefColor As Range) As Long Dim indRefColor As Long Dim cellCurrent As Range
Function CountCellsByColor(rData As Range, cellRefColor As Range) As Long
Dim indRefColor As Long
Dim cellCurrent As Range
Dim cntRes As Long
Application.ScreenUpdating = False
Application.Volatile
cntRes = 0
indRefColor = cellRefColor.Cells(1, 1).Interior.Color
For Each cellCurrent In rData
If indRefColor = cellCurrent.Interior.Color Then
cntRes = cntRes + 1
End If
Next cellCurrent
CountCellsByColor = cntRes
Application.ScreenUpdating = True
End Function
它可以工作,它确实使用=CountCellsByColor(B2:B83,H2)
计算特定的单元格(B2:B83
是范围,H2
是我用作该背景色示例的单元格。我也在单独的单元格中计算C2:C83
和D2:D83
)
但我希望它在单元格的背景颜色在给定范围内发生变化时自动执行
为此,我在工作表的代码中写下:
Public Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$2:$D$83" Then
Application.EnableEvents = False
Call CountCellsByColor()
Application.EnableEvents = True
End If
End Sub
但是我得到一条“编译错误:参数不是可选的”错误消息
你认为我应该如何使它自动工作?如何调用此sub中的函数 范围(“I4”)。值=CountCellsByColor(范围(“B2:D83”)、范围(“H2”))
这将调用您的函数,但正如Chris Neilsen所说,我将远离更改事件。因此,有许多小细节需要澄清 首先,
工作表_Change
函数不捕获颜色变化。如果颜色因编写的函数/子函数而改变,则应在发生改变的地方调用函数。如果更改是由用户完成的,我找到的最好的参考是
其次,if语句
if Target.Address=“$B$2:$D$83”只有在“Target”是所有这些单元格时才会返回true。如果目标函数仅包含该范围中的一个或部分单元格,则If语句将返回false。我建议使用一种更类似于以下内容的if声明:
If Not Intersect(Target, Target.Worksheet.Range("B2:D83")) Is Nothing
第三,您需要将参数添加到函数调用中,例如:
CountCellsByColor(Target.Worksheet.Range("B2:D83"),Target.Worksheet.Range("H2"))
Target。工作表
指目标所在的工作表。.Range
指向所选工作表上的单元格,而的“B2:D83”
是所需单元格的地址
但是,请注意,这目前不会将CountCellsByColor
的输出分配给任何对象,因此除非将其分配给变量或工作表单元格,否则结果将丢失。您是否可以给出一个您认为应该如何调用它的示例?我不知道你有什么问题?或者,如果您在尝试时收到错误消息,消息会说什么?@Phanti我相信Call
正在贬值,应该是不必要的。@Mistella我尝试的:````公共子工作表`更改(ByVal Target As Range)if Target.Address=“$B$2:$D$83”然后Application.EnableEvents=False Call CountCellsByColor()Application.EnableEvents=True End If End Sub'``我得到的是一个编译错误:参数不是可选的错误消息。单元格颜色更改时不会触发工作表更改。如果是宏改变了颜色,那么调用函数there@Alex,正如您所发现的,自动响应细胞颜色变化是很困难的,并且无法通过任何方式很好地解决。您最好重新评估您的设计。如果您发布了为什么要这样做,我们可能会建议一个替代方案。