我一直在寻找堆栈溢出来寻找答案,这比我现在承认的要长。
这就是我所拥有的:在工作表中我有一堆不连续的单元格,我需要检查特定文本的存在。我已经创建了一个简单的函数来执行此操作,并且可以在我手动定义该范围时(在代码中)轻松完成此操作。
然而,当我在程序上创建一个命名范围(在做其他事情时)然后尝试传入命名范围时,该函数永远不会执行。
我知道正确创建了命名范围,因为我对其进行了自动格式化,并且我可以使用excel公式来引用范围,该公式接受不连续范围(SUM和whatnot)。
以下是我的代码的相关部分:
Function customProcess1(NamedRange As Range) As Long
For Each c in NamedRange.Cells
...
Next c
End Function
在Excel中键入公式为“= customProcess1(A1:A2)”时,我会在函数运行后返回我的数字。当我输入“= customProcess1(NamedRange)”时,我的函数甚至都没有执行。
同样,我正在使用文档中已定义的命名范围。我可以在名称管理器中观察名称,它引用了相应的单元格,我可以使用接受非连续范围的公式中的范围等。我无法弄清楚如何将我的工作命名区域放入我的函数中。
当我将公式设为“= customProcess1(”NamedRange“)时”函数执行,但由于命名范围不是“”NamedRange“”但是“NamedRange”,它无法将对象设置为Range(对象)找不到)。我已经尝试将命名范围作为字符串,但同样,如果我不在名称周围加引号,它甚至不会运行该函数。那么我已经尝试传入带引号的字符串并在函数内部取消引号,但这也不是很好。
简而言之,我只想在自定义函数中获取非连续命名范围。一旦我这样做,一切都是金色的。
有人有什么想法吗?我不确定为什么这是一件很麻烦的事。
答案 0 :(得分:1)
我不确定你为什么尝试不起作用而且没有时间研究它的那一部分,但你可以做到以下几点:
Function customProcess1(NamedRange As String) As Long
Dim TheRange As Range
Set TheRange = Range(NamedRange)
For Each c in TheRange.Cells
...
Next c
End Function
希望这有帮助。
答案 1 :(得分:1)
调整 UDF(),我编码:
Function customProcess1(NamedRange As Range) As Long
For Each c In NamedRange.Cells
customProcess1 = customProcess1 + c.Value
Next c
End Function
然后我将名称 Mike 分配给单元格 B6,C8,D10 ,并在这些单元格中放置值。然后我放置了公式:
=customProcess1(Mike)
在一个单元格中得到以下内容:
注意:强>
我没有使用 = customProcess(“Mike”)