В нашей сети хранится файл, в котором хранятся запросы на номер детали. Этот файл распределяется между двумя отделами, которые, согласно ИТ, все обновляются в 64-разрядных версиях Excel.
Файл содержит несколько простых пользовательских функций, таких как ConcatUniq.
Файл будет открываться и функционировать должным образом в течение нескольких недель, а затем случайно произойдет сбой при открытии или сбой при включении контента. Затем мы перестраиваем файл с нуля, он будет работать в течение нескольких недель, а затем снова выйдет из строя. Это широко используемые функции, и мы не верим, что сами функции вызывают проблемы.
Кроме того, у коллеги были проблемы с функцией ConcatUniq, которая возвращала правильные значения в некоторых строках, но возвращала ошибки #value в других строках. Для этого я создал отдельный лист с UDF ConcatUniq и цикл, который устанавливает формулы ячеек в качестве функции 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")