_ 코스 예약 양식은 사용자 양식 디자인의 원칙과 관련 VBA 코딩을 보여주는 간단한 양식입니다 ._

_ 텍스트 상자, 콤보 상자, 프레임으로 그룹화 된 옵션 단추, 확인란 및 명령 단추를 포함한 다양한 컨트롤을 사용합니다 ._

_ 사용자가 확인 버튼을 클릭하면 입력 내용이 워크 시트의 다음 사용 가능한 행에 입력됩니다 ._

엑셀 형식 설명 :

사용자가 자유 텍스트를 입력 할 수있는 두 개의 간단한 텍스트 상자 (Name : _ 및 _Phone : _)와 두 개의 콤보 상자 (_DepartmentCourse)

사용자가 목록에서 항목을 선택할 수 있도록합니다.

3 개의 옵션 버튼 (Introduction, IntermediateAdvanced)이 프레임 (Level)에 그룹화되어있어 사용자가 옵션 중 하나만 선택할 수 있습니다.

두 개의 체크 박스 (Lunch RequiredVegetarian)가 있으며, 프레임에 그룹화되어 있지 않기 때문에 필요한 경우 둘 다 선택할 수 있습니다.

그러나 예약 한 사람이 점심을 원하지 않는 경우 채식 여부를 알 필요가 없습니다. 따라서 Vegetarian 확인란은 필요할 때까지 회색으로 표시됩니다.

세 개의 명령 버튼 (OK, CancelClear Form)이 있으며, 각각을 클릭하면 미리 정의 된 기능을 수행합니다.

컨트롤 속성 설정 :

Control

Type

Property

Setting

UserForm

UserForm

Name

frmCourseBooking

Caption

Course Booking Form

Name

Text Box

Name

txtName

Phone

Text Box

Name

txtPhone

Department

Combo Box

Name

cboDepartment

Course

Combo Box

Name

cboCourse

Level

Frame

Name

fraLevel

Caption

Level

Introduction

Option Button

Name

optIntroduction

Intermediate

Option Button

Name

optIntermediate

Advanced

Option Button

Name

optAdvanced

Lunch Required

Check Box

Name

chkLunch

Vegetarian

Check Box

Name

chkVegetarian

Enabled

False

OK

Command Button

Name

cmdOk

Caption

OK

Default

True

Cancel

Command Button

Name

cmdCancel

Caption

Cancel

Cancel

True

Clear Form

Command Button

Name

cmdClearForm

=== Excel에서 양식 만들기 양식을 직접 작성하려면 위 그림에 표시된 레이아웃을 복사하면됩니다. 아래 단계를 따르십시오.

  1. 양식이 속할 통합 문서를 열고 (매크로와 같은 사용자 양식을 통합 문서에 첨부해야 함) Visual Basic Editor로 전환합니다.

  2. Visual Basic Editor에서 Insert UserForm 단추를 클릭합니다 (또는 Insert> UserForm으로 이동).

  3. 도구 상자가 저절로 나타나지 않으면 (먼저 양식을 클릭하여 숨겨져 있지 않은지 확인) 도구 상자 단추를 클릭합니다 (또는보기> 도구 상자로 이동).

  4. 양식에 컨트롤을 배치하려면 도구 상자에서 해당 단추를 클릭 한 다음 양식을 클릭합니다. 컨트롤은 가장자리로 드래그하여 이동하거나 둘레 주변의 버튼을 드래그하여 크기를 조정할 수 있습니다.

  5. 컨트롤의 속성을 편집하려면 선택한 컨트롤이 선택되었는지 확인한 다음 속성 창에서 적절하게 변경합니다. 속성 창이 보이지 않으면보기> 속성 창으로 이동합니다.

  6. 양식에서 컨트롤을 제거하려면 컨트롤을 선택하고 키보드에서 Delete 키를 클릭합니다.

UserForm은 폼을 구동하는 코드와 다양한 컨트롤이 만들어 질 때까지 실제로 아무것도하지 않습니다. 다음 단계는 양식 자체를 구동하는 코드를 작성하는 것입니다.

코드 추가 : 1 양식 초기화 === == 양식 초기화 :

대부분의 양식은 열 때 일종의 설정이 필요합니다. 이것은 기본값을 설정하거나 필드가 비어 있는지 확인하거나 콤보 상자 목록을 작성하는 것일 수 있습니다. 이 프로세스를 _Initialising the Form_이라고하며 UserForm_Initialize라는 매크로에 의해 처리됩니다. 걱정하지 마세요. VBA가 철자를 해줄 것입니다!). 과정 예약 양식을 초기화하는 코드를 작성하는 방법은 다음과 같습니다.

  1. 양식의 코드 창을 보려면보기> 코드로 이동하거나 F7을 클릭합니다.

  2. 코드 창이 처음 열리면 빈 UserForm_Click () 프로 시저가 포함됩니다. 코드 창 상단에있는 드롭 다운 목록을 사용하여 UserForm 및 Initialize를 선택합니다. 그러면 필요한 절차가 생성됩니다. 이제 UserForm_Click () 프로 시저를 삭제할 수 있습니다.

  3. 절차에 다음 코드를 입력합니다.

Private Sub UserForm_Initialize()

txtName.Value = ""

txtPhone.Value = ""

With cboDepartment

.AddItem "Sales"

.AddItem "Marketing"

.AddItem "Administration"

.AddItem "Design"

.AddItem "Advertising"

.AddItem "Dispatch"

.AddItem "Transportation"

End With

cboDepartment.Value = ""

With cboCourse

.AddItem "Access"

.AddItem "Excel"

.AddItem "PowerPoint"

.AddItem "Word"

.AddItem "FrontPage"

End With

cboCourse.Value = ""

optIntroduction = True

chkLunch = False

chkVegetarian = False

txtName.SetFocus

End Sub

초기화 코드 작동 방식 :

UserForm_Initialize () 프로 시저의 목적은 VBA에서 사용할 사용자 양식을 준비하고 다양한 컨트롤에 대한 기본값을 설정하고 콤보 상자에 표시 할 목록을 만드는 것입니다.

다음 줄은 두 텍스트 상자의 내용을 비워 둡니다.

txtName.Value = ""

txtPhone.Value = ""

다음은 콤보 상자에 대한 지침입니다. 먼저 목록의 모든 내용이 지정된 다음 콤보 상자의 초기 값이 비어 있음으로 설정됩니다.

With cboDepartment

.AddItem "Sales"

.AddItem "Marketing"

(as many as necessary…)

End With

cboDepartment.Value = “”

필요한 경우 옵션 그룹에서 초기 선택을 할 수 있습니다.이 경우 :

optIntroduction = True 두 확인란 모두 False로 설정됩니다 (즉, 체크 표시 없음). 확인란이 이미 선택되어 표시되도록하려면 True로 설정하십시오.

chkLunch = False chkVegetarian = False 마지막으로 포커스가 첫 번째 텍스트 상자로 이동합니다. 그러면 사용자가 입력을 시작하기 전에 상자를 클릭 할 필요가 없도록 텍스트 상자에 사용자 커서가 배치됩니다.

txtName.SetFocus === 코드 추가 : 2 버튼 작동하기 양식에는 세 개의 명령 버튼이 있으며 각각 자체 절차에 따라 작동해야합니다. 간단한 것부터 시작해…

취소 버튼 코딩 :

이전에는 속성 창을 사용하여 취소 버튼의 취소 속성을 _True_로 설정했습니다. 명령 단추의 취소 속성을 True로 설정하면 사용자가 키보드에서 Esc 키를 누를 때 해당 단추를 “클릭”하는 효과가 있습니다. 그러나 이것만으로는 양식에 아무 일도 일어나지 않습니다. 이 경우 양식을 닫을 단추의 클릭 이벤트에 대한 코드를 만들어야합니다. 방법은 다음과 같습니다.

  1. Visual Basic Editor에서 편집을 위해 사용자 정의 폼을 연 상태에서 취소 버튼을 두 번 클릭합니다. cmdCancel_Click () 프로 시저를 편집 할 준비가 된 상태로 양식의 코드 창이 열립니다.

  2. 양식을 닫는 코드는 매우 간단합니다. 다음과 같이 보이도록 프로 시저에 코드 줄을 추가합니다.

Private Sub cmdCancel_Click()

Unload Me

End Sub

양식 지우기 버튼 코딩 :

사용자가 마음을 바꾸고 모든 것을 재설정하려는 경우 양식을 지우고 한 번에 여러 예약을 할 경우 더 쉽게 만들 수있는 버튼을 추가했습니다. 초기화 절차를 다시 실행하기 만하면됩니다. Call 키워드를 사용하여 매크로가 다른 매크로 (또는 필요한 경우 일련의 매크로)를 실행하도록 지시 할 수 있습니다.

  1. Clear Form 버튼을 더블 클릭합니다. 편집 할 준비가 된 cmdClearForm_Click () 프로 시저와 함께 양식의 코드 창이 열립니다.

  2. 다음과 같이 보이도록 프로 시저에 코드 줄을 추가합니다.

Private Sub cmdClearForm_Click()

Call UserForm_Initialize

End Sub

확인 버튼 코딩 :

이것은 사용자의 선택과 텍스트 입력을 워크 시트에 전송하는 작업을 수행해야하는 코드입니다. Cancel 버튼의 Cancel 속성을 True로 설정하면 OK 버튼의 Default 속성도 _True_로 설정됩니다. 사용자가 키보드에서 Enter (또는 Return) 키를 누를 때 확인 버튼을 클릭해야합니다 (Tab 키를 사용하여 다른 버튼으로 이동하지 않은 경우).

버튼을 작동시키는 코드는 다음과 같습니다.

  1. 확인 버튼을 더블 클릭합니다. 편집 할 준비가 된 cmdOK_Click () 프로 시저와 함께 양식의 코드 창이 열립니다.

  2. 절차를 편집하여 다음 코드를 추가합니다.

Private Sub cmdOK_Click()

ActiveWorkbook.Sheets("Course Bookings").Activate

Range("A1").Select

Do

If IsEmpty(ActiveCell) = FalseThen

ActiveCell.Offset(1, 0).Select

End If

Loop Until IsEmpty(ActiveCell) = True

ActiveCell.Value = txtName.Value

ActiveCell.Offset(0, 1) = txtPhone.Value

ActiveCell.Offset(0, 2) = cboDepartment.Value

ActiveCell.Offset(0, 3) = cboCourse.Value

If optIntroduction = True Then

ActiveCell.Offset(0, 4).Value = "Intro"

ElseIf optIntermediate = True Then

ActiveCell.Offset(0, 4).Value = "Intermed"

Else

ActiveCell.Offset(0, 4).Value = "Adv"

End If

If chkLunch = True Then

ActiveCell.Offset(0, 5).Value = "Yes"

Else

ActiveCell.Offset(0, 5).Value = "No"

End If

If chkVegetarian = True Then

ActiveCell.Offset(0, 6).Value = "Yes"

Else

If chkLunch = False Then

ActiveCell.Offset(0, 6).Value = ""

Else

ActiveCell.Offset(0, 6).Value = "No"

End If

End If

Range("A1").Select

End Sub

CmdOK_Click 코드 작동 방식 :

처음 두 줄은 올바른 통합 문서가 활성 상태인지 확인하고 선택 항목을 A1 셀로 이동합니다.

ActiveWorkbook.Sheets("Course Bookings").Activate

Range("A1").Select

The next few lines moves the selection down the worksheet until it finds an empty cell:

Do

If IsEmpty(ActiveCell) = False Then

ActiveCell.Offset(1, 0).Select

End If

Loop Until IsEmpty(ActiveCell) = True

다음 네 줄은 활성 셀 (A 열에 있음)을 참조로 사용하고 한 번에 한 셀씩 _ 행을 따라 _ 이동하면서 워크 시트에 양식의 내용을 쓰기 시작합니다.

ActiveCell.Value = txtName.Value

ActiveCell.Offset(0, 1) = txtPhone.Value

ActiveCell.Offset(0, 2) = cboDepartment.Value

ActiveCell.Offset(0, 3) = cboCourse.Value

이제 옵션 버튼으로 이동합니다. 사용자가 하나만 선택할 수 있도록 양식의 프레임에 배치되었습니다. IF 문은 각 옵션에 대한 작업을 Excel에 지시하는 데 사용됩니다.

If optIntroduction = True Then

ActiveCell.Offset(0, 4).Value = "Intro"

ElseIf optIntermediate = True Then

ActiveCell.Offset(0, 4).Value = "Intermed"

Else

ActiveCell.Offset(0, 4).Value = "Adv"

End If

VBA IF 문은 Excel의 IF 함수보다 관리하기가 훨씬 쉽습니다.

원하는만큼의 옵션을 가질 수 있습니다. 각각에 대해 추가 ElseIf를 삽입하기 만하면됩니다. 두 가지 옵션 만 있다면 ElseIf가 필요하지 않을 것입니다. If 및 Else 만 있으면 충분합니다 (모두 End If가 필요합니다).

각 확인란에 대해 또 다른 IF 문이 있습니다. 점심 필요 확인란의 경우 상자의 체크 표시는 “예”를 의미하며, 체크 표시가 없으면 점심이 필요하지 않음을 의미합니다.

If chkLunch = True Then

ActiveCell.Offset(0, 5).Value = "Yes"

Else

ActiveCell.Offset(0, 5).Value = "No"

End If

채식주의 자 확인란에 대해 유사한 IF 문을 사용할 수 있지만, 점심이 필요하지 않은 사람은 채식주의 자 여부와 무관합니다. 어쨌든, 그들이 점심을 필요로하지 않았기 때문에 채식주의자가 아니라고 가정하는 것은 잘못된 것입니다. 따라서 IF 문에는 두 번째 중첩 if 문이 포함됩니다.

If chkVegetarian = True Then

ActiveCell.Offset(0, 6).Value = "Yes"

Else

If chkLunch = False Then

ActiveCell.Offset(0, 6).Value = ""

Else

ActiveCell.Offset(0, 6).Value = "No"

End If

End If

상자의 체크 표시는 “예”를 의미합니다. 그 사람은 채식주의 자입니다. 상자에 체크 표시가 없으면 중첩 된 IF 문은 점심 필요 확인란을 확인합니다. 점심 필요 확인란에 틱이있는 경우 채식주의 자 확인란에 틱이 없으면 해당 사람이 채식주의자가 아니므로 셀에 “아니오”를 삽입합니다. 그러나 점심 필요 확인란에 틱이없는 경우 해당 사람이 채식주의 자인지 여부를 알 수 없으므로 (어쨌든 상관 없음) 셀은 비워 둡니다 ( “”).

마지막으로 선택 항목이 워크 시트의 시작 부분으로 돌아가서 다음 항목을 입력 할 수 있습니다.

Range ( “A1”). Select === 코드 추가 3 : 폼 조작 마지막으로 폼의 컨트롤을 사용하는 동안 조작 할 수있는 방법의 예입니다. 컨트롤 속성이 설정되었을 때 채식주의 자 확인란의 Enabled 속성이 _False_로 설정되었습니다. 컨트롤이 활성화되지 않은 경우 _user_는 이미있는 값을 보유 할 수 있지만 값을 입력 할 수 없으며 VBA는 값을 추가, 제거 또는 변경할 수 있습니다.

점심을 주문하지 않는다면 그 사람이 채식주의 자인지 아닌지 알 필요가 없습니다. 따라서 점심 필요 확인란에 체크 표시를하지 않는 한 채식주의 자 확인란은 비활성화 된 상태로 유지됩니다. 그러면 사용자는 원하는 경우 채식주의 자 확인란을 자유롭게 선택할 수 있습니다. 그들이 체크하면 우리는 그들이 “예”라고 대답했다는 것을 알게 될 것이고, 그렇지 않으면 그들이 “아니오”라고 대답했다는 것을 압니다.

Lunch Required 확인란의 값이 변경 될 때마다 자동으로 실행되는 프로 시저를 사용하여 Enabled 속성을 False_에서 _True_로 전환 할 수 있습니다. 다행히 더 많은 컨트롤에는 _Change 프로 시저가 있으며 여기서 사용하는 컨트롤은 chkLunch_Change ()입니다. 점심 필요 확인란이 선택되어있을 때 채식 확인란을 활성화하고 점심 필요 확인란이 선택되어 있지 않으면 비활성화합니다.

우리가해야 할 일이 하나 더 있습니다. 누군가 점심 필요 확인란을 선택하고 채식주의 자 확인란도 선택했다고 가정합니다. 그런 다음 마음을 바꾸고 점심 필요 확인란에서 체크 표시를 제거했습니다. 채식주의 자 확인란은 비활성화되지만 이전에 입력 한 틱은 그대로 유지됩니다.

추가 코드 줄은 상자가 비활성화되었을 때 틱이 제거되도록 할 수 있습니다. 전체 내용은 다음과 같습니다.

Private Sub chkLunch_Change()

If chkLunch = True Then

chkVegetarian.Enabled = True

Else

chkVegetarian.Enabled = False

chkVegetarian = False

End If

End Sub

양식 열기 이제 양식을 사용할 준비가되었으므로 간단한 매크로로 열어야합니다. 사용자 지정 도구 모음 단추, 워크 시트에 그려진 명령 단추 또는 그래픽 (그래픽을 마우스 오른쪽 단추로 클릭하고 매크로 할당 선택)에 연결할 수 있습니다. 필요한 경우 통합 문서에 대한 새 모듈을 만들고 다음 절차를 추가합니다.

Sub OpenCourseBookingForm()

frmCourseBooking.Show

End Sub

_ 블로그가 마음에 들면 Facebook에서 친구들과 공유하세요. Twitter와 Facebook에서도 팔로우 할 수 있습니다 ._

_ 우리는 여러분의 의견을 듣고 싶습니다. 우리가 작업을 개선, 보완 또는 혁신하고 더 나은 서비스를 제공 할 수있는 방법을 알려주십시오. [email protected]_로 문의 해주세요