문제를 복제 할 수 없으며 SolidWorks가 무엇인지 알지 못하므로 문제가있을 수 있습니다. 아마도 Initialize가 두 번 호출되는 것을 보여주는 작성된 예제를 게시 할 수 있습니다.
내 생각에 변수를 자동으로 인스턴스화하는 것과 관련이 있습니다. UserForm1을 사용하면 UserForm1이라는 개체를 가리키는 UserForm1이라는 개체 변수를 인스턴스화합니다. Dim 문에서 New 키워드를 사용하는 것과 비슷합니다. UserForm1 (변수)은 정의하지 않았지만 VBA가 처음 사용하면 자동으로 인스턴스화됩니다.
userforms 클래스 모듈에서 작업 할 때 Me 키워드를 사용해야합니다 (userforms는 사용자 인터페이스 요소가있는 것을 제외하고 다른 개체와 마찬가지로 클래스입니다). 초기화 이벤트에서
Me.Caption = "blah"
대신
UserForm1.Caption = "blah"
이 설정됩니다 플래그가 난 "말할 것을 (내가 증명할 수 없음을 단지 이론)이 될 수 있다고 말한다 실제 인스턴스를 가리키는 "캡션 속성을 변경할 때까지 설정되어 있지 않으며 자동 인스턴스화 변수 인 UserForm1을 사용하면 다른 인스턴스가 강제로 생성됩니다.
자동 인스턴스화 변수를 사용하지 마십시오. Dim 문에도 New 키워드를 사용하지 않아도 편리합니다. 변수가 생성되고 소멸되는 시점을 제어 할 수 있으며 최선의 방법입니다. ShowModal 속성을 False로 설정되어있는 경우 코드가 계속 실행됩니다, 그래서 모덜리스를 실행하면 변수를 파괴하지 않는 것이 표준 모듈에서이 같은 뭔가
Sub uftst()
Dim uf As UserForm1
Set uf = New UserForm1 'you control instantiation here
'Now you can change properties before you show it
uf.Caption = "blech"
uf.Show
Set uf = Nothing 'overkill, but you control destruction here
End Sub
참고.
initialize 이벤트가 두 번 일어나서는 안됩니다. .caption 업데이트가 반복을 일으키고 있는지 확인하기 위해 코드를 밟았습니까? 캡션 변경을 항상 Activate 이벤트로 이동할 수 있습니다. 기술적으로는 잘못된 캡션으로 표시된다는 의미지만, 변경되기 전의 시간은 거의 구별 할 수 없습니다. –
@DanielCook하지만 코드를 다시 * 다시 * 실행하지 않겠습니까? (즉, 양식을 활성화/클릭 할 때마다) – Gaffi
예, 확실합니다. 그러나 캡션을 초기화 이벤트 중에 결정된 사용자 양식의 전용 문자열에 저장하면 오버 헤드가 거의 발생하지 않습니다. 그러나 실제로 나는 당신의 문제를 실제로 풀지 않고 일할 수있는 것을 언급하고있었습니다. 그래서 대답으로 표시하지 않았습니다. :-) –