티스토리 뷰
[ Private | Public | Friend ] [ Static ] Sub 함수명 [ ( 인수 ) ]
[ 실행문 ]
[ Exit Sub ] ' 정상 종료전 즉시 종료
[ 실행문 ]
End Sub
Public | 프로젝트내 모든 모듈의 모든 프로시저에서 접근 가능(선택) 기본적으로 모든 프로시저는 Public 이다. Sub ProcessDate() = Public Sub ProcessDate() 모듈에 Option Private Module문이 사용되면 다른 프로젝트에서 접근 불가(모듈내 모든 프로시저를 private화) 매크로 기록기로 기록하여 생성된 프로시저는 Public Sub이다. |
Private | 현재 모듈의 모든 프로시저에서 접근 가능(선택) 매크로 대화상자에 표시되지 않는다. |
Friend | Optional. Used only in a class module. Indicates that the Sub procedure is visible throughout the project, but not visible to a controller of an instance of an object. |
Static | 호출이 종료되더라도 프로시저 내에서 선언된 변수의 값이 유지된다. Static 속성은 procedure 에서 사용되더라도 Sub 외부에서 선언된 변수에 영향을 주지 않습니다.(선택) |
함수명 | Sub procesure의 이름, 변수명명법 따름, [동사 + 명사] 형식으로 작명하라!!! |
인수 | 프로시저에 전달되는 인수, 쉼표( , )로 구분되며, 인수가 없을 시 빈 가로[ ( ) ]만 입력 |
■ 서브 프로시저 실행하는 방법
1. VBE 「실행 > Sub/사용자 정의 폼 실행」 ' F5 key 기능
=> 커서가 위치한 프로시저를 실행하고 부정확시 매크로 대화상자를 뛰운다.
2. 매크로 대화상자에서 실행 , 바로가기키가 설정된다면 바로가기키 사용 가능(인수를 사용하지 않는 프로시저만 가능)
=> 「개발도구 > 코드 > 매크로」 ' Alt + F8
매크로 위치를 조정하여 표시되는 매크로를 조정 가능
※ 다음 프로시저는 표시되지 않는다.
- Function Processure
- Private Sub Processure
- 하나 이상의 인수를 사용하는 Sub Processure
- 추가 기능에 포함된 서브 프로시저
※ 바로가기키 지정
[주의] 이미 사용 중인 키를 입력하면 이 키는 더이상 사용 불가
Ctrl + Shif + [ f , l , n , o , p , w 를 제외한 문자 ]
3. 워크시트의 양식/Active컨트롤, 삽입개체(도형, SmartArt, WordArt, 차트, 그림)에 프로시저 연결하여 사용
4. 실행 중인 프로시저에서 다른 프로시저 호출 사용
※ 다른 프로시저 호출하는 방법
- 프로시저이름 인수1 , 인수2 , .... = > 기본적으로 반환값이 없으므로 ( ) 미사용
- [ Call ] 프로시저이름 ( 인수1 , 인수2 , ...... )
- Application.run "프로시저명" , "인수1" , "인수2" , .....
: 프로시저의 이름이 변수에 저장되어 있는 프로시저를 실행할 유일한 방법
전달 인수의 종류 - 문자열, 숫자, 변수등 프로시저 인수
Sub Main() Dim SubToCall As String Select Case Weekday(Date) Case 1, 7 SubToCall = "WeekEnd" Case Else SubToCall = "Daily" End Select Application.Run SubToCall End Sub |
Sub WeekEnd() Debug.Print "Today is a weekend" End Sub Sub Daily() Debug.Print "Today is not a weekend" End Sub |
※ 다른 모듈에 있는 프로시저 호출하기
: 동일 이름의 프로시저(Public Sub)가 다른 모듈에 존재한다면 동일 모듈에 있는 프로시저가 우선한다.
[ Call ] 모듈명 . 프로시저명
※ 다른 통합문서에 있는 프로시저 호출하기
▶ 다른 통합문서에 참조를 설정해서 호출하기( 참조되는 통합문서가 닫혀 있어도 참조 가능)
1) 참조를 설정한다.
: VBE 도구 > 참조
▼ 참조되는 통합문서가 열려 있지 않아도 별도의 개체 라이브러리처럼 취급되어 참조 가능
-> 찾아보기 버튼을 이용하여 현재 열려있지 않는 통합문서를 선택가능
2) 프로시저 호출한다.
[ Call ] 프로시저명
[ [ Call ] 프로젝트명. 모듈명. ] 프로시저명
▶ Application.Run 이용 ( 통합문서가 열려 있어야 적용 가능 ) => 인수에 ( ) 없다
공백없는 파일명 : Application.Run " 파일명 ! 프로시저명 "
공백있는 파일명 : Application.Run " ' 파일명 ' ! 프로시저명"
Application.Run "'budget macro.xlsm' ! OpenFile"
5. 리본 메뉴의 사용자 지정 컨트롤 사용 실행
6. 사용자 지정 바로가기 메뉴
7. Event가 발생 시 프로시저 실행(이벤트 프로시저)
: 이벤트가 발생하는 개체에 연결된 개체 모듈에 프로시저 저장됨
개체이름_이벤트명
Private Sub Workbook_Open()
8. 직접실행창에서 호출 실행
Debug.print 프로시저명
[ Optional ] [ ByVal | ByRef ] [ ParamArray ] 인수이름 [ ( ) ] [ As type ] [ = defaultvalue ]
Optional | Optional. Keyword indicating that an argument is not required. If used, all subsequent arguments in arglist must also be optional and declared by using the Optional keyword. Optional can't be used for any argument if ParamArray is used. |
ByVal | 원래의 변수값을 복사해서 전달, 프로시져에서 인수의 값을 변경해도 원래의 변수 값이 변경되지 않음. |
ByRef | Visual Basic 기본 전달 방식, 변수의 메모리 주소를 전달하므로 프로시져에서 인수의 값을 변경하면 원래의 변수 값이 변경된다. |
ParamArray | Optional. Used only as the last argument in arglist to indicate that the final argument is an Optional array of Variant elements. The ParamArray keyword allows you to provide an arbitrary number of arguments. ParamArray can't be used with ByVal, ByRef, or Optional. |
인수명 | Required. Name of the variable representing the argument; follows standard variable naming conventions. |
type | Optional. Data type of the argument passed to the procedure; may be Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (not currently supported), Date, String (variable-length only), Object, Variant, or a specific object type. If the parameter is not Optional, a user-defined type may also be specified. |
defaultvalue | Optional. Any constant or constant expression. Valid for Optional parameters only. If the type is an Object, an explicit default value can only be Nothing. |
Sub Main() Dim MyValue As Integer MyValue = 10 Call Process(MyValue) Debug.Print MyValue ' 10 Call Process1(MyValue) Debug.Print MyValue ' 100 End Sub |
Sub Process(ByVal YourValue) YourValue = YourValue * 10 End Sub Sub Process1(YourValue) YourValue = YourValue * 10 End Sub |
'VBA' 카테고리의 다른 글
[Excel][VBA] Function Procesure(함수 프로시저) (0) | 2021.11.23 |
---|---|
[Excel][VBA] Sub Procesure 작성 실전 (0) | 2021.11.23 |
[Excel][VBA] 텍스트 파일 조작하기 (0) | 2021.11.22 |
[Excel][VBA] 특정셀 찾기 (0) | 2021.11.22 |
[Excel][VBA] 코드 실행 순서 제어 (0) | 2021.11.22 |
- Total
- Today
- Yesterday
- 개체
- 차트 레이블 추가
- 사용자 정의 함수 재계산
- for each
- vba
- 참조
- bubble sort
- Application.InputBox
- 함수 프로시저
- 강제 재계산
- 원본 데이터
- inputbox
- 함수 재계산
- 워크시트 함수 재계산
- Function Procesure
- 프로시저 작성 실전
- 차트 서식변경
- EnableCancelKey
- ProtectStructure
- 배열
- WorkSheet Sort
- 적용 범위
- 사용자 정의 함수 사용 예
- Option Compare Text
- 프로시저 호출
- comment.text
- 사용자 정의 함수
- function함수 예외
- Screenupdating
- Excel
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |