각 행의 시간 및 날짜에 따라 텍스트를 반환하는 UDF가 있습니다.VBA 코드에서 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 셀이 완료되었을 때이를 감지 할 방법이 필요함을 의미합니다. .
코드를 변경하는 방법에 대한 제안 사항이 있으십니까?
UDF가 보이지 않습니까? VBA에서 계산을 수행하고 결과를 붙여 넣는 것은 일을 더 간단하고 빠르게 할 수 있습니다. –
분명히 X2에 뭔가 있습니까? 당신의 코드에 아무것도 거기에 아무것도 넣지 않습니다. – SJR
예 X2에 뭔가가 있습니다. 그것은 UDF 공식'= Plockdag (E2)'입니다. UDF 자체는 현재 행의 날짜와 시간을 작업 스케줄과 비교합니다. 특정 "시간"에 나중에 피벗 테이블에서 필터링 할 수있는 텍스트를 출력합니다. UDF도 업로드 할 수 있지만 일정이 데이터를 비교하는 워크 시트에 있기 때문에 실제로 문제가되지 않습니다. – Andreas