我想知道在用作公式时如何防止我的UDF执行3次。excel vba UDF在公式中使用时执行3次
的Excel 2013(编译:15.0.4859.1002)
我建立了一个用户定义函数必须验证一组针对一个Excel的ListObject两个值命名为“table_Sequence”的。 如果这些值存在,该函数将返回相应的字母。所以基本上,我试图创建一个工具来帮助我们建立基于特定规则的SAP FLOC结构。其中一个级别是3位数字代码,其中包含来自选项卡“5-函数列表”的参考编号以及在选项卡设备列“M”中输入的每个Customtext的唯一字母。
所以我的想法是首先检查键是否已经存在,如果没有,请在table_Sequence中创建它。
该代码工作正常。
但是...... 它运行每次三次我使用UDF更新单元! 所以我担心如果用户想要在整个列中复制这个公式,那么只要依赖关系被更新,它就会产生一个可怕的滞后。
有人可以帮助我了解发生了什么,以及如何防止这种情况发生?
任何帮助将不胜感激,
table_Sequence看起来是这样的:
Struct |CustomText |Letter
---------------- |------ |---
2151-05-01-22-23 |#1 L1 |B
2151-05-01-22-86 |#2 L1 |A
所以在一个小区我所说的UDF这样的:
=GetNextSequence("2151-05-01-22-23";"#1 L1")
,并返回 “B”这很好。 只有它执行3次它得到的结果返回
这里的UDF代码之前:
'**************************************************************************************************
'** Name: GetNextSequence
'** Purpose: Assign next sequence for current structure element
'**
'** Input: Current Cell
'** Level Number at which we may stop the structure
'**
'** Output: Sequence string
'**
'**************************************************************************************************
Public Function GetNextSequence(Struct As String, CustomText As String) As String
Dim i As Long
Dim Result As Variant
Dim suffix As String
Dim NewRow As Range
Dim tbl As ListObject
Application.EnableEvents = False
Application.ScreenUpdating = False
'** Filter and sort sequence table
Set tbl = ActiveWorkbook.Worksheets("Sequence").ListObjects("table_Sequence")
tbl.Sort.SortFields.Clear
tbl.Sort.SortFields.Add Key:=Range("table_Sequence_1[Letter]"), SortOn:= _
xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
With tbl.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
tbl.Range.AutoFilter Field:=1, Criteria1:=Struct
tbl.Range.AutoFilter Field:=3, Criteria1:=CustomText
'** Store Last letter used
suffix = tbl.ListRows(1).Range.Cells(1, 3).Value
If tbl.ListRows.Count = 0 Then
'** Increment sequence
suffix = Chr(Asc(suffix) + 1)
'** Add row and return new letter
Set NewRow = tbl.ListRows.Add.Range
iColumn = tbl.ListColumns("Letter").Index
NewRow.Cells(1, 3).Value = suffix
NewRow.Cells(1, 1).Value = Struct
NewRow.Cells(1, 2).Value = CustomText
End If
GetNextSequence = suffix
Application.EnableEvents = True
Application.ScreenUpdating = True
End Function
[请编辑您的问题以包含相关代码](http://stackoverflow.com/posts/41128718/edit)。没有多少人会(应该)下载并打开一个随机启用宏的Excel文件,并假设他们会这样做,这个问题不会帮助任何其他人遇到类似问题,如果链接失效。 – Comintern
有许多不会从公共论坛下载启用宏的工作簿。请包括代码并描述您在原始文章中的使用方式。 –
我没有下载启用宏的病毒,也没有人应该。这不是这个网站的工作原理。 –