打开网络文件/使用用户定义的功能启用内容时,Excel间歇性崩溃

时间:2018-11-06 17:44:43

标签: excel vba excel-vba

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

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

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

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

我们不确定这是否是Excel /加载项,我们的网络/防火墙参数或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")

1 个答案:

答案 0 :(得分:1)

充实我上面的评论:

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

在我的单区域测试中,速度大约是以前的两倍。