배열을 반환하지 않고 다른 셀을 수정하는 UDF 만들기
현재 반환하는 New_Years라는 함수가 포함된 Excel 추가 기능이 있습니다. 지정된 두 연도 사이의 설날 배열입니다. 하지만 이렇게 하려면 여러 셀을 선택하고 Ctrl Shift Enter를 사용하여 배열을 만들어야 합니다.
배열 생성을 피할 수 있습니까?
예, 가능합니다. 배열을 반환하지 않고 UDF에서 직접 다른 셀을 수정합니다. Excel에서는 UDF가 셀 속성을 변경하는 것을 금지하지만 Windows 타이머와 Application.OnTime 타이머의 조합을 사용하는 복잡한 솔루션이 있습니다.
솔루션 개요
코드 구현
다음 코드는 일반 모듈:
Private Declare Function SetTimer Lib "user32" ( _ ByVal HWnd As Long, _ ByVal nIDEvent As Long, _ ByVal uElapse As Long, _ ByVal lpTimerFunc As Long _ ) As Long Private Declare Function KillTimer Lib "user32" ( _ ByVal HWnd As Long, _ ByVal nIDEvent As Long _ ) As Long Private mCalculatedCells As Collection Private mWindowsTimerID As Long Private mApplicationTimerTime As Date Public Function AddTwoNumbers( _ ByVal Value1 As Double, _ ByVal Value2 As Double _ ) As Double AddTwoNumbers = Value1 + Value2 ' Cache the caller's reference for later use in a non-UDF routine If mCalculatedCells Is Nothing Then Set mCalculatedCells = New Collection On Error Resume Next mCalculatedCells.Add Application.Caller, Application.Caller.Address On Error GoTo 0 ' Set the Windows timer If mWindowsTimerID <> 0 Then KillTimer 0&, mWindowsTimerID mWindowsTimerID = SetTimer(0&, 0&, 1, AddressOf AfterUDFRoutine1) End Function
타이머 루틴
두 개의 타이머 루틴, AfterUDFRoutine1과 AfterUDFRoutine2가 정의됩니다. UDF 외부의 코드 예약 및 실행을 처리합니다.
사용 예
Excel 워크시트의 셀에 AddTwoNumbers 함수를 입력합니다. =AddTwoNumbers(A1, B1)
타이머가 시작됩니다. process.
중요 사항
위 내용은 Excel에서 배열을 반환하지 않고 UDF에서 셀을 수정할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!