엑셀 VBA 대화 형 사용자 정의 폼
다음은 우리가 상호 작용하는 사용자 정의 폼을 만들어 엑셀 VBA에서 프로그램을 볼 것이다. 사용자 정의 폼 우리는 다음과 같은 모양을 만들려고하고있다 :
설명 : 사용자가 ID 텍스트 상자에 값을 입력 할 때마다, 엑셀 VBA는 해당 레코드를로드합니다. 당신은 편집 / 추가 버튼을 클릭하면, 엑셀 VBA 시트에 기록을 편집 또는 ID가 아직 존재하지 않는 레코드를 추가합니다. 지우기 버튼은 모든 텍스트 상자를 지 웁니다. 닫기 버튼을 사용자 정의 폼을 닫습니다.
이 정의 폼을 만들려면 다음 단계를 실행합니다.
-
Visual Basic 편집기. 프로젝트 탐색기가 보이지 않으면보기 프로젝트 탐색기를 클릭합니다.
삽입, 사용자 정의 폼을 클릭합니다. 도구 상자가 자동으로 나타나지 않으면,보기, 도구 상자를 클릭합니다. 화면은 다음과 같이 설정해야합니다.
(먼저 상단의 첫 번째 아래의 두 번째 등) 및 명령 단추 레이블, 텍스트 상자를 추가합니다. 이것이 완료되면, 그 결과는 앞서 도시 정의 폼의 화상과 일치한다. 예를 들어, 도구 상자에서 텍스트 상자를 클릭하여 텍스트 상자 컨트롤을 만듭니다. 다음으로, 당신은 사용자 정의 폼에 텍스트 상자를 드래그 할 수 있습니다.
-
이름과 컨트롤의 캡션을 변경할 수 있습니다. 이름은 엑셀 VBA 코드에 사용됩니다. 자막은 화면에 나타나는 것들이다. 이 컨트롤의 이름을 변경하는 것이 좋습니다,하지만 우리는이 예제에서 몇 가지 컨트롤을 가지고 있기 때문에 여기에 필요하지 않습니다. 레이블, 텍스트 상자 및 명령 단추의 캡션을 변경하려면,보기, 속성 창을 클릭하고 각 컨트롤을 클릭합니다.
-
사용자 정의 폼을 보여 워크 시트에 명령 단추를 배치하고 다음 코드 줄을 추가하려면 :
Private Sub CommandButton1_Click() UserForm1.Show End Sub
우리는 지금 하위 UserForm_Initialize을 만들 것입니다. 사용자 정의 폼에 대한 표시 방법을 사용하면,이 서브가 자동으로 실행됩니다.
-
Visual Basic 편집기.
프로젝트 탐색기 7. 오른쪽 UserForm1을 클릭 한 다음 코드보기를 클릭하십시오.
왼쪽 드롭 다운 목록에서 사용자 정의 폼을 선택 8.. 오른쪽 드롭 다운 목록에서 초기화를 선택합니다.
다음 코드 줄을 추가 9. :
Private Sub UserForm_Initialize() TextBox1.SetFocus End Sub
설명 : 우리는 사용자 정의 폼이로드 될 때 시작하려는 곳이기 때문에이 코드 라인은 첫 번째 텍스트 상자에 포커스를 설정합니다.
우리는 지금 사용자 정의 폼의 첫 번째 부분을 만들었습니다. 이미 깔끔한 보이지만 우리는 ID 텍스트 상자에 값을 입력하거나 우리가 명령 단추 중 하나를 클릭하면 아무것도 아직 일어나지 않습니다.
프로젝트 탐색기에서 10. 오른쪽 UserForm1을 클릭 한 다음 코드보기를 클릭하십시오.
-
왼쪽 드롭 다운 목록에서 TextBox1에를 선택합니다. 오른쪽 드롭 다운 목록에서 변경을 선택합니다.
-
다음 코드 줄을 추가
Private Sub TextBox1_Change() GetData End Sub
(13)에서 프로젝트 탐색기, UserForm1을 두 번 클릭합니다.
-
더블 / 편집을 클릭합니다 명령 단추를 추가합니다.
-
다음 코드 줄을 추가
Private Sub CommandButton1_Click() EditAdd End Sub
-
더블 지우기 명령 버튼을 클릭합니다.
-
다음 코드 줄을 추가
Private Sub CommandButton2_Click() ClearForm End Sub
설명 :이 잠수정은 우리가 두 번째로 만들려고하고 다른 서브 우퍼를 호출합니다.
-
더블 닫기 명령 단추를 클릭하십시오.
-
다음 코드 줄을 추가
Private Sub CommandButton3_Click() Unload Me End Sub
설명 :이 코드 라인은 사용자 정의 폼을 닫습니다.
시간은 잠수정을 만들 수 있습니다. 당신은 잠수함에 대한 자세한 내용은 Google 기능 및 하위 장을 갈 수 있습니다. 급한 경우, 단순히 모듈에 다음 서브 우퍼 배치 (Visual Basic 편집기에서를 삽입 모듈을 클릭하십시오).
-
먼저 입력 한 정수 변수 세 종류 중 하나 개 부울 변수를 선언. (모듈의 상단) 일반 선언 부에서 변수를 선언. 이 방법은 한 번만 변수를 선언해야하고 여러 잠수함에서 사용할 수 있습니다.
Dim id As Integer, i As Integer, j As Integer, flag As Boolean
-
GetData의 서브를 추가합니다.
Sub GetData() If IsNumeric(UserForm1.TextBox1.Value) Then flag = False i = 0 id = UserForm1.TextBox1.Value Do While Cells(i + 1, 1).Value <> "" If Cells(i + 1, 1).Value = id Then flag = True For j = 2 To 3 UserForm1.Controls("TextBox" & j).Value = Cells(i + 1, j).Value Next j End If i = i + 1 Loop If flag = False Then For j = 2 To 3 UserForm1.Controls("TextBox" & j).Value = "" Next j End If Else ClearForm End If End Sub
설명 : ID 텍스트 상자에 숫자 값이 포함 된 경우, 엑셀 VBA는 ID로드 해당 레코드를 검색합니다. / VBA – 예 – 컨트롤 수집 [컨트롤 컬렉션]`텍스트 상자를 통해 쉽게 루프 : 우리는`링크를 사용합니다. 엑셀 VBA가 (플래그가 여전히 False입니다) ID를 찾을 수없는 경우, 두 번째와 세 번째 텍스트 상자를 비 웁니다. ID를 텍스트 상자는 숫자 값을 포함하지 않는 경우, 엑셀 VBA는 ClearForm 서브를 호출합니다.
-
ClearForm 서브를 추가합니다.
Sub ClearForm() For j = 1 To 3 UserForm1.Controls("TextBox" & j).Value = "" Next j End Sub
설명 : 엑셀 VBA 모든 텍스트 상자를 지 웁니다.
-
EditAdd 서브를 추가합니다.
Sub EditAdd() Dim emptyRow As Long If UserForm1.TextBox1.Value <> "" Then flag = False i = 0 id = UserForm1.TextBox1.Value emptyRow = WorksheetFunction.CountA(Range("A:A")) + 1 Do While Cells(i + 1, 1).Value <> "" If Cells(i + 1, 1).Value = id Then flag = True For j = 2 To 3 Cells(i + 1, j).Value = UserForm1.Controls("TextBox" & j).Value Next j End If i = i + 1 Loop If flag = False Then For j = 1 To 3 Cells(emptyRow, j).Value = UserForm1.Controls("TextBox" & j).Value Next j End If End If End Sub
설명 : ID 텍스트 상자가 비어 있지 않은 경우, 엑셀 VBA는 시트의 레코드 (앞에서 본대로 기록을로드의 반대)을 편집합니다.
엑셀 VBA가 (플래그가 여전히 False입니다) ID를 찾을 수없는 경우, 다음 빈 행에 레코드를 추가합니다. 가변 emptyRow 처음 빈의 행 및 레코드를 추가 할 때마다 증가한다.
-
종료 VBA 편집기는, 1 행 아래에 나타낸 라벨을 입력하고 정의 폼 테스트.