打开网络文件/使用用户定义函数启用内容时,Excel会间歇性崩溃



我在网络上存储了一个文件,其中包含零件号请求。该文件由两个部门共享,根据IT部门的说法,这两个部门都是64位版本的Excel的最新版本。

该文件包含几个简单的用户定义函数,例如ConcatUniq。该文件将一次打开并正常运行数周,然后随机地在打开时崩溃,或在启用内容时崩溃然后我们从头开始重建文件,它将工作数周,然后将再次崩溃这些都是广泛使用的函数,我们不认为是函数本身造成了问题。

此外,一位同事还遇到了ConcatUniq函数在某些行返回正确值,但在其他行返回#value错误的问题。为此,我创建了一个带有ConcatUniq UDF的单独工作表,以及一个循环,该循环将单元格公式设置为ConcatUnaq函数,并允许在打印范围中的每个值时逐步执行UDF。

在保存并将其发送给同事进行测试后,它在打开Excel时崩溃。我的仍然开得很好,但在启用内容时崩溃了。这似乎是这里更大的问题,但尽管如此,有时文件崩溃,有时不崩溃,有时UDF工作,有时不工作。

我们不确定这是Excel/Add-ons、我们的网络/防火墙参数还是VBA本身的问题。我不认为这是任何类型的编译器错误,因为函数确实在本地工作。这个问题似乎是在用户将这些文件保存到网络上之后发生的。

我希望得到一些关于在哪里查找导致这些症状的问题的指导(Excel、网络/防火墙、VBA(。非常感谢您的帮助!

按要求:

Function ConcatUniq(ByRef rng As Range, _
ByVal myJoin As String) As String
Dim r As Range
Static dic As Object
If dic Is Nothing Then _
Set dic = CreateObject("Scripting.Dictionary")
For Each r In rng
dic(r.Value) = Empty
Next
ConcatUniq = Join$(dic.keys, myJoin)
dic.RemoveAll
End Function
'syntax = concatuniq(RANGE,"delimeter")

充实我上面的评论:

Function ConcatUniq(ByRef rng As Range, ByVal myJoin As String) As String
Dim cl As Range, data, r As Long, c As Long, v
Static dic As Object
If dic Is Nothing Then Set dic = CreateObject("Scripting.Dictionary")
If rng.Areas.Count > 1 Then
For Each cl In rng.Cells
v = cl.Value
If Not IsError(v) Then dic(v) = Empty
Next
Else
data = rng.Value
For r = 1 To UBound(data, 1)
For c = 1 To UBound(data, 2)
v = data(r, c)
If Not IsError(v) Then dic(v) = Empty
Next c
Next r
End If
ConcatUniq = Join$(dic.keys, myJoin)
dic.RemoveAll
End Function

在我对单个区域范围的测试中,这大约是速度的两倍。

最新更新