이벤트함수를 일괄적용하는 방법이 있습니까?
VBA
작성자
saechang
작성일
2023-05-03 00:31
조회
82
Private Sub tbNo1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If KeyCode = vbKeyTab Then tbNo2.Value = tbNo1.Value End Sub Private Sub tbNo2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If KeyCode = vbKeyTab Then tbNo3.Value = tbNo2.Value End Sub
tbNo1 tbNo2 ... 라는 텍스트박스가 50개 정도 있습니다. ( 25번까지는 연속적인 번호이고, 후반부에는 넘버링 규칙이 바뀌어서 마지막 번호는 tbNo100 입니다.) 텍스트박스에 숫자를 입력하고 탭키를 누르면 포커스가 이동하면서 다음 박스에도 똑같은 값이 입력되도록 하는 코드입니다.
그런데 이걸 50 여번을 반복해서 입력하다 생각해보니 이건 아니다 싶어서 질문드립니다. 이런 이벤트를 한번에 처리하는 방법이 분명히 있을 것 같은데 검색해도 안나오는군요.
고수님들의 도움 부탁드립니다.
전체 11,034
번호 | 카테고리 | 제목 | 작성자 | 작성일 | 추천 | 조회 |
[📚교재 출간 안내] 「진짜쓰는 실무엑셀」 , 드디어 출간되었습니다! (177)
![]() ![]() |
![]() ![]() |
2022.02.03 | 469 | 182702 | ||
공지사항 | 공지사항 |
⭐ [더 나은 커뮤니티 문화를 위한 Q&A 글 작성 규칙] ⭐
(165)
오빠두엑셀
|
2021.10.28
|
추천 219
|
조회 11830
|
![]() ![]() |
2021.10.28 | 219 | 11830 |
56811 | 파워쿼리/피벗 |
New 파워쿼리 열너비가 자꾸 변해요... (열너비 조정 해제함)
![]() ![]() |
![]() |
18:22 | - | 22 |
56809 | 파워쿼리/피벗 |
New 쿼리 병합 시 원본부분 정렬이 흐트러져요...
![]() ![]() |
![]() |
17:55 | - | 21 |
56807 | 구글시트 |
New 'getRange is not a function' 문구와 함께 진행이 안됩니다.
![]() |
![]() |
17:45 | - | 17 |
56794 | 함수/공식 |
New vlookup 함수를 사용 시, 기준값이 안들어간 부분에 #N/A가 안보이게 하는 방법 없을까요?
![]() ![]() |
![]() |
12:42 | - | 40 |
56793 | 기능/도구 |
New 시트에 데이터 입력 및 관리 관련해 질문드립니다~~
![]() ![]() |
![]() |
12:40 | - | 22 |
56791 | 함수/공식 |
New 필터 범위에서 0값 제외 평균 구하는 방법
![]() ![]() |
![]() |
11:25 | - | 33 |
56786 | 함수/공식 |
New 모의고사 등급 산출과 관련하여 빛 같은 도움을 얻고자 합니다.
![]() ![]() |
![]() |
00:53 | - | 26 |
56784 | 차트/그래프 |
New 오빠두 간트차트 강의 자료에서 궁금한점이 있습니다. (차트 선택시 원본데이터 표시안됨)
![]() ![]() ![]() |
![]() |
2023.05.28 | - | 27 |
56778 | 파워쿼리/피벗 |
New 쿼리의 원본표 제목열이 바뀔 떄마다 쿼리가 오류나요..
(3)
답변완료
![]() |
![]() |
2023.05.28 | - | 33 |
56776 | 구글시트 |
New importrange 업데이트 속도가 느립니다.
(2)
![]() |
![]() |
2023.05.28 | - | 41 |
56761 | 파워쿼리/피벗 |
New 쿼리 내에서 빼기 수식으로 열추가를 할 수 있나요?
![]() ![]() |
![]() |
2023.05.28 | - | 47 |
56754 | 함수/공식 |
New 많은표 vs 많은수식 .. 둘중에 뭐가 동작속도를 느리게 하나요?
(2)
![]() |
![]() |
2023.05.27 | - | 50 |
56750 | 구글시트 |
New 필터, 중괄호, 쿼리로 불러온 데이터의 합을 구하고 싶습니다 외
![]() ![]() |
![]() |
2023.05.27 | - | 38 |
56749 | 문서서식 |
New 데이터를 가져올 수 없습니다.
![]() ![]() |
![]() |
2023.05.27 | - | 33 |
56747 | 함수/공식 |
New 일별 출근시간 기록
![]() ![]() ![]() |
![]() |
2023.05.27 | - | 42 |
56743 | 차트/그래프 |
New 필터 단추크기 조절
(2)
![]() |
![]() |
2023.05.27 | - | 44 |
56740 | 함수/공식 |
New 문자 + 함수 +문자 ... 형식으로 입력 시 문제가 있어 문의 드립니다.
(1)
![]() |
![]() |
2023.05.27 | - | 36 |
56739 | 함수/공식 |
New 중복값의 합계와 평균을 낼 수 있나요??
![]() ![]() |
![]() |
2023.05.27 | - | 41 |
56735 | 함수/공식 |
New 목록상자 다중조건
![]() ![]() |
![]() |
2023.05.26 | - | 43 |
56726 | 함수/공식 |
New 영어와 번역본 기호 차이
![]() ![]() ![]() |
![]() ![]() |
2023.05.26 | - | 46 |
56725 | 피벗테이블 |
New 시트마다 값 자동기입 가능여부 및 적용할 수 있는 방법 문의
![]() ![]() |
![]() |
2023.05.26 | - | 45 |
56724 | 함수/공식 |
New 엑셀로 데이터 집계하기
![]() ![]() ![]() |
![]() |
2023.05.26 | - | 50 |
56722 | 피벗테이블 |
New 피벗테이블과 관련된 여러 질문입니다. 엑셀 파일도 첨부합니다.
![]() ![]() ![]() |
![]() |
2023.05.26 | - | 53 |
56721 | 기능/도구 |
New 전월 대상자 복사해서 불러오기 기능이 있나요?
![]() ![]() |
![]() |
2023.05.26 | - | 41 |
56717 | 함수/공식 |
New 건설일용직노무비 중복일수 합치기 문의입니다.
![]() ![]() ![]() |
![]() |
2023.05.26 | - | 48 |
56716 | 문서서식 |
New 복사-값붙여넣기 표시오류
![]() ![]() |
![]() |
2023.05.26 | - | 47 |
56713 | 문서서식 |
New 표로 만들어버린 서식은 수정이 불가능한가요?
![]() ![]() |
![]() |
2023.05.26 | - | 41 |
56711 | 문서서식 |
New 컨트롤+방향키를 누를때 행또는 열의 끝부분으로 이동하는 경우
![]() |
![]() |
2023.05.26 | - | 36 |
56710 | 파워쿼리/피벗 |
New 쿼리속성에서 자동업데이트 메뉴가 보이지 않아요
![]() ![]() |
![]() |
2023.05.26 | - | 22 |
56701 | VBA |
New 어제 라이브 강의에서 해시태그생성 템플릿 수정 방법 문의 드립니다.
![]() ![]() |
![]() |
2023.05.25 | - | 32 |
@saechang 님 이벤트클래스를 사용하는 방법입니다.
먼저 클래스 모듈을 추가하고 이름을 TextBoxEvent라고 하고
아래와 같이 내부에 입력합니다.
개별 컨트롤에서 수행할 작업을 여기에 넣습니다.
아래는 이름을 분석해서 다음 컨트롤 이름을 찾아가도록 한 것입니다.
TextBox가 들어 있는 폼을 UserFrom이라고 하고, 이벤트를 적용할 control의 집합을 선언합니다.
그리고 폼의 Initialize이벤트에 아래와 같이 추가합니다.
번호가 연속적이지 않아도 다음 번호를 찾아갑니다.
번호 부여 규칙이 다르면 다음 번호를 찾을 규칙을 적용합니다.
이제 TextBox를 추가하고 이름을 규칙대로 넣어 주면 자동으로 해당 이벤트가 실행됩니다.
양식그리기 귀찮아서 @saechang님께서 올려주신 form을 수정했습니다. ^^
번호는 1~5, 11~14, 20으로 불연속적으로 넣었습니다.
첨부파일 : 질문-1.xlsm
@원조백수 님 감사합니다. 이렇게 상세하게 풀어서 설명까지 해주셔서 크게 도움이 되었습니다. (여전히 이해는 잘 못하고 있긴 하지만... ^^)
솔직히 클래스니 콜렉션이니 하는 개념이 아직 낯설어서 이걸 그대로 카피해서 써도 되나 하는 불안감이 있습니다.
시간이 지나서도 제 VBA 배움에 진척이 없다면 유지보수에 문제가 생길지도 모르니까요.
그냥 50번 반복노가다 짓이라도 내가 알고 있는 방식으로 작업을 할까 아니면 잘 모르는 개념이라도 일단 사용하면서 발전을 기대해볼까 여러모로 고민을 하고 있는 상황입니다. (그냥 푸념입니다.)
다시 한번 감사드립니다.
@saechang 님 코드에 이해하신 만큼 설명을 넣어 두세요...
저도 다른 분들이 만들어서 올려둔거 샘플로 공부하면서 배웠습니다.
한 번 따라 해보고 성공하면 그 내용을 잘 기록해 두세요.
나중에 그걸 보고 다시 하시면 됩니다.
Excel 수식이든 VBA 샘플이든 잘 정리해서 모아 놓으면 많이 도움이 됩니다.
@원조백수 님 염치없지만 질문 하나만 더 드리겠습니다.
위 코드에서 userform 에 있는 private sub orderView 라는 프로시저를 저 이벤트코드에 끼워넣으려면 어떻게 해야 하나요?
클래스모듈의 이 줄 밑에다 넣었더니 정의되지 않은 프로시저라고 뜨네요. 혹시나 하고 public 으로 바꿔봤는데 마찬가지입니다.
userform의 다른 텍스트박스나 콤보박스의 조건에 따르는 프로시저라서 모듈로 빼기도 난감하고요
(userform 에다가 모든 코드를 다 넣어놨더니 코드가 스파게티처럼 되어서 어떻게 정리해야 할지 갑갑합니다. 입력폼 만드는데서부터 이렇게 난관이 많다니...)
@saechang 님 Form 코드 안에 정의하신 orderView라는 프로시저를 호출하려고 하는 것인가요?
orderView 프로시저를 일반 모듈에서 다시 작성하시고,
클래스모듈로 지정한 TextBoxEvent에서 사용할 이벤트에서 호출하시면 됩니다.
일반 모듈로 옮길 때에는 me.ControlName 이런 식으로 되어 있는 것을
UserForm.ControlName 방식으로 개체를 명시해 주어야 합니다.
@원조백수 님 감사합니다. orderView 프로시저와 그 안에 들어있는 함수까지 모두 일반 모듈로 빼내고 말씀하신대로 수정하니 잘 작동하였습니다. private 로 쓰여있는대로 옮겼더니 에러가 나길래 public 으로 고쳤더니 작동되더군요. 일반모듈에 있는 프로시저와 함수는 원래 public 으로 선언해야 하는 건지 궁금합니다. (질문1)
그런데 생각해보니 Tab 키로 이동할 때만 orderView 가 작동되는지라 exit 이벤트에 orderView 가 작동하도록 하려고 했더니 잘 안되더군요. (orderView 는 tbNo 박스안의 숫자를 합산해서 labelOrder.caption 으로 보여주는 프로시저입니다.)
클래스모듈 TextBoxEvent 에 Private Sub tby_Exit(ByVal Cancel As MSForms.ReturnBoolean) 이런식으로 추가해서 비슷하게 썼더니 안되는군요. 설마 클래스모듈을 따로 만들어야 되는가 싶어서 tbNoExitEvent 라는 클래스모듈을 만들어서 해도 안됩니다.
클래스모듈 tbNoKeyEvent
클래스모듈 tbNoExitEvent
어디가 문제인지 모르겠습니다. T_T
@saechang 님 1. 당연히 Public으로 선언해야 모듈 밖에서도 호출할 수 있습니다.
2. 이벤트 클래스는 하나에 여러 이벤트 동작을 지정할 수 있습니다.
3. WithEvents로 지정한 TextBox에는 Exit라는 이벤트가 없습니다.
그래서 Change나 KeyDown 등 다른 이벤트를 사용합니다.
@원조백수 님
정말로 감사드립니다. 클래스모듈에 이렇게 추가해서 깔끔하게 해결했습니다.
@saechang 님
@마법의손 님 파일을 올렸습니다. Chat-GPT 에게 질문을 해서 받은 코드도 주석처리해서 같이 올립니다.
첨부파일 : 질문.xlsm