디지털·가전제품

엑셀 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베리 받았어요.

    채택된 답변