2016-12-12 52 views
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單元。
關於如何更改代碼的任何建議?

+0

我沒有看到你的UDF?這可能是在VBA中進行計算,並只是粘貼結果,可能會使事情變得更簡單(也更快)。 –

+0

X2肯定有東西嗎?你的代碼中沒有任何東西放在那裏。 – SJR

+0

是的,X2中有東西。這是一個UDF公式'= Plockdag(E2)'UDF本身正在比較當前行的日期和時間與工作計劃。在某些「時間」它會輸出文本,我稍後可以在數據透視表中過濾。我也可以上傳UDF,但由於時間表在工作表上,它比較數據,所以它並不重要。 – Andreas

回答

1

我建議你在適當的時候在你的VBA代碼中做相關的計算,然後直接在你的工作表中輸入這些結果。無需擔心UDF的完成。編碼應該既簡單又快捷。