Первый раз, извиняюсь за ошибки!
Итак, у меня довольно странная проблема с моим UDF. В моей книге у меня есть невидимый «шаблонный» лист с именем «Стандартный фазовый лист» и подпрограмма, которую пользователь может активировать, которая копирует этот шаблонный лист в новый, видимый лист, с которым он затем может работать. В рабочей книге будет много копий этого листа шаблона, но все они будут иметь уникальные имена.
Мой UDF находится на этом листе шаблона в нескольких местах, и, следовательно, на каждой копии листа шаблона, которую пользователь делает. При работе на одном из этих листов UDF работает просто отлично и возвращает ожидаемые значения.
Однако, когда пользователь ДОБАВЛЯЕТ новую копию шаблона, ИНОГДА UDF теряет популярность и возвращает ошибки # ЗНАЧЕНИЕ в каждом месте, где используется UDF.
Кроме того, когда пользователь УДАЛЯЕТ одну из копий листа шаблона, UDF ВСЕГДА выходит из строя и возвращает ошибки #VALUE в каждом месте, где используется UDF.
Я не использую ActiveSheet или что-то подобное, и я полагаю, что я правильно даю полные ссылки на диапазоны, с которыми я работаю в UDF. Любая помощь будет оценена, я в затруднении! Код для UDF приведен ниже.
Кроме того, поскольку я уверен, что мне зададут вопрос, переменная neColumn в моем коде - это переменная publi c, которую я использую в нескольких подпрограммах и UDF. Это определено в начале моего модуля. Кроме того, я использую Option Explicit в начале моего модуля.
Спасибо!
Public Function fSum(ByVal Target As Range, bExtended As Boolean) As Single
'This function returns a sum, based on a range provided in the cell that holds the function.
'It checks to see if that line item has been marked as Non-Extended, based on the NE column
'that can be check marked. If that line item is marked NE, then only the NE sum columns can
'use that line item as part of their sum, and those values are removed from the E columns.
Dim sSum As Single
Dim i As Integer
Dim n As Integer
'This small section is used to determine complete references to the cell calling the function.
Dim sheetName As String
sheetName = Application.Caller.Parent.Name
'Loop through provided range, and sum up the contents based on whether they have been marked NE or not.
i = 1
n = Target.row
sSum = 0
If Sheets(sheetName).Visible = True Then
While i < Target.Rows.Count
If (bExtended = True) Then
If Sheets(sheetName).Range(neColumn.Address).Cells(n, 1) = vbNullString Then
sSum = sSum + Sheets(sheetName).Range(Target.Address).Cells(i, 1).Value
End If
Else
If Sheets(sheetName).Range(neColumn.Address).Cells(n, 1) <> vbNullString Then
sSum = sSum + Sheets(sheetName).Range(Target.Address).Cells(i, 1).Value
End If
End If
i = i + 1
n = n + 1
Wend
End If
fSum = sSum
End Function