디지털·가전제품
그럭저럭탐구하는아보카도
엑셀 vba 자동화 매크로 사용해보신분 계신가요..!
제가 엑셀 데이터를 SAP 프로그램으로 옮기는 작업을 하고싶은데.. 가능한건가요??
SAP에서 녹화를 통해 vbs 파일을 만들고 나서 엑셀 VBA에 넣으라는데…
한번도 해본적이 없어서 이게 정말 가능한건지, 그리고 이런 절차가 맞는지도 모르겠어요..
인터넷에 찾아보면 이제는 안된다는 말도 있는 것 같던데 도통 알수가 없네요
1개의 답변이 있어요!
네, 가능합니다.
지금 말씀하신 방식은 실제 현업에서도 많이 쓰는 방식이에요.
특히:
엑셀 데이터 → SAP 입력
반복 전표 입력
자재/거래처 등록
월 마감 반복 작업
같은 업무 자동화에 많이 사용합니다.
핵심 구조는 보통 이렇게 됩니다:
SAP GUI Script 녹화
녹화된 .vbs 코드 생성
그 코드를 Excel VBA 안에 넣기
엑셀 행(row)을 읽으면서 SAP에 자동 입력
즉, 들으신 절차 자체는 맞아요.
왜 “안 된다”는 말이 있나?
보통 아래 경우 때문입니다.
회사 보안 정책으로 SAP GUI Scripting 차단
SAP 버전 차이
VBA 64비트/32비트 문제
SAP Fiori(웹 기반) 환경 사용
관리자 권한 제한
하지만
SAP GUI(윈도우 프로그램 버전)를 쓰고 있고,
회사에서 스크립팅 허용되어 있으면 아직도 많이 사용합니다.
실제 흐름 예시
1단계 — SAP 스크립트 녹화
SAP 상단 메뉴:
Alt + F12
→ Script Recording and Playback
→ Record
그러면 .vbs 파일이 생성됩니다.
예를 들면 이런 코드가 나와요:
session.findById("wnd[0]/usr/ctxtMATNR").text = "1000001"
session.findById("wnd[0]/tbar[1]/btn[8]").press
이건:
특정 입력칸에 값 넣고
버튼 누르는 행동
을 기록한 거예요.
2단계 — VBA로 옮기기
엑셀 VBA에서:
Sub SAP_Run()
Dim SapGuiAuto
Dim SAPApp
Dim Connection
Dim session
Set SapGuiAuto = GetObject("SAPGUI")
Set SAPApp = SapGuiAuto.GetScriptingEngine
Set Connection = SAPApp.Children(0)
Set session = Connection.Children(0)
session.findById("wnd[0]/usr/ctxtMATNR").Text = "1000001"
End Sub
이런 식으로 연결합니다.
3단계 — 엑셀 데이터 반복 입력
예를 들어 A열 데이터를 SAP로 보내려면:
Dim i As Integer
For i = 2 To 100
session.findById("wnd[0]/usr/ctxtMATNR").Text = Cells(i,1).Value
session.findById("wnd[0]").sendVKey 0
Next i
이런 느낌으로 자동 반복이 됩니다.
제일 중요한 것: SAP GUI Scripting 활성화
이게 안 되어 있으면 아무리 VBA 잘 짜도 동작 안 합니다.
확인 방법:
SAP에서:
Alt + F12
→ Options
→ Accessibility & Scripting
→ Enable scripting
체크되어 있어야 해요.
그리고 서버 측에서도 허용돼야 합니다.
(이건 보통 SAP 관리자/BASIS 권한)
처음 하실 때 현실적인 난이도
솔직히 처음 보면:
코드가 외계어 같고
findById가 너무 길고
에러도 많이 나서
엄청 어렵게 느껴집니다.
근데 실제로는:
녹화
복붙
엑셀 값 연결
패턴 반복이라,
한 번 성공하면 계속 응용 가능해요.
추천하는 시작 방법
처음부터 큰 자동화 하지 말고:
1단계
SAP에서 입력 하나만 녹화
예:
로그인 후
거래처 코드 하나 입력
2단계
VBS를 VBA에 붙여넣기
3단계
고정값 → 셀 값으로 바꾸기
이 순서로 가면 이해가 빨라요.
참고로 많이 겪는 문제
SAP 창 이름 바뀜
팝업 발생
로딩 속도 문제
세션 끊김
findById 주소 변경
이런 건 거의 필수로 겪습니다.
그래서 보통:
Application.Wait
DoEvents
같은 걸 중간중간 넣어요.
채택 보상으로 36베리 받았어요.
채택된 답변