귀하가 제공 할 수있는 명확성에 대해 미리 감사드립니다. SHEET2의 VBA 코드의 맨 아래에 많은 모듈과 워크 시트와 Excel 통합 문서에서 '28'스택 공간이 부족합니다. Worksheet_Change 및 Application.ScreenUpdating
이 서브 루틴이 :Private Sub Worksheet_Change(ByVal Target As Range)
Dim TargetCells As Range
Set TargetCells = Range("B1000:B1029")
If Not Application.Intersect(TargetCells, Range(Target.Address)) Is Nothing Then
Call SpecificSubRoutine
End If
End Sub
이 코드의 나의 이해는 어떤을 위해 전체 시트를 시계이다 변경. ANYTHING이 변경되면 시트의 아무 곳에서나 If 문을 실행합니다. 시트에 변경된 내용이 지정된 TargetCells
범위를 벗어나는 경우 If 문이 실패하지만이 Sub는 시트에서 아무 때나 변경되는 If 문을 계속 유효하게하려고합니다.
이제 내 문제가 스택 오버 플로우라고 추측 할 수 있습니다. (런타임 오류 '28': 스택 공간이 부족합니다) 시트에 변경 사항이 TargetCells
범위 안에 사항이있는 경우 Worksheet_Change
하위 실행은,이 세포를 채 웁니다 SpecificSubRoutine
를 호출 할 때마다
의 Worksheet_Change
서브를 트리거 매번 SpecificSubRoutine
은 모든 셀을 채 웁니다. 물론 Worksheet_Change
Sub를 트리거하는 셀을 채우는 다른 모듈을 호출합니다 (SpecificSubRoutine
)
좋지 않습니다.
또한, 응용 프로그램 전체 서브 루틴의 대부분은 즉시 Application.ScreenUpdating = True
실행 후, 나는 생각이 한 번에 호출 시간 Worksheet_Change
의 수를 제한 할 실수하는 Application.ScreenUpdating = False
/Application.ScreenUpdating = True
에 싸여있다. 중요성의
참고 :어느 SpecificSubRoutine
않으며 의해 호출 된 서브 루틴의이 TargetCells
범위 내에서 세포를 채 웁니다. 나는 확실히 그 희미한 아니에요 ... 여기
Worksheet_Change
서브를 트리거 무엇의 범위를 좁힐 수있는 방법이 있나요되도록TargetCells
범위 트리거 만 변경 그것? (시트의 변경된 부분이 아닌)- 내가 실수로
Application.ScreenUpdating
이 할 것이라고 생각한 것을 할 수있는 방법이 있습니까? (거의 모든 단계에서 변경 사항을 트리거하는 것과 달리 시트 전체를 하나의 일괄 업데이트로 변경) - 또한 호기심 때문에
Worksheet_Change
에는 전체 시트 대신 2 개의 특정 범위를 감시하는 방법이 있습니다 ?)이 작업을 수행하는 방법을 아는 것이 무엇보다 중요하며이 시트의 모든 문제를 해결할 가능성이 높습니다.
내 직감 SpecificSubRoutine
의 마지막 부분에 End
을 추가하는 것입니다, 또는 말에/IT에 의해 호출 된 서브 루틴의 모든하지만 난 그냥이 Worksheet_Change
여러 통해 반복을 회피합니다 확실하지 않다 번, Application.ScreenUpdating
이후 내가 생각했던 것처럼 일괄 업데이 트되지 않습니다.
아이디어가 있으십니까?
Worksheet_Change'과'Application.EnableEvents'의 beggining에 = 'FALSE'를 Application.EnableEvents 추가 = True' 결국 –
@simoco, 이것은 훌륭한 포인터입니다. 감사! –