エクセルVBAユーザーフォームインタラクティブ
以下は、私たちはインタラクティブなユーザーフォームを作成し、ExcelのVBAでプログラムを見ていきます。ユーザーフォームは、我々は次のようにルックスを作成しようとしている。
説明:あなたはID]テキストボックスに値を入力するたびに、ExcelのVBAは、対応するレコードをロードします。 [編集] / [追加]ボタンをクリックすると、ExcelのVBAは、シート上のレコードを編集したりIDがまだ存在しないレコードを追加します。クリアボタンは、すべてのテキストボックスをクリアします。 [閉じる]ボタンは、ユーザーフォームを閉じます。
このユーザーフォームを作成するには、次の手順を実行します。
-
Visual Basicエディターを開きます。プロジェクトエクスプローラが表示されていない場合、ビュー、プロジェクトエクスプローラ]をクリックします。
挿入、ユーザーフォーム]をクリックします。ツールボックスが自動的に表示されない場合、ビュー、[ツールボックス]をクリックします。画面は以下のように設定する必要があります。
(最初の上部に、まず以下の二など)とコマンドボタン、ラベル、テキストボックスを追加します。3.。これが完了すると、結果は、前に示したユーザーフォームの画像と一致している必要があります。たとえば、ツールボックスからテキストボックスをクリックすることで、テキストボックスコントロールを作成します。次に、ユーザーフォーム上のテキストボックスをドラッグすることができます。
4.名前とコントロールのキャプションを変更することができます。名前は、Excel VBAコードで使用されています。キャプションは画面に表示されるものです。コントロールの名前を変更することをお勧めですが、我々は唯一この例では、いくつかのコントロールを持っているので、それはここでは必要ではありません。ラベル、テキストボックスとコマンドボタンのキャプションを変更するには、[表示]、[プロパティ]ウィンドウをクリックして、各コントロールをクリックしてください。
、ユーザーフォームを表示するワークシート上のコマンドボタンを配置し、次のコード行を追加するには5:
Private Sub CommandButton1_Click() UserForm1.Show End Sub
私たちは今、サブUserForm_Initializeを作成しようとしています。ユーザーフォームのために、Showメソッドを使用する場合、このサブが自動的に実行されます。
-
Visual Basicエディターを開きます。
7.プロジェクトエクスプローラでは、右のUserForm1をクリックし、[コードの表示]をクリックします。
8.左のドロップダウンリストからユーザーフォームを選択してください。右のドロップダウンリストから[Initialize]を選択してください。
9.次のコード行を追加します。
Private Sub UserForm_Initialize() TextBox1.SetFocus End Sub
説明:私たちはユーザーフォームがロードされたときに起動する場所これは、このコード行は、最初のテキストボックスにフォーカスを設定します。
私たちは今、ユーザーフォームの最初の部分を作成しました。それはすでにきちんと見えますが、我々はID]テキストボックスに値を入力するか、ときに我々は、コマンドボタンのいずれかをクリックすると、まだ何も起こりません。
プロジェクトエクスプローラで10.は、右のUserForm1をクリックし、[コードの表示]をクリックします。
11.左のドロップダウンリストからのTextBox1を選択してください。右のドロップダウンリストから、変更を選択します。
12.次のコード行を追加します。
Private Sub TextBox1_Change() GetData End Sub
13のプロジェクトエクスプローラ、UserForm1でダブルクリックします。
14.ダブル/編集をクリックしてコマンドボタンを追加します。
15.次のコード行を追加します。
Private Sub CommandButton1_Click() EditAdd End Sub
16.ダブルクリアコマンドボタンをクリックしてください。
17.次のコード行を追加します。
Private Sub CommandButton2_Click() ClearForm End Sub
説明:これらの潜水艦は、我々は第二に作成しようとしている他の潜水艦を呼び出します。
18.ダブル閉じるコマンドボタンをクリックしてください。
19.次のコード行を追加します。
Private Sub CommandButton3_Click() Unload Me End Sub
説明:このコード行は、ユーザーフォームを閉じます。
潜水艦を作成するための時間。あなたは潜水艦についてもっと学ぶために私達の機能とサブチャプターを通過することができます。お急ぎの場合は、単にモジュールに次の潜水艦を配置(Visual Basicエディターで、[挿入モジュール]をクリックします)。
20.第一には、Integer型の三つの変数とBoolean型の一つの変数を宣言します。 (モジュールの上部にある)一般宣言セクション内の変数を宣言します。この方法は、あなたは一度だけ変数を宣言するために持っていて、複数の潜水艦でそれらを使用することができます。
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]テキストボックスには数値が含まれている場合は、ExcelのVBAはIDと負荷対応するレコードを検索します。 [コントロールコレクション]テキストボックスを通じて `へ簡単にループ/ VBA-例-コントロールコレクション:私たちは`リンクを使用します。エクセルVBAは(フラグがまだ偽である)IDを見つけることができない場合、それは、2番目と3番目のテキストボックスを空にします。 IDテキストボックスは数値が含まれていない場合は、ExcelのVBAはClearFormサブを呼び出します。
-
ClearFormサブを追加します。
Sub ClearForm() For j = 1 To 3 UserForm1.Controls("TextBox" & j).Value = "" Next j End Sub
説明:Excelの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テキストボックスが空でない場合、Excel VBAシート上のレコード(我々が以前に見てきたように、レコードをロードの反対)を編集します。
エクセルVBAは(フラグがまだFalseの)IDが見つからない場合は、次の空の行にレコードを追加します。変数emptyRowは、最初の空の行であり、レコードが追加されるたびに増加します。
24.終了し、Visual Basicエディターは、行1に、以下に示すラベルを入力し、ユーザーフォームをテストします。