我想知道在用作公式時如何防止我的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
有許多不會從公共論壇下載啓用宏的工作簿。請包括代碼並描述您在原始文章中的使用方式。 –
我沒有下載啓用宏的病毒,也沒有人應該。這不是這個網站的工作原理。 –