텍스트 파일 쓰기와 같은 방법으로
배치(batch) 파일을 만들어보자
배치 파일은 cmd 명령어를 이용한 프로그래밍이라 할 수 있다.
간단히 ping 보내는 파일을 만들어보겠다.
1. 파일 생성 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
Option Explicit
Sub Create_Batch_File()
Dim FILE_Path As String
FILE_Path = "C:\Users\S-PC-01\Desktop\test\ping.bat"
Open FILE_Path For Output As #1
Print #1, "ping -t 8.8.8.8"
Close #1
End Sub
|
cs |
1) FILE_Path 변수에 파일확장자를 포함한 경로와 이름 모두 넣어준다.
2) Open FILE_Path For Output As #1 : FILE_Path 파일에 저장을 시작하겠단 의미(?)
* Output: 출력할 때 사용
* Input: 읽어올 때 사용
3) Print #1, "ping -t 8.8.8.8" : 쌍따옴표 안에 파일에 출력할 내용 작성
4) Close #1 , 파일을 닫아주는 역할. 이 녀석이 없다면 파일이 계속 열려있는 상태임
2. 실행
이게 왜 그런고하니 vba로 생성된 배치 파일로 ping 보낼땐 관리자 권한으로 실행되어야 했다..
혹시나 관리자 권한으로 실행해본 것이 저 오류의 원인을 알 수 있게해줬다.
그래서 핑은 넘어가고 다른 명령어들로 테스트를 해봤다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
Option Explicit
Sub Create_Batch_File()
Dim FILE_Path As String
FILE_Path = "C:\Users\S-PC-01\Desktop\test\ping.bat"
Open FILE_Path For Output As #1
Print #1, "@echo off"
Print #1, "hostname"
Print #1, "pause"
Close #1
End Sub
|
cs |
@echo off : 사용된 명령어는 보여주지 않고 명령어의 실행 결과만 보여줌
컴퓨터의 이름을 출력하는 명령어로 변경하고
Pause를 넣어둠으로써 자동으로 창이 꺼지지 않게 했다.
hostname, ipconfig, net share, net user 등 사용해본 결과 결과를 정상적으로 출력해줬다.
관리자 권한이 필요한 명령어를 제외하고 많은 명령어들을 제어할 수 있었다.
3. 생성된 파일 실행
위 코드에 한 줄만 작성하면 응용프로그램 실행을 할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
Option Explicit
Sub Create_Batch_File()
Dim FILE_Path As String
Dim PID
FILE_Path = "C:\Users\S-PC-01\Desktop\test\ping.bat"
Open FILE_Path For Output As #1
Print #1, "ipconfig"
Print #1, "net user"
Print #1, "net share"
Print #1, "net accounts"
Print #1, "pause"
Close #1
PID = Shell(FILE_Path, vbNormalNoFocus)
End Sub
|
cs |
두 줄 추가한 듯;;
Dim PID :변수 선언
PID = Shell(FILE_Path, vbNormalNoFocus) :파일 실행
shell(파일경로+이름+확장자, 창 활성화 옵션)
shell의 두번째 파라미터에는 6가지 옵션이 있다.
1) vbhide / 백그라운드로 실행 (작업표시줄에 표시 안됨)
2) vbMaxmizedFocus / 최대화 창으로 실행 (활성화o)
3) vbMinimizedFocus /최소화 창으로 실행(활성화o)
4) vbMinimizedNoFocus /최소화 창으로 실행 (활성화 x)
5) vbNormalFocus / 중간 크기로 실행 (활성화o)
6) vbNormalNoFocus / 중간 크기로 실행 (활성화 x)
활성화 o,x의 차이점은 다음 그림에서 볼 수 있다.
그리고 변수를 넣어준 이유는 Shell 함수가 그렇게 생겨먹은 놈이라서 어쩔수 없었다
Shell 함수는 실행 하고 마지막에 실행된 프로그램의 PID 값을 뱉어내는데
이걸 담아두기 위한 곳이 필요한 듯 하다
그냥 변수 암거나 넣어주면 된다.
'컴퓨터 공부 > 엑셀 & VBA' 카테고리의 다른 글
[엑셀vba] vba코드 실컷 만들었더니 사라진다면? (0) | 2020.11.24 |
---|---|
[엑셀] 사용자 정의 폼에서 다양한 색깔을 써보자 (2) | 2020.11.20 |
[엑셀vba] getElementsByClassName '13' 런타임 오류 (0) | 2020.11.18 |
[엑셀vba ] Option Explicit 역할 (0) | 2020.11.16 |
[엑셀vba] private sub, sub 차이가 뭘까 (7) | 2020.11.16 |