首先发布yall。
长话短说,在Excel中,当我从一个单元调用以下函数(它在自己的模块中)时,它返回错误的值。从sub调用它时,以及当我单步调试代码(到最后)时,函数返回正确的值,但是当我从Excel调用它时,它返回一个不同的值。背景底部。
我尝试过的事情
正是这个特定功能正在给我这个问题,更简单的功能就是他们所说的。我必须假设它与Excel正在执行的事件的顺序有关,或者函数可以更改的Excel部分的限制。
Function ActiveDisciplineFilters()
Application.Volatile 'makes the function update automatically
Dim disccolumn As Range
Dim uniquedisc() As String
Dim uniquediscstring As String
'create a string of unique values from the Discipline column
i = 0
If Range("LayerList[Discipline]").SpecialCells(xlCellTypeVisible).Address = Range("LayerList[Discipline]").Address Then
ActiveDisciplineFilters = "None"
Exit Function
End If
For Each cell In Range("LayerList[Discipline]").SpecialCells(xlCellTypeVisible)
If InStr(1, uniquediscstring, cell.Value) = 0 Then
If i <> 0 Then
uniquediscstring = uniquediscstring & ", " & cell.Value
Else
uniquediscstring = cell.Value
i = 1
End If
End If
Next
ActiveDisciplineFilters = uniquediscstring
End Function
背景
在Excel中,我有一张桌子。我将所有数据都放在该表的一个特定列中,并在该范围内创建一个唯一值的字符串(以逗号分隔)。该字符串必须放在另一个单元格中,原因我不需要进入。如果将过滤器应用于列,则唯一值会自动更新。
当我从一个sub调用它时,Excel会给我正确的答案,当我从一个单元格中调用它时,会给出错误的答案吗?
答案 0 :(得分:1)
不幸的是,没有一个SpecialCells方法适用于UDF。如果您需要从工作表中将其作为公式运行,那么您的代码应该是这样的:
Function ActiveDisciplineFilters()
Application.Volatile 'makes the function update automatically
Dim disccolumn As Range
Dim uniquedisc() As String
Dim uniquediscstring As String
Dim i As Long
Dim cell As Range
Dim bHidden As Boolean
'create a string of unique values from the Discipline column
i = 0
For Each cell In Range("LayerList[Discipline]").Cells
If cell.EntireRow.Hidden = False Then
If InStr(1, uniquediscstring, cell.Value) = 0 Then
If i <> 0 Then
uniquediscstring = uniquediscstring & ", " & cell.Value
Else
uniquediscstring = cell.Value
i = 1
End If
End If
Else
bHidden = True
End If
Next
If Not bHidden Then uniquediscstring = "None"
ActiveDisciplineFilters = uniquediscstring
End Function