Excel 의 VBA 보고서를 설명하십시오.

Dim d 는 새 사전으로서 다음 두 문장과 같습니다.

Dim d 를 사전으로 사용

Set d = 새 사전

즉, Dictionary 유형의 객체 변수를 선언하고 변수 d 에서 조작할 수 있는 Dictionary 객체의 인스턴스를 만듭니다.

Set d = createobject ("스크립트. Dictionary "), 만약 이 말이 Dim d 뒤에 새 사전으로 나타난다면, 실제로는 이미 두 가지 일을 한 것이다. (데이비드 아셀, Northern Exposure (미국 TV 드라마), 남녀명언)

첫째, "Dim d as New Dictionary" 문장에서 만든 Dictionary 객체는 더 이상 변수 D 에 지정되지 않습니다. 이 객체의 현재 상태에 대해서는 VBA 에 전적으로 맡겨 배치하겠습니다.

둘째, CreateObject 함수를 통해 스크립트 유형 라이브러리 아래에 사전 클래스를 만든 다음 D 로 이 클래스를 제어하게 합니다.

이 코드에 문제가 있다는 점을 지적해야 한다. CreateObject 함수를 실행하면 첫 번째 문장에서 만든 Dictionary 클래스가 완전히 작동하지 않아 불량배의 유령이 되기 때문이다. 더 이상 이 클래스를 변수에 바인딩할 수 없으며 이 클래스를 완전히 제거할 수도 없습니다. 너는 VBA 자신에게 의지해서 이 난장판을 받아들일 수밖에 없다. 즉, 이 두 문장으로 인해 중복 객체 인스턴스가 생성됩니다.

그러나, 더 복잡한 것은, 당신은 지금 두 가지 버전의 Office 와 두 가지 버전의 VBA 를 가지고 있다는 것이다. 그들이 이런 비표준 코드를 어떻게 처리했는지 모르겠다. 분명히, 그들의 처리 방식은 다르다.

VBA (예: VB6) 에서는 디버깅과 제어가 어렵기 때문에 일반적으로 Dim var 메서드를 새 클래스로 사용하지 않는 것이 좋습니다. 일반적인 방법은 다음과 같습니다.

Dim var as Class

Set var = 새 범주

마지막 문장에서 Set d = Nothing 은 이 클래스의 인스턴스가 메모리에서 해제되었음을 의미합니다. 이렇게 하면 D 로 만들어 바인딩된 클래스 인스턴스가 완전히 비워집니다. 코드를 쓰는 좋은 습관, 심지어 필수품이라 일반적으로 삭제해서는 안 된다. 그렇지 않으면, 이 인스턴스는 다시 유령이 되어 VBA 가 스스로 처리할 수 있을 것이라고 기대할 수 있습니다.

나는 네가 다음과 같은 방법을 시도해 볼 것을 건의한다.

먼저 다음 방법을 시도해 보십시오.

Dim d 를 사전으로 사용

Set d = 새 사전

그렇지 않은 경우 다음을 시도해 보십시오.

Dim d 를 사전으로 사용

Set d= CreateObject ("스크립트. 사전) 을 참조하십시오

안 돼, 해봐

Dim d 를 객체로 사용

Set d= CreateObject ("스크립트. 사전) 을 참조하십시오

마지막 방법은 디버깅하는 것이 번거롭다. 특히 Dictionary 가 착오가 있을 때는 실수가 무엇인지 모르니 사용하지 않도록 노력한다.