考虑这样的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;". ")
一切都很好。
顺便说一句,如果查看区域,也会发生同样的情况,例如
...
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 不能再用于真正的跨工作表范围,如果它们是多区域的。但我一直在想?...