传递多区域范围的UDF作为参数中断删除另一个工作表

时间:2012-09-13 12:11:25

标签: vba excel-vba excel

考虑这样的UDF(缩写):

Public Function ffifneps(wo As Range, pre As Variant, suf As Variant) As String
Dim z As Range, e As String
...
For Each z In wo
    If CStr(z.Value) <> "" Then
        If (Len(e) > 0) Then e = e & ", "
        e = e & maske & z.Value & maske
    End If
Next z
...

使用Sheet1中的这个UDF,其中 wo 是Sheet1上的多区域范围,例如

=ffifneps((B37:B38;B137:B138);C37:C38;". ")

在插入或删除另一个工作表时重新计算UDF,然后将相对范围应用到工作表然后可见,从而产生意外结果。

如果我通过像

那样的单区域范围
=ffifneps(B37:B38;C37:C38;". ")

一切都很好。

同样的事情,BTW,如果看看区域,例如。

...
For Each z In pre.Areas
    e = e & "'" & z.Parent.Name & "'!" & z.Address
    i = i + 1
    If (pre.Areas.Count > 1) And (i < pre.Areas.Count) Then e = e & ", "
Next z
...

我做错了什么? 谢谢你的帮助!

编辑:暂时,我修补了这样:

...
If (TypeName(Application.Caller) = "Range") Then
    If (wo.Areas.Count > 1) Then Set wo = Application.Caller.Parent.Range(wo.Address)
    If (TypeName(pre) = "Range") Then If (pre.Areas.Count > 1) Then Set pre = Application.Caller.Parent.Range(pre.Address)
    If (TypeName(suf) = "Range") Then If (suf.Areas.Count > 1) Then Set suf = Application.Caller.Parent.Range(pre.Address)
End If

丑陋,我知道,如果它们是多区域的,那么UDF就不能再用于真正的跨工作表范围了。 但我一直在想?     ...

0 个答案:

没有答案