/ / Excel VBAインタラクティブユーザーフォーム

Excel VBA対話型ユーザーフォーム

以下では、 Excel VBA それは インタラクティブなユーザーフォーム。作成するUserformは次のようになります。

Excel VBA対話型ユーザーフォーム

説明: IDテキストボックスに値を入力するたびに、Excel VBAは対応するレコードを読み込みます。編集/追加ボタンをクリックすると、Excel VBAはシート上のレコードを編集します。または、IDがまだ存在しない場合はレコードを追加します。クリアボタンは、すべてのテキストボックスをクリアします。閉じるボタンは、ユーザーフォームを閉じます。

このユーザーフォームを作成するには、次の手順を実行します。

1. Visual Basic Editorを開きます。プロジェクトエクスプローラが表示されていない場合は、[表示]、[プロジェクトエクスプローラ]をクリックします。

2. Insert、Userformをクリックします。ツールボックスが自動的に表示されない場合は、[表示]、[ツールボックス]の順にクリックします。あなたの画面は以下のように設定する必要があります。

Excel VBAでのユーザーフォームの画面設定

3。 ラベル、テキストボックス(先頭に最初に、2番目に1番目のラベルなど)とコマンドボタンを追加します。これが完了したら、その結果は前に示したUserformの画像と一致するはずです。たとえば、ツールボックスからテキストボックスをクリックしてテキストボックスコントロールを作成します。次に、ユーザーフォーム上のテキストボックスをドラッグすることができます。

4。 コントロールの名前とキャプションを変更できます。名前はExcel VBAコードで使用されます。キャプションは、画面に表示されるキャプションです。コントロールの名前を変更することをお勧めしますが、ここではいくつかのコントロールしか持たないため、ここでは必要ありません。ラベル、テキストボックス、およびコマンドボタンのキャプションを変更するには、[表示]、[プロパティ]ウィンドウをクリックし、各コントロールをクリックします。

5.ユーザーフォームを表示するために、ワークシートにコマンドボタンを配置し、次のコード行を追加します。

Private Sub CommandButton1_Click()

UserForm1.Show

End Sub

Sub UserForm_Initializeを作成します。ユーザーフォームにShowメソッドを使用すると、このサブが自動的に実行されます。

6. Visual Basic Editorを開きます。

7.プロジェクトエクスプローラでUserForm1を右クリックし、コードの表示を次にクリックします。

8.左のドロップダウンリストから「ユーザーフォーム」を選択します。右のドロップダウンリストから「初期化」を選択します。

9.次のコード行を追加します。

Private Sub UserForm_Initialize()

TextBox1.SetFocus

End Sub

説明:このコード行は、最初のテキストボックスにフォーカスを設定します。これは、ユーザーフォームがロードされたときに開始する場所です。

これで、Userformの最初の部分が作成されました。 IDテキストボックスに値を入力したとき、またはコマンドボタンの1つをクリックしたときには、何も表示されません。

10.プロジェクトエクスプローラで、UserForm1を右クリックし、[コードの表示]をクリックします。

11.左のドロップダウンリストからTextBox1を選択します。右側のドロップダウンリストから変更を選択します。

12.次のコード行を追加します。

Private Sub TextBox1_Change()

GetData

End Sub

13.プロジェクトエクスプローラで、UserForm1をダブルクリックします。

14.編集/追加コマンドボタンをダブルクリックします。

15.次のコード行を追加します。

Private Sub CommandButton1_Click()

EditAdd

End Sub

16. Clearコマンドボタンをダブルクリックします。

17.次のコード行を追加します。

Private Sub CommandButton2_Click()

ClearForm

End Sub

解説:これらのサブルーチンは、作成する他のサブルーチンを1秒間に呼び出します。

18.コマンドを閉じるボタンをダブルクリックします。

19.次のコード行を追加します。

Private Sub CommandButton3_Click()

Unload Me

End Sub

説明:このコード行は、Userformを閉じます。

サブミットを作成する時間。 あなたはSubについて詳しく知るために、FunctionとSubの章を読むことができます。急いでいる場合は、次のサブをモジュールに配置するだけです(Visual Basic EditorでInsert、Moduleをクリックします)。

20。 まず、Integer型の3つの変数とBoolean型の1つの変数を宣言します。 General Declarationsセクション(モジュールの最上部)の変数を宣言します。このように、変数を宣言する必要があるのは1回だけで、複数のサブシステムで使用することができます。

Dim id As Integer, i As Integer, j As Integer, flag As Boolean

21. 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テキストボックスに数値が含まれる場合、Excel VBAはIDを検索し、対応するレコードを読み込みます。 Controls Collectionを使用して、テキストボックスを簡単にループできます。 Excel VBAがIDを見つけられない場合(フラグはまだFalseです)、2番目と3番目のテキストボックスが空になります。 IDテキストボックスに数値が含まれていない場合、Excel VBAはClearFormサブを呼び出します。

22. ClearFormサブを追加します。

Sub ClearForm()

For j = 1 To 3
    UserForm1.Controls("TextBox" & j).Value = ""
Next j

End Sub

説明:Excel VBAはすべてのテキスト・ボックスを消去します。

23. 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テキストボックスが空でない場合、Excel VBAはシート上のレコードを編集します(前述のレコードの読み込みとは反対です)。 Excel VBAでIDが見つからない場合(フラグはFalse)、次の空の行にレコードが追加されます。変数emptyRowは最初の空の行で、レコードが追加されるたびに増加します。

24. Visual Basic Editorを終了し、下に示すラベルを行1に入力し、ユーザーフォームをテストします。

Excel VBA対話型ユーザーフォーム

また読む: