我有一个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单元格何时完成,然后再关闭计算并执行复制粘贴。
有关如何更改代码的任何建议吗?
答案 0 :(得分:1)
我建议您在适当的时间在VBA代码中进行相关计算,然后将这些结果直接输入到工作表中。无需担心UDF的完成。编码应该更简单,更快。