본문 바로가기
STUDY

Excel VBA macro 에서 cmd 실행

by PsychoFLOOD 2021. 7. 22.
728x90

python도 좋지만 excel 자체적으로 뭔가를 할때는 이만한게..없을듯...

역시 또 업무상 excel vba를 이용할 일이 있어서 사용하다가 cmd line에서 실행할 일이 있어서 매번 검색하기 힘들어서 정리해두었다...

(검색해보면 다 나오는 것들임)

 

보아하니 wsh라는 WScript.Shell 객체를 통해서 cmd.exe 말고도 원하는 프로세스를 수행시킬 수 있는 듯 싶다.

그리고 cmd.exe 뒤에는 여러가지 명령을 차례로 연결할 수 있는데 이때는 && 를 이용해서 연결시켜준다.

그리고 아래 예제는 현재 워크북의 경로로 이동하여 dir을 한번 해주고 해당경로를 탐색기로 열어주는 코드이다.

 

 

Dim wb As Workbook: Set wb = Workbooks(ThisWorkbook.Name)

Dim wsh As Object: Set wsh = VBA.CreateObject("WScript.Shell")

Dim strPath As String: strPath = """" & wb.Path & """"

 

Dim cmdText As String

Dim waitOnReturn As Boolean: waitOnReturn = True

Dim windowStyle As Integer: windowStyle = 1

 

cmdText = "cd /d " & " strPath & " && " dir"

wsh.Run "cmd.exe /S /C " & cmdText, windowStyle, waitOnReturn

wsh.Run "Explorer.exe " & strPath & ", vbNormalFocus"

 

이외 기억해둘 사항들...

1. loop를 오래 돌일이 있을때 응답없음으로 되는 경우는 loop 에 DoEvents 를 넣어주면 된다.

2. 아주 많은 line을 처리하여 셀에 일일히 넣는 작업은 아주 느린 속도를 보여주므로 이때는 큰 배열을 선언하여 배열에서 작업하고 난 뒤 원하는 시트의 range에 바로 넣는 것이 빠르다.

3. progress bar를 보여주는 vba코드들도 있던데.. 복잡해보이고 그냥 Application.StatusBar 에 스트링을 할당하면 엑셀창의 상태줄에 원하는 스트링을 보여주어 대강 프로그레스를 알수있다.

4. 원본 데이터를 텍스트로 저장할때 str format은 \n 만 주기보다는 \r\n 을 주어야 엑셀에서 읽어들일때 정상적으로 한줄로 인식한다.(Line Input #1, text 사용시...)

 

*VBA study에 참고할만한 사이트(google에서 vba로만 검색해도 이를 다루는 블로그 등의 글들이 아주 많다..)

 

https://wikidocs.net/book/295

 

위키독스

온라인 책을 제작 공유하는 플랫폼 서비스

wikidocs.net

 

https://sun-kakao.tistory.com/85

 

VBA 배열과 Range의 속도차이!

100,000행에 "ㅎㅎ" 라는 글자를 넣는 업무를 한다고 하면! ​ Range를 사용해서 넣었을 때와 배열을 사용해서 넣었을 때의 속도차이를 보겠다. ​ 우선 Range를 사용하여 "ㅎㅎ"라는 글자를 넣는다.

sun-kakao.tistory.com

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90

댓글