2016-07-23 4 views
1

약간의 프로젝트를 위해서 나는 매크로가 cmd.exe를 열고 몇 줄의 코드를 실행하기를 원합니다.VBA에서 CMD에 여러 줄의 코드를 입력하는 방법은 무엇입니까?

웹에서 여러 가지 좋은 예를 찾고 올바른 해결책을 찾을 수 없습니다. 내가 수정을 시도하는 코드는 다음 :

strToPrint = "Hello World!" 
Shell "cmd.exe /K echo " & strToPrint, vbNormalFocus 

난에이 코드 발견 : 내가 코드의 여러 라인으로 바꿀려고 내 테스트에 대한 How to write message to command window from VBA?

을하지만, 두 줄에 다음 코드를 실행 한 후 다른 명령 창에서 실행됩니다, 아래 참조 코드 : 내가 쉘 두 번 호출 할 때

Sub CMD_VBA_Script() 

Shell "cmd.exe /K echo Hello World!", vbNormalFocus 
Shell "cmd.exe /K color 0a", vbNormalFocus 

End Sub 

내가 그것을 두 번 실행하는 것, 이해한다,하지만 난 하나에 여러 줄을 넣어하는 방법을 알아낼 수 없습니다 명령 창.

@echo off 
title Matrix 
color 0a 
mode 1000 

:a 
echo %random%%random% 
goto a 

누군가가 명령 프롬프트에 VBA에서 코드의 여러 라인을 실행하는 방법을 올바른 방향으로 나를 도울 수 :

내 궁극적 인 목표는 VBA에서 다음 스크립트를 호출하는 것입니다?

감사합니다, 짧은 Dubblej 그래서

답변

3
MyFile = "C:\cmdcode.bat" 
fnum = FreeFile() 
Open MyFile For Output As #fnum 
Print #fnum, "@echo off" 
Print #fnum, "title Matrix" 
Print #fnum, "color 0a" 
Print #fnum, "mode 1000" 
Print #fnum, "" 
Print #fnum, ":a" 
Print #fnum, "echo %random%%random%" 
Print #fnum, "goto a" 
Close #fnum 


' Run bat-file: 
Shell MyFile, vbNormalFocus 


' optional, remove bat-file: 
Kill "C:\cmdcode.bat" 

. 당신이 실행하는 박쥐 파일을 만들어야합니다. 완료 후 bat 파일이 필요하지 않으면 Kill

+0

감사합니다, 그것은 잘 작동합니다! Kill 명령 전에 코드에 'Application.Wait (Now + # 12 : 00 : 03 AM #)'을 추가했습니다. 이제 파일이 3 초 동안 실행 된 다음 죽습니다. – Dubblej

+0

괜찮습니다. 나는 보통 코드를 지연시키고 자 할 때 sleep() 함수를 사용한다. 'Sleep (3000)'쓰기가 조금 쉬워졌습니다. – Andreas

1

으로 삭제할 수 있습니다. 명령 프롬프트 일괄 처리 파일을 실행하려는 것처럼 보입니다. 일괄 처리는 상태 저장이므로 각 행을 개별적으로 실행하는 것은 진행되지 않습니다. 전체적으로 배치를 실행하는 것과 같은 효과를 나타냅니다.

다른 두 가지 다른 접근 방식이 명령을 실행할 cmd.exe의 대화 형 인스턴스를 지시하여 배치 실행을 날조 포함 등-라고요 입력 한 자동화 된 프로세스에 의해 : 어느 cmd 과정 'stdin 스트림으로 윈도우 메시지 또는 배관을 전송. 나는 그들의 고유 한 괴짜 (문서화되지 않은 행동, 즉 종속)의 이러한 방법 중 하나를하지 않는 것이 좋습니다

이 의도대로 따라서 최고의 방법은 배치 파일을 실행하는 것입니다 - 당신의 배치를 작성해야 임시 파일 먼저 다음을 실행합니다

여기에서 코드를 사용 : https://support.microsoft.com/en-us/kb/195763

Dim tempFileName As String 
tempFileName = CreateTempFile("SomeBatch.cmd") 

WriteToBatchFile(tempFileName) ' you will have to write to the temp batch file yourself here 

Shell "cmd.exe /c """ & tempFileName & """", vbHide, True ' Run the batch file, then cmd.exe will terminate. The Shell function will block until cmd is closed 

Kill tempFile ' delete the temp batch file 
+0

설명 주셔서 감사 합니다만, 지금은 많은 것을 만들어냅니다! – Dubblej

관련 문제