VS6에서 VBScript에서 Shell
이 작동하지 않는 이유는 무엇인가요?
Visual Studio 6(VS6)에서 VBScript를 사용해 본 적이 있다면, 외부 프로그램을 실행하기 위해 Shell
명령을 사용하려 할 때 타입 불일치 런타임 오류
라는 짜증나는 장애물에 부딪혔을 수도 있습니다. 간단한 명령으로 작업을 간소화하고 싶은데 이 오류가 발생하면 당황스러울 수 있습니다. 도대체 무슨 일이 일어난 걸까요? Shell
이 예상처럼 작동하지 않는 이유는 무엇일까요? 이 문제를 하나씩 unpacking하고 해결 방법을 살펴보겠습니다.
문제점
매크로 코드에서 원래 이렇게 입력했을 수 있습니다:
shell("p4 open " + ActiveDocument.FullName)
하지만 이로 인해 오류가 발생합니다. 혼란의 이유는 VBScript와 Visual Basic(VB) 간의 차이에 있습니다. 두 언어는 유사성을 공유하지만 객체 사용 및 기능에서 상당한 차이가 있습니다.
VBScript와 WScript 객체 이해하기
VBScript와 Visual Basic
이 문제에 대한 논의에서 강조된 바와 같이, VBScript는 Visual Basic과 동일하지 않습니다. 가장 중요한 점은 VBScript가 제한된 수의 내장 객체를 가지고 있다는 것입니다. 예를 들어, VBScript에서 유일한 내장 객체는 WScript
객체입니다.
WScript.Echo "안녕하세요, 세계!"
이 WScript
객체는 Windows 스크립트 호스트 객체 모델 계층의 루트 역할을 합니다. 기본적인 기능을 제공하지만 Shell
명령을 통해 외부 프로그램을 직접 실행하는 것과 같은 고급 작업은 처리하지 않습니다.
CreateObject 메서드
VBScript에서 사용할 수 있는 대부분의 다른 객체를 사용하려면 CreateObject
메서드를 사용하여 이들을 생성해야 합니다. Shell 객체는 이러한 “기타” 객체 중 하나로, 실행을 위해 이 접근 방식을 요구합니다.
해결 방법: WScript.Shell 사용하기
VS6 매크로에서 외부 프로그램을 성공적으로 실행하려면 WScript.Shell
객체를 사용해야 합니다. 여기에 올바른 방법이 나와 있습니다:
Dim wshShell
Set wshShell = CreateObject("WScript.Shell")
strResult = wshShell.Run("p4 open " + ActiveDocument.FullName)
해결 방법 분해하기
-
변수 선언:
wshShell
과 같은 변수를 선언하여 Shell 객체를 담을 수 있습니다. -
Shell 객체 생성:
Set wshShell = CreateObject("WScript.Shell")
를 사용하여 Shell 객체의 인스턴스를 생성합니다. -
명령 실행:
wshShell.Run()
메서드를 사용하여 원하는 명령을 실행합니다. 이 경우는"p4 open " + ActiveDocument.FullName
입니다.
결론
초기에는 추가 단계가 불필요하게 보일 수 있지만, CreateObject
를 통해 WScript.Shell
객체를 사용하는 것은 Visual Studio 6 내에서 VBScript로 외부 애플리케이션을 실행하는 데 필수적입니다. 이 방법은 VBScript 설계 방식과 일치하며, 런타임 오류 없이 코드를 작동시킬 수 있도록 보장합니다.
VBScript와 Visual Basic 간의 차이를 이해하게 되면 이러한 문제를 헤쳐 나가고 코딩 경험을 간소화할 수 있습니다. 매크로 작업을 하고 있다면 이 지식이 장기적으로 시간과 수고를 절약해 줄 것입니다.
올바른 객체를 사용하는 것은 프로그래밍 기술을 향상시킬 뿐만 아니라 생산성을 높여줍니다. 즐거운 코딩 되세요!