수작업으로는 포기하고 싶어지는 UserForm 키 조작 개선을 Gemini Flash와의 대화만으로 끝낸 이야기
요약
수작업으로 구현하기 까다로운 Excel UserForm의 키보드 조작 및 포커스 문제를 Gemini 3.8 Flash와의 대화만으로 해결한 경험을 공유합니다. 이 글은 복잡한 이벤트 함정(예: SetFocus 타이밍, TabStrip 포커스)이 많은 VBA 작업을 AI와 '대화'하듯 진행하는 과정을 보여줍니다.
핵심 포인트
- UserForm의 키보드 조작 및 포커스 관리는 수작업으로 매우 까다롭습니다.
- Gemini Flash와의 대화를 통해 복잡한 VBA 코드를 순조롭게 수정할 수 있었습니다.
- AI를 활용하면 개발 과정이 '대화'처럼 쉽고 직관적으로 변합니다.
- 무거운 모델보다 명확한 지시와 도구(엑셀 매니저)가 중요함을 강조합니다.
올해 5월에 '대화만으로 매크로가 고쳐진다'는 글을 썼습니다.
그 이후 반년 동안, 매크로를 새로 만드는 것뿐만 아니라, 망가진 수식을 고치거나 애드인(add-in)을 모으는 등 AI와 함께하는 방식은 계속 진화해 왔습니다.
그리고 오늘 밤, 또 하나의 흥미로운 경험을 했습니다. Excel VBA의 UserForm UI 개선을 키보드 조작까지 포함하여 처음부터 끝까지 대화의 주고받음만으로 고쳐버린 것입니다.
상대방은 가볍고 민첩한 **Gemini 3.8 Flash(플래시 군)**입니다.
수작업으로 하려고 했다면, 이벤트의 특성이나 포커스 싸움에 머리를 싸매고 결국 미루게 되는 까다로운 UserForm 조율 작업이, 단 몇 분 만에 마치 잡담을 나누는 것처럼 손쉽게 완성되었습니다.
이번 글에서는 그 당시 상황을 되돌아보며 '폼은 만드는 것이 아니라, 대화로 키워지는 것'이 되었다는 이야기를 적어보고자 합니다.
- UserForm의 키보드 조작(시작 시 포커스, 화살표 키를 이용한 탭 순회, Enter 실행)은 수작업으로 할 경우 이벤트 함정이 많아 매우 번거로운 작업입니다 -
- '열자마자 ↓키로 선택할 수 없다', '탭 전환도 키보드로 하고 싶다', '지금 어느 탭에 있는지 알기 어렵다'와 같은 감각적인 요구사항을 말로 전달하는 것만으로 순조롭게 고쳐졌습니다 -
- 엑셀 매니저의 최대 장점은, 가장 까다로웠던 UserForm이 대화만으로 만들어질 수 있게 되어, Excel 자체가 마치 '전용 업무 소프트웨어'처럼 움직이게 되었다는 점입니다 -
- 지시할 때마다 Gemini 3.8 Flash가 포인트를 맞춰 VBA 코드를 수정하고, 전체 컴파일 및 134건의 테스트, 애드인 등록까지 한 번에 완수해 주었습니다.
- 무겁고 큰 모델이 아니더라도, 손발 역할을 하는 도구(엑셀 매니저 MCP)와 명확한 지시만 있다면,
플래시 군이 눈 깜짝할 새에 폼을 완성해 줍니다.
Excel VBA로 UserForm을 만들어 본 분이라면 한 번쯤 공감하실 수 있을 것입니다.
화면에 리스트박스나 버튼을 배치해서 '클릭하면 작동하는' 상태로 만드는 것은 그리 어렵지 않습니다. 하지만 '마우스를 사용하지 않고, 키보드만으로 부드럽게 조작할 수 있게 한다'고 하면 갑자기 난이도가 급상승합니다.
- 폼을 열자마자 리스트박스에 포커스가 맞춰져 있지 않아, 키보드의 ↓키를 눌러도 아무 일도 일어나지 않음.
Initialize이벤트에서SetFocus를 시도해도, 폼 표시 전이라 무시됨(반드시Activate이벤트를 찾아서 작성해야 함).- 탭(TabStrip)을 클릭하면 탭 쪽에 포커스가 남아버려, 다시 리스트가 키보드로 작동하지 않게 됨.
- 좌우 화살표 키로 탭을 전환하려고 하면,
KeyDown이벤트의KeyCode를 가져와 인덱스를 증감시키고, 끝에서 멈추거나 루프시키는 계산이 필요함. - 오른쪽 끝 '설정' 탭에 들어가서 리스트가 사라지면 포커스를 잃어버려 키 조작 자체가 전혀 안 되게 됨……
이것을 VBE(Visual Basic Editor)를 열고 수작업으로 고치려고 하면, 속성 창과 코드 창을 왔다 갔다 하고, 시도하고 닫고, 다시 고치고……라며 작은 시간은 순식간에 사라집니다.
결국 '뭐 작동하니까, 마우스로 클릭하면 되겠지'라고 타협하는 것이 늘었습니다.
오늘 밤의 작업은 아주 사소한 질문에서 시작되었습니다.
'지금 열려 있는 Excel 시트의 열린 폼 아시겠어요?'
화면 건너편의 플래시 군은 한순간도 망설이지 않고 도구(엑셀 매니저)를 두드리며,
'대상 통합 문서: 秀コンボ.xlsm, 통합 매크로 폼 (로드 중)'
이라고 즉답했습니다.
여기서부터 대화만으로 폼을 고쳐나가는 시간이 시작되었습니다.
먼저 요청한 것은, 시작 직후의 포커스였습니다.
'열었을 때 키보드의 상하 또는 PageDown/Up이 가능하도록, 첫 번째 항목에 포커스가 있는 상태로 만들어 주세요. 그리고 Enter로 실행하고, 오른쪽 클릭으로 편집으로 이동할 수 있게도 하고 싶습니다.'
플래시 군은 코드를 빠르게 점검하며, 'Enter로 실행'과 '오른쪽 클릭으로 편집'은 이미 기존 코드에 포함되어 있음을 알아차렸습니다.
작동하지 않았던 이유는 단 하나, **'열자마자 리스트에 포커스가 맞춰져 있지 않았기 때문'**이었습니다.
플래시 군은 UserForm_Activate
이벤트(Event)를 빠르게 추가하고 리스트의 첫 번째 행을 선택하여 SetFocus
하는 코드를 작성했습니다.
Private Sub UserForm_Activate()
On Error Resume Next
If lstItems.ListCount > 0 Then
...
이것만으로도, 폼을 열자마자 손을 키보드에 댄 채 ↓키로 매크로를 선택하고 Enter로 즉시 실행할 수 있게 되었습니다.
리스트가 키보드로 움직이게 되자, 곧바로 다음 욕구가 생겼습니다.
“마우스로 탭을 클릭했을 때도 그때마다 리스트에 포커스를 주고 싶고, 탭 전환 자체도 키보드로 할 수는 없을까요?”
Flash에게서 돌아온 제안은,
“좌우 화살표키(← / →)를 사용해 탭을 전환하는 것이 한 손으로 리스트 조작과 탭 순회(tab navigation)를 동시에 할 수 있어 가장 추천합니다.”
라는 내용이었습니다.
“그걸로 부탁할게”라고 답하자, lstItems_KeyDown에 좌우 키 판별 로직이 추가되었고, 탭 전환 처리에도 SetFocus가 결합되었습니다.
좌우 키로 카테고리를 전환하고, 상하 키로 매크로를 선택하며, Enter로 실행합니다. 마우스에 단 한 번도 손을 대지 않고 모든 매크로에 손이 닿는 짜릿함(쾌감)이 생겼습니다.
그런데 실제로 화살표키로 이것저것 움직여 보니, 작은 함정에 눈치챘습니다.
“화살표키로 이동하다가 ‘설정’ 탭에 들어가면 키 입력이 안 되네요.”
설정 탭에는 매크로 목록 리스트가 없기 때문에 포커스가 벗어나면서 키 감지(key monitoring)가 멈춰버리는 것입니다.
Flash에게 이 문제를 전달하자, 곧바로 이유를 설명하며 이렇게 제안했습니다.
“일상적인 매크로 선택에서는 매크로 목록이 있는 ‘활성’부터 ‘전체’(0~5) 사이에서 양 끝을 루프시키는 것이 가장 쾌적합니다.”
“그걸로 하자”라고 답하자, 몇 초 후에는 “전체”에서 오른쪽 키를 눌러 “활성”으로 돌아가고, “활성”에서 왼쪽 키를 눌러 “전체”로 돌아가는 루프 처리가 완성되었습니다.
ElseIf KeyCode = vbKeyLeft
KeyCode = 0
If tabMain.Value <= 0 Or tabMain.Value > 5 Then
...
설정 화면에 걸리는 일 없이, 매크로의 창고를 빙글빙글 가볍게 순회할 수 있게 되었습니다.
마지막으로 손을 댄 부분은 시각적 피드백이었습니다.
Windows 표준 TabStrip은 선택된 탭의 색상 변화가 은근해서, 지금 어디를 열고 있는지 파악하기 조금 어렵습니다.
“좀 더 명확하게 할 수 없을까요?”라고 상담하자, Flash에게서 몇 가지 접근 방식이 제시되었습니다.
그중에서 “목록 바로 위의 건수 레이블에 탭 이름을 크게 명시하는 것”을 선택했고, Flash는 한층 배려하여 3단계의 시각적 강조를 결합해 주었습니다.
탭 제목: 선택된 탭 문자를 【활성】처럼 강조 -
목록 바로 위의 건수 레이블: 파란색 굵은 글씨로 【활성】 73건과 같이 크게 표시 (표시 영역도 넓게 확장) -
제목 표시줄(Title Bar): 최상단 창 프레임도 매크로・레시피 통합 목록 ― 【활성】
에 연동
리스트를 바라보는 시선의 바로 위에서, 선명한 파란색 글씨의 현재 탭이 눈에 확 들어오게 되면서, 망설이는 요소가 완전히 사라졌습니다.
오늘 밤 작업을 마치고 다시 한번 실감한 것은, **“Excel Manager를 사용하면서 가장 좋아진 점을 꼽으라면, 의심할 여지 없이 이 폼(UserForm)입니다.”**라는 것입니다.
Excel은 기본적으로 행과 열이 나열된 스프레드시트(표 계산)입니다.
하지만 앞에 단단한 UserForm이 떠오르고 키보드나 버튼으로 자유자재로 조작할 수 있게 되면, Excel은 단순한 표 계산이라는 정체성을 벗고 마치 하나의 ‘업무 전용 소프트웨어’처럼 움직이기 시작합니다.
시트의 셀을 직접 하나하나 만지는 것이 아니라, 세련된 조작 패널에서 필요한 매크로나 처리를 호출하는 것입니다.
사용자 입장에서 느끼는 감각은, 더 이상 “Excel을 열어 작업하고 있다”가 아니라, “사내 전용 업무 앱을 구동하고 있다”와 다를 바 없습니다. 이 차이는 일상적인 실무에서 믿기 어려울 만큼 큰 효과를 만들어냅니다.
그런데 지금까지의 Excel VBA에서, 그 **“가장 효과가 큰 UserForm”이야말로 개발자에게는 “가장 귀찮고 만들고 싶지 않은 영역”**이었습니다.
- 컨트롤을 배치하고 좌표를 맞추는 작업(UI 산수)
- 버튼 클릭 시, 텍스트 변경 시의 이벤트 작성
- 폼 열림/닫힘 시 초기화 및 포커스 관리
- 리스트 박스와 탭 간 연동 매크로 구성
표준 모듈의 매크로는 '셀을 읽고 계산하여 쓰는' 것만으로 충분하지만, UserForm은 '화면의 디자인(UI)'과 '이벤트 매크로'가 복잡하게 얽혀 있습니다. VBE를 열어 마우스로 컴포넌트를 미세 조정하고, 코드 창에서 이벤트를 추적하는 작업은 정말 고된 일이었습니다. 그렇기 때문에 많은 사람이 '폼을 만드는 건 번거로우니, 시트 위의 버튼으로 충분하다'고 포기했었죠.
그런데 이제는 VBE를 단 한 번도 열지 않고, 대화만으로 폼이 생성되고, 떠오르는 순간 키보드 조작이나 디자인까지 순식간에 수정할 수 있게 되었습니다.
가장 까다로웠던 UserForm이 가장 손쉽게 대화로 만들어지는 시대가 온 것입니다.
덕분에 Excel을 본격적인 소프트웨어로 구현하는 진입 장벽 자체가 한순간에 0이 되었다고 느낍니다.
이번 수정 작업을 통해 다시 한번 놀란 것은 **Gemini 3.8 Flash의 '경쾌함과 정확성'**입니다.
세상에는 '복잡한 프로그래밍 작업은 대형 모델(Opus나 Pro)을 사용해야만 가능하다'는 이야기도 있습니다.
물론, 고장 난 수식의 공간 구조를 풀어내는 것 같은 고급 알고리즘 설계에는 깊이 생각하는 두뇌가 필요합니다.
하지만 일상적인 도구 관리나 폼의 세밀한 UI 개선에 가장 강력한 힘을 발휘하는 것은 **'빠르게 반응하는 속도'와 '도구를 정확하게 다루는 능숙함'**이었습니다.
Flash는 다음과 같은 작업을 수행합니다:
- '폼이 열려 있는지'를 0초 만에 도구를 사용해 확인합니다.
- 수정 대상 프로시저를 특정하고,
patch_procedure로 필요한 몇 줄만 정확하게 교체합니다. 주변 코드를 임의로 건드리지 않고 전체 컴파일을 통과시킵니다. - 134개 문항이 있는 테스트 관문을 스스로 돌려 모든 항목이 PASS하는지 확인합니다.
- 개발용 북(.xlsm)에서 애드인(.xlam)으로, 업데이트 등록까지 자율적으로 완료합니다.
이러한 일련의 후처리 과정을 대화 한 번 주고받을 때마다 단 몇 초 만에 자동적으로 처리해 줍니다.
사람의 역할은 '여기는 이렇게 작동하지 않을까', '좀 보기 불편한데'와 같이, 실제로 사용해 본 솔직한 감상만 채팅창에 던져주는 것입니다. 코드를 작성하는 것은커녕 VBE 화면조차 한 번도 보지 않았습니다.
예전에 VBE로 애써 폼을 만들던 시절에는 UI의 세밀한 조정은 늘 포기해야 하는 부분이었습니다.
'나만 사용할 거라 마우스로 움직이면 충분하다', '키보드 대응 같은 건 코드가 길어질 뿐이라 귀찮다'.
이렇게 타협했던 이유는, 키 감지(key monitoring)나 포커스 제어를 하나 추가하는 것만으로도 사람이 수작업으로 처리하기에는 너무 많은 노력이 필요했기 때문입니다.
하지만 대화만으로 코드가 수정되고, 테스트가 실행되며, 애드인이 재빌드되는 환경이 손에 있다면,
'좀 더 이렇게 하고 싶다'고 생각하는 그 순간에, 혼잣말을 하듯 화면이 자라납니다.
폼은 이제 힘들게 설계도를 그려서 '만드는' 것이 아닙니다.
책상 위의 작은 조수(Flash)와 잡담을 나누면서 **'대화로 키워나가는 것'**이 된 것 같다고, 키보드만으로 경쾌하게 움직이는 목록을 바라보며 느꼈던 밤이었습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기