0
我有一個UDF,它根據每行的時間和日期返回一個文本。UDF不是以VBA代碼計算的
這個UDF公式被放置在X2中,當我運行數據更新代碼來替換工作表中的所有數據時,我使用X2上的加載:Y & LastRow。
我的計劃是在UDF完成後過濾數據並刪除不需要的數據。
由於Excel在您過濾時重新計算數據,因此我認爲我可以複製 - >粘貼值以確保UDF不會再次運行。
完整的代碼如下,但「有趣」的部分是在''''''
之間。
Sub importera()
Dim mainWB As Workbook
Dim srcWB As Workbook
Set mainWB = ThisWorkbook
'Application.ScreenUpdating = False
Sheets("XCFIL").Activate
LastRow = Cells(Rows.Count, "A").End(xlUp).Row
Range("A3:Y" & LastRow).ClearContents
Range("A2:W2").ClearContents
Workbooks.Open Filename:="C:\Textfiler\XCFIL.TXT"
Range("A:A").TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo _
:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), _
Array(7, 1), Array(8, 1)), TrailingMinusNumbers:=True
Set srcWB = ActiveWorkbook
ActiveWorkbook.Sheets(1).Range("A2:W" & ActiveSheet.UsedRange.Rows.Count).Copy
ThisWorkbook.Activate
ActiveSheet.Paste Destination:=Worksheets("XCFIL").Range("A2")
Application.DisplayAlerts = False
srcWB.Close
Application.DisplayAlerts = True
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
LastRow = Cells(Rows.Count, "A").End(xlUp).Row
Range("X2:Y" & LastRow).FillDown
' To make sure the UDF does not run again turn off calculations
Application.Calculation = xlManual
Range("X3:Y" & LastRow).Copy
Range("X3").PasteSpecial xlPasteValues
Application.Calculation = xlAutomatic
' Turn on calculations again when formulas is replaced with values
ActiveSheet.Range("A1:Y" & LastRow).AutoFilter Field:=24, Criteria1:="0"
With ActiveSheet.AutoFilter.Range
.Offset(1).Resize(.Rows.Count - 1).EntireRow.Delete
End With
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
ThisWorkbook.Activate
Worksheets("Resultat").PivotTables("Pivottabell3").PivotCache.Refresh
Worksheets("Resultat").PivotTables("Pivottabell2").PivotCache.Refresh
Worksheets("Resultat").PivotTables("Pivottabell1").PivotCache.Refresh
End Sub
問題是FillDown不能在所有單元上運行UDF。
代碼完成FillDown後,計算在狀態欄(?)中開始計數,當它達到100%時,尚未完成。它的計算結果少於50%,其餘值爲#VALUE!
錯誤。 (如果我停止數據更新代碼,UDF運行並且芬蘭語正確且沒有值錯誤)
但這意味着我需要一些方法來檢測何時關閉計算並完成複製粘貼之前完成所有UDF單元。
關於如何更改代碼的任何建議?
我沒有看到你的UDF?這可能是在VBA中進行計算,並只是粘貼結果,可能會使事情變得更簡單(也更快)。 –
X2肯定有東西嗎?你的代碼中沒有任何東西放在那裏。 – SJR
是的,X2中有東西。這是一個UDF公式'= Plockdag(E2)'UDF本身正在比較當前行的日期和時間與工作計劃。在某些「時間」它會輸出文本,我稍後可以在數據透視表中過濾。我也可以上傳UDF,但由於時間表在工作表上,它比較數據,所以它並不重要。 – Andreas