UDF未在VBA代码

时间:2016-12-12 11:37:50

标签: excel vba excel-vba udf

我有一个UDF,它根据每行的时间和日期返回一个文本。

这个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单元格何时完成,然后再关闭计算并执行复制粘贴。
有关如何更改代码的任何建议吗?

1 个答案:

答案 0 :(得分:1)

我建议您在适当的时间在VBA代码中进行相关计算,然后将这些结果直接输入到工作表中。无需担心UDF的完成。编码应该更简单,更快。