UDF 未在 VBA 代码中计算
UDF not calculated in VBA code
我有一个 UDF returns 文本取决于每行的时间和日期。
这个 UDF 公式放在 X2 中,当我 运行 替换 sheet 中所有数据的数据更新代码时,我在 X2:Y & LastRow 上使用 filldown。
我的计划是在 UDF 完成后过滤数据并删除不需要的数据。
因为 Excel 在过滤时重新计算数据,我想我可以复制 -> 粘贴值以确保 UDF 不会再次 运行。
完整代码如下,但 "interesting" 部分位于 ''''''
.
之间
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 运行s 和芬兰语正确无值错误)
但这意味着在我关闭计算并进行复制粘贴之前,我需要一些方法来检测所有 UDF 单元何时完成。
关于如何更改代码有什么建议吗?
我建议您在适当的时候在您的 VBA 代码中进行相关计算,然后将这些结果直接输入到您的工作表中。无需担心 UDF 的完成。编码应该更简单和更快。
我有一个 UDF returns 文本取决于每行的时间和日期。
这个 UDF 公式放在 X2 中,当我 运行 替换 sheet 中所有数据的数据更新代码时,我在 X2:Y & LastRow 上使用 filldown。
我的计划是在 UDF 完成后过滤数据并删除不需要的数据。
因为 Excel 在过滤时重新计算数据,我想我可以复制 -> 粘贴值以确保 UDF 不会再次 运行。
完整代码如下,但 "interesting" 部分位于 ''''''
.
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 运行s 和芬兰语正确无值错误)
但这意味着在我关闭计算并进行复制粘贴之前,我需要一些方法来检测所有 UDF 单元何时完成。
关于如何更改代码有什么建议吗?
我建议您在适当的时候在您的 VBA 代码中进行相关计算,然后将这些结果直接输入到您的工作表中。无需担心 UDF 的完成。编码应该更简单和更快。