programing

사용자 정의 함수가 재계산되지 않음

css3 2023. 6. 24. 09:27

사용자 정의 함수가 재계산되지 않음

최근에 크고 안정적인 XLSM 파일을 가져와서 XLAM과 XLSX로 분할했습니다.XLSX의 셀 수천 개가 XLAM의 기능을 호출하고, 각 udf는 "Application" 문으로 시작합니다.휘발성"(과잉 킬, 강제 리콜).

XLSX는 Ctrl-Alt-Shift F9 또는 Cell을 통해 F9로 재호출되지 않습니다.응용 프로그램을 통해 계산합니다.전체 계산.XLSX 세포는 단순히 "죽은" 것이지만...수식을 편집하기 위해 F2를 누른 다음 ENTER를 누르면 하나씩 다시 깨울 수 있습니다.이런 식으로 다시 깨어난 세포들은 깨어 있는 것처럼 보이고, 그 후에 정상적으로 기억됩니다.

이 이상한 행동을 경험한 사람이 있습니까? 엑셀이 처음부터 계산 그래프를 재구성하도록 강제하는 추가 방법이 있습니까?

중요한 경우를 대비하여 한 가지 추가 사항:파일 열기를 통해 XLAM과 XLSX를 열었지만 파일을 사용하여 XLAM을 설치하지 않았습니다...옵션...Addins 경로 - 과거에는 XLAM을 "확인 해제"하고 설치하는 순간 모든 UDF 참조가 전체 경로 이름 링크로 대체되므로 매우 추합니다.또는 XLAM 애드인을 설치하기 위한 해결 방법을 설명할 수 있다면 어디든 링크가 끊어지지 않습니다.

효과:

Sub Force_Recalc()
    Cells.Replace What:="=", Replacement:="=", LookAt:=xlPart, SearchOrder _
        :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
End Sub

이해했습니다. Microsoft에 이러한 "기능"이 있는 이유를 잘 모르겠습니다.

이 상태는 XLAM을 열기 전에 XLAM 기능을 사용하는 Virgin XLSX를 열거나 생성할 때 발생합니다.이 경우, 당신이 각 셀에 들어가서 공식 바를 터치하고 ENTER를 누르지 않는 한, 아무리 많은 양의 캐졸링을 해도 XLSX 공식은 이러한 XLAM 함수에 바인딩 및 실행되지 않습니다(또는 내가 발견한 바와 같이, 글로벌 교체를 통해 일괄적으로 그렇게 함). 내 경우 모든 함수가 "k"를 시작했기 때문에 오류를 "k"로 글로벌 교체했습니다.XLAM을 먼저 열면 문제가 발생하지 않습니다.

액세스할 수 있는 UDF의 경우Application인스턴스 사용 가능:

Application.CalculateFull()

MSDN 소스 여기

이 상황에서 검색 및 대체를 통해 강제로 재계산할 수 있습니다.=그것은 모든 공식의 시작에 있습니다.이것을 매크로로 만들어 키 조합에 매핑할 수도 있습니다.

추가하도록 편집됨

Greg Glynn이 의 대답에 가지고 있는 매크로를 보세요.

한 가지 가능한 해결책:계산 모드를 수동으로 설정한 다음 다시 자동으로 설정

    Application.Calculation = xlCalculationManual
    Application.Calculation = xlCalculationAutomatic

CTRL+ALT+Shift+F9를 누릅니다.

이것은 원하는 것보다 더 많이 기억될 수 있지만, 그것은 나의 UDF를 업데이트했습니다.

(소스)

여기 제가 발견한 것이 있습니다.테스트를 해보지는 않았지만 해결책이 있을 수 있다고 생각합니다.

이는 직접적인 인용구입니다. "Excel은 재계산을 통해 함수를 평가해야 하는 시기를 결정하기 위해 함수의 입력 인수 분석에 따라 달라집니다."

http://www.decisionmodels.com/calcsecretsj.htm 에서

이것이 제가 오늘 나중에 시도할 것입니다.내 기능 내에서 동적으로 테이블의 특정 주소를 생성합니다.여기 온 이유에 따라 계산된 주소의 값이 변경되면 업데이트를 받을 수 없습니다.

매개 변수를 사용하지 않더라도 전체 테이블을 매개 변수로 포함함으로써 테이블의 내용이 변경되면 함수가 업데이트되어야 합니다.

이렇게 하면 실제로 전체 테이블을 처리하는지 여부에 관계없이 함수가 종속성 트리에 도달합니다.

내 스크린샷:

enter image description here

저도 같은 문제가 있었습니다.찾기 및 바꾸기는 작동하지만 그다지 좋지는 않습니다.내 솔루션은 다음과(와)

데이터 탭 > 링크 편집 > 소스 열기를 클릭하면 해결됩니다.

엑셀은 수식에 언급된 범위에 변화가 있는지 모니터링할 것입니다, 저는 오늘 이것에 직면했고 저는 그것을 생각하고 깨달았습니다.따라서 이를 수정하려면 함수에서 모니터링할 범위를 사용하는 더미 인수를 만들거나 더미 함수를 만듭니다.제 경우에는 아무것도 반환하지 않는 monitorRange라고 불렀습니다.

Function monitorRange(rng As Range)
End Function

그리고 저는 그것을 제 공식 예시에 언급했습니다.

=myfunction(a,b) & monitorRange(RANGE_TO_MONITOR)

이 기능은 매우 잘 작동했으며 다른 기능과 함께 작동해야 합니다.

원래 질문 이후에 얼음이 노화되지만 피벗 테이블 필터의 값을 결정하기 위해 UDF를 만든 바로 오늘 유사한 문제에 부딪혔습니다.UDF는 매크로 편집기에서 실행할 때뿐만 아니라 UDF가 사용된 필드를 직접 업데이트할 때도 잘 작동하지만 ""을 던집니다.#VALUE!시트 또는 피벗 테이블을 업데이트할 때.

원래의 UDF에서 Ali의 단순한 monitorRange 기능에 콘텐츠를 점진적으로 추가하기 전까지는 너무 힘들었어요.는 제 되었을 때 "그런다음 UDF에피벗테새이로것알되었니다습게을면제를 고침 있다는 했습니다.#VALUE!류오 특정 입니다. 의 콜 내용을할 수 입니다.아래는 제 UDF의 특정 위반 행입니다. 하지만 일반적인 규칙은 UDF의 콜 체인에 다른 워크북 내용을 업데이트하는 코드를 포함할 수 없다는 것입니다. 값이 합니다.즉, UDF는 SET의 GET입니다.

저는 이 오류를 유발하는 다음의 두 가지 시나리오를 사용하여 이를 확인했습니다.

  1. 피벗을 새로 고칩니다(예: pt.PivotCache.Refresh
  2. 다른 셀의 값을 변경합니다. 예: Range("AA1").Value = "Test"

이상하게도, 저는 테스트를 했고 UDF가 문제 없이 대화를 표시하기 위해 MsgBox 호출을 포함할 수 있다는 것이 (사실은) 절대적으로 괜찮다는 것을 발견했습니다.이를 통해 UDF는 범위를 모니터링한 다음 UDF에 포함하려는 모든 조건에 대한 팝업 메시지 상자 대화 상자를 모니터링할 수 있습니다.다른 상황에 대비해서 참고하도록 하겠습니다.

이것이 이 고약한 쓰레기 문제에 반대하는 다른 사람들에게 도움이 되기를 바랍니다.

위의 해결책을 시도해 보았습니다.문제는 수천 개의 공식이 있을 때 파일의 모든 공식을 계산하는 데 너무 오래 걸린다는 것입니다.

저는 다음과 같은 해결책을 시도했고, 그것은 효과가 있습니다.

VBA Editor에서 개체를 Workbook으로 설정하고 프로시저를 SheetChange로 설정한 후 다음을 붙여넣습니다.

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Target.Calculate
End Sub

저도 같은 문제를 겪고 있었어요저는 (다른 게시물에서) 애플리케이션을 추가하는 것을 발견했습니다.함수 코드에 휘발성이 있어 스프레드시트로 계산(f9)

언급URL : https://stackoverflow.com/questions/5719650/user-defined-functions-not-recalculating