다음은 우리가 상호 작용하는 사용자 정의 폼을 만들어 엑셀 VBA에서 프로그램을 볼 것이다. 사용자 정의 폼 우리는 다음과 같은 모양을 만들려고하고있다 :

Excel VBA Interactive Userform

설명 : 사용자가 ID 텍스트 상자에 값을 입력 할 때마다, 엑셀 VBA는 해당 레코드를로드합니다. 당신은 편집 / 추가 버튼을 클릭하면, 엑셀 VBA 시트에 기록을 편집 또는 ID가 아직 존재하지 않는 레코드를 추가합니다. 지우기 버튼은 모든 텍스트 상자를 지 웁니다. 닫기 버튼을 사용자 정의 폼을 닫습니다.

이 정의 폼을 만들려면 다음 단계를 실행합니다.

  1. Visual Basic 편집기. 프로젝트 탐색기가 보이지 않으면보기 프로젝트 탐색기를 클릭합니다.

삽입, 사용자 정의 폼을 클릭합니다. 도구 상자가 자동으로 나타나지 않으면,보기, 도구 상자를 클릭합니다. 화면은 다음과 같이 설정해야합니다.

Userform Screen Setup in Excel VBA

(먼저 상단의 첫 번째 아래의 두 번째 등) 및 명령 단추 레이블, 텍스트 상자를 추가합니다. 이것이 완료되면, 그 결과는 앞서 도시 정의 폼의 화상과 일치한다. 예를 들어, 도구 상자에서 텍스트 상자를 클릭하여 텍스트 상자 컨트롤을 만듭니다. 다음으로, 당신은 사용자 정의 폼에 텍스트 상자를 드래그 할 수 있습니다.

  1. 이름과 컨트롤의 캡션을 변경할 수 있습니다. 이름은 엑셀 VBA 코드에 사용됩니다. 자막은 화면에 나타나는 것들이다. 이 컨트롤의 이름을 변경하는 것이 좋습니다,하지만 우리는이 예제에서 몇 가지 컨트롤을 가지고 있기 때문에 여기에 필요하지 않습니다. 레이블, 텍스트 상자 및 명령 단추의 캡션을 변경하려면,보기, 속성 창을 클릭하고 각 컨트롤을 클릭합니다.

  2. 사용자 정의 폼을 보여 워크 시트에 명령 단추를 배치하고 다음 코드 줄을 추가하려면 :

Private Sub CommandButton1_Click()

UserForm1.Show

End Sub

우리는 지금 하위 UserForm_Initialize을 만들 것입니다. 사용자 정의 폼에 대한 표시 방법을 사용하면,이 서브가 자동으로 실행됩니다.

  1. Visual Basic 편집기.

프로젝트 탐색기 7. 오른쪽 UserForm1을 클릭 한 다음 코드보기를 클릭하십시오.

왼쪽 드롭 다운 목록에서 사용자 정의 폼을 선택 8.. 오른쪽 드롭 다운 목록에서 초기화를 선택합니다.

다음 코드 줄을 추가 9. :

Private Sub UserForm_Initialize()

TextBox1.SetFocus

End Sub

설명 : 우리는 사용자 정의 폼이로드 될 때 시작하려는 곳이기 때문에이 코드 라인은 첫 번째 텍스트 상자에 포커스를 설정합니다.

우리는 지금 사용자 정의 폼의 첫 번째 부분을 만들었습니다. 이미 깔끔한 보이지만 우리는 ID 텍스트 상자에 값을 입력하거나 우리가 명령 단추 중 하나를 클릭하면 아무것도 아직 일어나지 않습니다.

프로젝트 탐색기에서 10. 오른쪽 UserForm1을 클릭 한 다음 코드보기를 클릭하십시오.

  1. 왼쪽 드롭 다운 목록에서 TextBox1에를 선택합니다. 오른쪽 드롭 다운 목록에서 변경을 선택합니다.

  2. 다음 코드 줄을 추가

Private Sub TextBox1_Change()

GetData

End Sub

(13)에서 프로젝트 탐색기, UserForm1을 두 번 클릭합니다.

  1. 더블 / 편집을 클릭합니다 명령 단추를 추가합니다.

  2. 다음 코드 줄을 추가

Private Sub CommandButton1_Click()

EditAdd

End Sub
  1. 더블 지우기 명령 버튼을 클릭합니다.

  2. 다음 코드 줄을 추가

Private Sub CommandButton2_Click()

ClearForm

End Sub

설명 :이 잠수정은 우리가 두 번째로 만들려고하고 다른 서브 우퍼를 호출합니다.

  1. 더블 닫기 명령 단추를 클릭하십시오.

  2. 다음 코드 줄을 추가

Private Sub CommandButton3_Click()

Unload Me

End Sub

설명 :이 코드 라인은 사용자 정의 폼을 닫습니다.

시간은 잠수정을 만들 수 있습니다. 당신은 잠수함에 대한 자세한 내용은 Google 기능 및 하위 장을 갈 수 있습니다. 급한 경우, 단순히 모듈에 다음 서브 우퍼 배치 (Visual Basic 편집기에서를 삽입 모듈을 클릭하십시오).

  1. 먼저 입력 한 정수 변수 세 종류 중 하나 개 부울 변수를 선언. (모듈의 상단) 일반 선언 부에서 변수를 선언. 이 방법은 한 번만 변수를 선언해야하고 여러 잠수함에서 사용할 수 있습니다.

Dim id As Integer, i As Integer, j As Integer, flag As Boolean
  1. 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 서브를 호출합니다.

  1. ClearForm 서브를 추가합니다.

Sub ClearForm()

For j = 1 To 3

UserForm1.Controls("TextBox" & j).Value = ""

Next j

End Sub

설명 : 엑셀 VBA 모든 텍스트 상자를 지 웁니다.

  1. 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 처음 빈의 행 및 레코드를 추가 할 때마다 증가한다.

  1. 종료 VBA 편집기는, 1 행 아래에 나타낸 라벨을 입력하고 정의 폼 테스트.

Excel VBA Interactive Userform