글 수 65
▶ 매크로를 자동기록한뒤 도구모음에서 Visual Basic을 추가한뒤
Visual Basic Editor를 실행시킨다.
소스 코드를 찾아서.. 적당히 수정한다.
이때.. 상대 셀 참조는 다음과 같다.
ActiveCell.Offset(0, 1).Range("A1").Select
A1셀을 기준으로 해서 현재 선택된 셀에서 세로로 이동 하지 않고 오르쪽으로 1칸 이동 후 셀을 선택하라는 의미다.
ActiveCell.Offset(2, 0).Range("A1").Select
위의 건 무엇이겠는가? 세로로 2칸 아래로 이동하라는 의미다.
그런 다음 도구모음에 컨트롤 도구 상자를 추가한다.
버튼을 엑셀 시트상에 만들고 디자인 모드에서 더블 클릭하면 명령을 입력할 수 있다.
자동기록했던 명령을 써준다. 이때 뒤에 ()는 필요없다.
만약
Sub BGupDown()
'
' BGupDown Macro
' h9이(가) 2003-09-29에 기록한 매크로
'
' 바로 가기 키: Ctrl+Shift+Q
'
ActiveCell.FormulaR1C1 = "BG"
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.FormulaR1C1 = "UP ~ DOWN"
ActiveCell.Offset(2, 0).Range("A1").Select
End Sub
이런 명령을 기록했다면 그냥 BGupDown이라고 써주면 버튼에 명령이 할당된다.
Private Sub BGupDown_Click()
BGupDown
End Sub
이제 디자인 모드에서 빠져나오면 버튼이 활성화 된다.
(디자인 모드를 빠져나오는 방법은 visual basic도구상자에 맨 위에 위치한 자와 연필이 함께 있는 아이콘을 비 활성화 시키는 것이다.)
▶ 대화상자 나타내기
양식변경확인 = MsgBox("현재양식이 통지서 인쇄프로그램용 양식입니다. " & Chr(10) & "新연명부양식으로 변경하시겠습니까?", 36, "양식변경여부 확인")
If (양식변경확인 = vbYes) Then
신연명부양식
End If
-----> 설명 : & Chr(10) &이 부분을 보면 &는 문자열을 연결해준다는 의미고, Chr(10)은 Visual Basic에서 개행문자를 의미한다. 즉, 한줄 내려쓴다는 말이다. 뒷 부분에 숫자 36이 있는데, 이것은 yes버튼과 no버튼만 창에 나타내겠다는 말이다.
if조건문에서 yes를 눌렀을때의 이벤트를 정의한다. 만약 no를 눌렀을때를 정의하고 싶으면 '양식변경확인 = vbYes' 부분을 '양식변경확인 = vbNo' 로 고쳐주면 된다.
▶ 파일 열기 창 보여주기
open_name = Application.GetOpenFilename
Workbooks.Open FileName:=open_name, _
ReadOnly:=True
----> 설명 : 그냥 외워야하는 부분이다.(매크로 기록을 하면 자동으로 기록된다. 읽기전용 옵션을 제외하고) ReadOnly:=True 옵션은 읽기 전용으로 문서를 읽는다는 의미이다.
Workbooks.Open FileName:=open_name, _
ReadOnly:=True
이 부분에서 첫줄에 언더바(_)가 있는데, 이것은 소스가 길어질때 아래와 이어진다는 의미이다.
그래서 다시 쓰면
Workbooks.Open FileName:=open_name, ReadOnly:=True
와 똑같은 의미이다. 소스를 보기좋게 할때 종종 쓰이는 기법이다.
▶ 매크로 에러시 대처하기.. 메시지창 띄우기..
On Error GoTo a:
If (xx = "some") Then
a: b = MsgBox("동2000을 실행시키십시오."): End
End If
▶ 문서가 열릴때마다 자동으로 실행되게 하기..
(function 이름을 Auto_Open으로 해주면 된다. 여기서 쓰인 기능은 상태표시줄을 변경해주는 기능이다.)
Sub Auto_Open() '시작될때마다 자동으로 실행되는 함수입니다.
Application.StatusBar = "단축키:칸넓이조절(Ctrl+I),인쇄환경(Ctrl+M),셀합치기(Ctrl+Shift+S),셀삽입(Ctrl+Shift+Z),목록정렬(Ctrl+J)"
End Sub
▶ 문서가 닫일때마다 자동으로 실행되게 하기..
(function 이름을 Auto_Close으로 해주면 된다. 여기서 쓰인 기능은 상태표시줄을 공백으로 돌려준다.)
Sub Auto_Close()
팝업메뉴제거
팝_잔산화제거
Application.StatusBar = ""
End Sub
▶ 다이얼로그 시트를 화면에 보여주는 요령.
여기서 주목해야 할것은 Else부분에 End 부분이다. 현재 function을 종료 시킬 경우에는 End만 써준다.
If DialogSheets("Config").Show Then
Sheets("전산관리법").Select
저장여부 = MsgBox("중대설정의 변경내용을 저장하십시오", 36, "저장 권고창")
If (저장여부 = vbYes) Then
ActiveWorkbook.Save
End If
Else
Sheets("전산관리법").Select
End
End If
▶ 특정 셀을 선택한 상태에서 자동채우기 하는 기법이다. 잔머리를 굴린 결과다.. 이것은 본인이 생각한 것이고 더 좋은 방법이 있을 수 있다. 설명은 다음 기회에.. ㅎㅎ
Sub 자동채우기()
' Range("F2").Select
' ActiveCell.FormulaR1C1 = "=IF(RC[1]=R[-1]C[1],R[-1]C+1,1)"
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = "=ROWS(Database)"
data_rows = ActiveCell.Value
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = "=COLUMN()"
data_cols = ActiveCell.Value
ActiveCell.Offset(-2, 0).Range("A1").Select
Selection.AutoFill Destination:=Range(Cells(2, data_cols), Cells(data_rows, data_cols)), Type:=xlFillDefault
End Sub
▶ Not 비교 연산자와 조건분기문..
Not비교 연산자는 <>이다. ElseIf를 반복해서 사용할 수있음을 주목하자.
끝나는 부분은 End If이다.
If (flag <> "") Then
--------
ElseIf
--------
Else
--------
End If
▶ 전역변수 설정하는 법
가장 위쪽에 써주면 된다. Sub----End Sub에 들어가지 않는다. 그러면 모든 Sub함수에서 호출해서 사용가능하다.
Const menuname As String = "예비군업무전산화"
▶ 도구 모음을 추가하는 법..
시간날때 자세히 설명하기로 하자..
Sub 팝메뉴_전산화()
Dim PopMenu As CommandBar
Dim btnMutiPivot As CommandBarButton
Dim btnJunPyun As CommandBarButton
Dim btnSJAlign As CommandBarButton
Set PopMenu = CommandBars.Add
팝_잔산화제거
PopMenu.Name = menuname
PopMenu.Position = msoBarTop
With PopMenu.Controls
Set btnMutiPivot = .Add(msoControlButton)
With btnMutiPivot
.Style = msoButtonIconAndCaption
.Caption = "전투편성명부제작"
.FaceId = 36
.TooltipText = "전투편성명부 제작"
.Visible = True
.OnAction = "전투편성명부"
End With
Set btnSJAlign = .Add(msoControlButton)
With btnSJAlign
.Style = msoButtonIconAndCaption
.Caption = "목록정렬"
.FaceId = 37
.TooltipText = "한눈에 알아보기 쉽게 목록을 정렬한다."
.Visible = True
.OnAction = "목록정렬"
End With
Set btnJunPyun = .Add(msoControlButton)
With btnJunPyun
.Style = msoButtonIconAndCaption
.Caption = "메신저콜입력양식"
.FaceId = 50
.TooltipText = "메신저콜입력양식으로 변경한다."
.Visible = True
.OnAction = "팝_메신저콜입력"
End With
Set btnMutiPivot = .Add(msoControlButton)
With btnMutiPivot
.BeginGroup = True
.Style = msoButtonIconAndCaption
.Caption = "칸넓이자동조절"
.FaceId = 43
.TooltipText = "화면에 보이는 칸만 셀넓이를 자동 조절합니다."
.Visible = True
.OnAction = "보이는칸만"
End With
Set btnJunPyun = .Add(msoControlButton)
With btnJunPyun
.Style = msoButtonIconAndCaption
.Caption = "계급연차 분류"
.FaceId = 44
.TooltipText = "계급/연차를 구간별로 분류한다."
.Visible = True
.OnAction = "분류판단"
End With
Set btnSJAlign = .Add(msoControlButton)
With btnSJAlign
.Style = msoButtonIconAndCaption
.Caption = "소속/직책별 정렬"
.FaceId = 53
.TooltipText = "소속 직책별로 정렬한다."
.Visible = True
.OnAction = "소속직책별정렬"
End With
End With
PopMenu.Visible = True
End Sub
'Sub Auto_Open()
' 중대설정실행
' If (Application.Version = 9) Then
' Application.AltStartupPath = "C:Program FilesDong2000Codatamacro"
' End If
'End Sub
Sub 팝_잔산화제거()
Dim mnuUser As CommandBarControl
On Error Resume Next
CommandBars(menuname).Delete
For Each mnuUser In CommandBars("Menu Bar").Controls
If mnuUser.Caption = menuname Then mnuUser.Delete
Next
End Sub
▶ 도구모음을 제거하는 법
Sub 팝업메뉴제거()
Dim mnuUser As CommandBarControl
On Error Resume Next
CommandBars(menuname).Delete
For Each mnuUser In CommandBars("Menu Bar").Controls
If mnuUser.Caption = menuname Then mnuUser.Delete
Next
End Sub
▶
▶
▶
▶
Visual Basic Editor를 실행시킨다.
소스 코드를 찾아서.. 적당히 수정한다.
이때.. 상대 셀 참조는 다음과 같다.
ActiveCell.Offset(0, 1).Range("A1").Select
A1셀을 기준으로 해서 현재 선택된 셀에서 세로로 이동 하지 않고 오르쪽으로 1칸 이동 후 셀을 선택하라는 의미다.
ActiveCell.Offset(2, 0).Range("A1").Select
위의 건 무엇이겠는가? 세로로 2칸 아래로 이동하라는 의미다.
그런 다음 도구모음에 컨트롤 도구 상자를 추가한다.
버튼을 엑셀 시트상에 만들고 디자인 모드에서 더블 클릭하면 명령을 입력할 수 있다.
자동기록했던 명령을 써준다. 이때 뒤에 ()는 필요없다.
만약
Sub BGupDown()
'
' BGupDown Macro
' h9이(가) 2003-09-29에 기록한 매크로
'
' 바로 가기 키: Ctrl+Shift+Q
'
ActiveCell.FormulaR1C1 = "BG"
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.FormulaR1C1 = "UP ~ DOWN"
ActiveCell.Offset(2, 0).Range("A1").Select
End Sub
이런 명령을 기록했다면 그냥 BGupDown이라고 써주면 버튼에 명령이 할당된다.
Private Sub BGupDown_Click()
BGupDown
End Sub
이제 디자인 모드에서 빠져나오면 버튼이 활성화 된다.
(디자인 모드를 빠져나오는 방법은 visual basic도구상자에 맨 위에 위치한 자와 연필이 함께 있는 아이콘을 비 활성화 시키는 것이다.)
▶ 대화상자 나타내기
양식변경확인 = MsgBox("현재양식이 통지서 인쇄프로그램용 양식입니다. " & Chr(10) & "新연명부양식으로 변경하시겠습니까?", 36, "양식변경여부 확인")
If (양식변경확인 = vbYes) Then
신연명부양식
End If
-----> 설명 : & Chr(10) &이 부분을 보면 &는 문자열을 연결해준다는 의미고, Chr(10)은 Visual Basic에서 개행문자를 의미한다. 즉, 한줄 내려쓴다는 말이다. 뒷 부분에 숫자 36이 있는데, 이것은 yes버튼과 no버튼만 창에 나타내겠다는 말이다.
if조건문에서 yes를 눌렀을때의 이벤트를 정의한다. 만약 no를 눌렀을때를 정의하고 싶으면 '양식변경확인 = vbYes' 부분을 '양식변경확인 = vbNo' 로 고쳐주면 된다.
▶ 파일 열기 창 보여주기
open_name = Application.GetOpenFilename
Workbooks.Open FileName:=open_name, _
ReadOnly:=True
----> 설명 : 그냥 외워야하는 부분이다.(매크로 기록을 하면 자동으로 기록된다. 읽기전용 옵션을 제외하고) ReadOnly:=True 옵션은 읽기 전용으로 문서를 읽는다는 의미이다.
Workbooks.Open FileName:=open_name, _
ReadOnly:=True
이 부분에서 첫줄에 언더바(_)가 있는데, 이것은 소스가 길어질때 아래와 이어진다는 의미이다.
그래서 다시 쓰면
Workbooks.Open FileName:=open_name, ReadOnly:=True
와 똑같은 의미이다. 소스를 보기좋게 할때 종종 쓰이는 기법이다.
▶ 매크로 에러시 대처하기.. 메시지창 띄우기..
On Error GoTo a:
If (xx = "some") Then
a: b = MsgBox("동2000을 실행시키십시오."): End
End If
▶ 문서가 열릴때마다 자동으로 실행되게 하기..
(function 이름을 Auto_Open으로 해주면 된다. 여기서 쓰인 기능은 상태표시줄을 변경해주는 기능이다.)
Sub Auto_Open() '시작될때마다 자동으로 실행되는 함수입니다.
Application.StatusBar = "단축키:칸넓이조절(Ctrl+I),인쇄환경(Ctrl+M),셀합치기(Ctrl+Shift+S),셀삽입(Ctrl+Shift+Z),목록정렬(Ctrl+J)"
End Sub
▶ 문서가 닫일때마다 자동으로 실행되게 하기..
(function 이름을 Auto_Close으로 해주면 된다. 여기서 쓰인 기능은 상태표시줄을 공백으로 돌려준다.)
Sub Auto_Close()
팝업메뉴제거
팝_잔산화제거
Application.StatusBar = ""
End Sub
▶ 다이얼로그 시트를 화면에 보여주는 요령.
여기서 주목해야 할것은 Else부분에 End 부분이다. 현재 function을 종료 시킬 경우에는 End만 써준다.
If DialogSheets("Config").Show Then
Sheets("전산관리법").Select
저장여부 = MsgBox("중대설정의 변경내용을 저장하십시오", 36, "저장 권고창")
If (저장여부 = vbYes) Then
ActiveWorkbook.Save
End If
Else
Sheets("전산관리법").Select
End
End If
▶ 특정 셀을 선택한 상태에서 자동채우기 하는 기법이다. 잔머리를 굴린 결과다.. 이것은 본인이 생각한 것이고 더 좋은 방법이 있을 수 있다. 설명은 다음 기회에.. ㅎㅎ
Sub 자동채우기()
' Range("F2").Select
' ActiveCell.FormulaR1C1 = "=IF(RC[1]=R[-1]C[1],R[-1]C+1,1)"
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = "=ROWS(Database)"
data_rows = ActiveCell.Value
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = "=COLUMN()"
data_cols = ActiveCell.Value
ActiveCell.Offset(-2, 0).Range("A1").Select
Selection.AutoFill Destination:=Range(Cells(2, data_cols), Cells(data_rows, data_cols)), Type:=xlFillDefault
End Sub
▶ Not 비교 연산자와 조건분기문..
Not비교 연산자는 <>이다. ElseIf를 반복해서 사용할 수있음을 주목하자.
끝나는 부분은 End If이다.
If (flag <> "") Then
--------
ElseIf
--------
Else
--------
End If
▶ 전역변수 설정하는 법
가장 위쪽에 써주면 된다. Sub----End Sub에 들어가지 않는다. 그러면 모든 Sub함수에서 호출해서 사용가능하다.
Const menuname As String = "예비군업무전산화"
▶ 도구 모음을 추가하는 법..
시간날때 자세히 설명하기로 하자..
Sub 팝메뉴_전산화()
Dim PopMenu As CommandBar
Dim btnMutiPivot As CommandBarButton
Dim btnJunPyun As CommandBarButton
Dim btnSJAlign As CommandBarButton
Set PopMenu = CommandBars.Add
팝_잔산화제거
PopMenu.Name = menuname
PopMenu.Position = msoBarTop
With PopMenu.Controls
Set btnMutiPivot = .Add(msoControlButton)
With btnMutiPivot
.Style = msoButtonIconAndCaption
.Caption = "전투편성명부제작"
.FaceId = 36
.TooltipText = "전투편성명부 제작"
.Visible = True
.OnAction = "전투편성명부"
End With
Set btnSJAlign = .Add(msoControlButton)
With btnSJAlign
.Style = msoButtonIconAndCaption
.Caption = "목록정렬"
.FaceId = 37
.TooltipText = "한눈에 알아보기 쉽게 목록을 정렬한다."
.Visible = True
.OnAction = "목록정렬"
End With
Set btnJunPyun = .Add(msoControlButton)
With btnJunPyun
.Style = msoButtonIconAndCaption
.Caption = "메신저콜입력양식"
.FaceId = 50
.TooltipText = "메신저콜입력양식으로 변경한다."
.Visible = True
.OnAction = "팝_메신저콜입력"
End With
Set btnMutiPivot = .Add(msoControlButton)
With btnMutiPivot
.BeginGroup = True
.Style = msoButtonIconAndCaption
.Caption = "칸넓이자동조절"
.FaceId = 43
.TooltipText = "화면에 보이는 칸만 셀넓이를 자동 조절합니다."
.Visible = True
.OnAction = "보이는칸만"
End With
Set btnJunPyun = .Add(msoControlButton)
With btnJunPyun
.Style = msoButtonIconAndCaption
.Caption = "계급연차 분류"
.FaceId = 44
.TooltipText = "계급/연차를 구간별로 분류한다."
.Visible = True
.OnAction = "분류판단"
End With
Set btnSJAlign = .Add(msoControlButton)
With btnSJAlign
.Style = msoButtonIconAndCaption
.Caption = "소속/직책별 정렬"
.FaceId = 53
.TooltipText = "소속 직책별로 정렬한다."
.Visible = True
.OnAction = "소속직책별정렬"
End With
End With
PopMenu.Visible = True
End Sub
'Sub Auto_Open()
' 중대설정실행
' If (Application.Version = 9) Then
' Application.AltStartupPath = "C:Program FilesDong2000Codatamacro"
' End If
'End Sub
Sub 팝_잔산화제거()
Dim mnuUser As CommandBarControl
On Error Resume Next
CommandBars(menuname).Delete
For Each mnuUser In CommandBars("Menu Bar").Controls
If mnuUser.Caption = menuname Then mnuUser.Delete
Next
End Sub
▶ 도구모음을 제거하는 법
Sub 팝업메뉴제거()
Dim mnuUser As CommandBarControl
On Error Resume Next
CommandBars(menuname).Delete
For Each mnuUser In CommandBars("Menu Bar").Controls
If mnuUser.Caption = menuname Then mnuUser.Delete
Next
End Sub
▶
▶
▶
▶