> 백엔드 개발 > C++ > Excel 추가 기능에서 배열이 아닌 변경 UDF를 어떻게 구현할 수 있습니까?

Excel 추가 기능에서 배열이 아닌 변경 UDF를 어떻게 구현할 수 있습니까?

Susan Sarandon
풀어 주다: 2024-11-16 05:52:03
원래의
465명이 탐색했습니다.

How Can Non-Array Changing UDFs be Implemented in Excel Add-Ins?

Excel 추가 기능에서 배열이 아닌 변경 UDF 구현

Excel 추가 기능에서 셀 값을 변경하는 UDF는 일반적으로 금지됩니다. 그러나 Windows 타이머와 Application.OnTime 타이머의 조합을 사용하면 이 제한을 우회할 수 있습니다.

Windows 타이머 제한

Windows 타이머는 셀이 있는 동안 VBA 코드를 실행할 수 없습니다. 편집 중이거나 대화 상자가 열려 있습니다. 이러한 제한으로 인해 UDF 내의 셀 속성을 직접 수정할 수 없습니다.

해결책: Application.OnTime Timer

이 제한을 우회하려면 UDF 내에서 Windows 타이머를 사용하여 Application.OnTime 타이머를 예약합니다. Application.OnTime 타이머는 안전하며 셀이 편집되지 않고 열려 있는 대화 상자가 없을 때만 실행됩니다.

UDF 구현

  1. 만들기 일반 모듈: UDF 모듈이 아닌 일반 VBA 모듈에 다음 코드를 배치합니다.
  2. UDF 구현(AddTwoNumbers): AddTwoNumbers UDF 내에서 다음을 계산합니다. 평소대로 합산해. 계산 후:

    • 컬렉션에서 호출자의 셀 참조를 캐시합니다.
    • Windows 타이머를 설정하여 AfterUDFRoutine1 타이머 루틴을 시작합니다.
  3. 첫 번째 타이머 루틴(AfterUDFRoutine1):

    • Windows 타이머를 중지합니다.
    • AfterUDFRoutine2에 대해 안전한 Application.OnTime 타이머를 예약합니다.
  4. 두 번째 타이머 루틴(AfterUDFRoutine2):

    • 셀 값 수정, 비활성화 등 UDF에서 허용되지 않는 작업을 수행합니다. 화면 업데이트 또는 계산 모드 변경

사용 예

Private Sub TestAddTwoNumbers()
    Dim Cell As Range

    Set Cell = Range("A1")

    ' Cache the reference in the UDF
    Cell.Formula = "=AddTwoNumbers(1, 2)"

    ' Trigger the timer routine
    Cell.Calculate
End Sub
로그인 후 복사

계산 시 셀 수식은 다음과 같이 변경됩니다. 호출자 옆의 셀을 현재 값으로 설정하여 새 값을 반영합니다.

위 내용은 Excel 추가 기능에서 배열이 아닌 변경 UDF를 어떻게 구현할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿