私は、現場のスタッフが入力できるように、Excel で「タブレット」 PC で使用する入力フォームを作成しています。ドロップダウン メニューなどの入力は非常に扱いにくいため、大きな合格/不合格コマンド ボタンを備えた基本的な入力フォームを使用したいと考えています。個別のコマンド ボックスを使用してフォームを呼び出すのではなく、特定のセルが選択されたときにフォームを呼び出すために、次のコード (オブジェクト/シート内) を使用することにしました。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Selection.Count = 2 Then
If Not Intersect(Target, Me.Range("W16:W46,W74:W143")) Is Nothing Then
PFInputForm.Show
End If
End If
End Sub
入力フォームは、ActiveCell に関連する情報を呼び出し、FORM 内の次のコードを使用して、アイテム番号、説明、コメントを入力します。
Private Sub UserForm_Initialize()
PFInputForm.INPUTCOMMENT.Text = CStr(ActiveCell.Offset(0, 1).Value)
PFInputForm.ITEMNO = "Item " & ActiveCell.Offset(0, -2)
PFInputForm.ITEMDESCR = ActiveCell.Offset(0, -1)
End Sub
ユーザーはコメントを入力し(該当する場合)、次に「合格」、「不合格」、「合格して続行」、「不合格して続行」の 4 つのボタンのいずれかをクリックします。
「合格」または「不合格」をクリックすると、フォーム内のコードでコメント ボックスのテキストを隣接するセルに返し(オフセットを使用)、アクティブ セルにそれぞれ「P」または「F」を入力して、問題なくユーザー フォームを閉じます(フォームで次のコードを使用)。
Private Sub PASSButton_Click()
PFInputForm.Hide
ActiveCell = "P"
ActiveCell.Offset(0, 1) = PFInputForm.INPUTCOMMENT
End Sub
問題は、ユーザーに「合格して続行」または「不合格して続行」のいずれかをクリックさせたい場合、上記のようなことが起こるはずなのですが、アクティブ セルが 1 つ下に移動し、その行に固有の新しいフォームが開かれてしまうことです。
現在、FORM から「Pass & Continue」のために実行しているコードは以下のとおりです。問題は、新しいフォームが開くと、シート上で新しいアクティブ セルが選択されているのがわかりますが、フォームは以前の ActiveCell からの情報を引き続き呼び出していることです。
Private Sub PCONTButton_Click()
PFInputForm.Hide
ActiveCell = "P"
ActiveCell.Offset(0, 1) = PFInputForm.INPUTCOMMENT
ActiveCell.Offset(1, 0).Select
End Sub
ユーザー フォームを非表示にする (FORM コードと Sheet コードの両方) など、いくつかの方法を試しましたが失敗しました。しかし、このフォーラム (および他のフォーラム) を数時間調べた結果、暗闇の中で突き刺しているだけのような気がします。
答え1
別のユーザーのおかげで解決策を見つけました。フォームを呼び出す関数に、セル AI14 (1 から始まる) のフラグ (1 または 0) を検索する IF THEN ステートメントを追加しました。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Range("AI14") Then
If Selection.Count = 2 Then
If Not Intersect(Target, Me.Range("W16:W46,W74:W143")) Is Nothing Then
Range("AI14") = 0
PFInputForm.Show
End If
End If
End If
End Sub
次に、PASS ボタンと FAIL ボタンのフラグを 1 に戻す変更を追加しました。
Private Sub PASSButton_Click()
Range("AI14") = 1
ActiveCell = "P"
ActiveCell.Offset(0, 1) = PFInputForm.INPUTCOMMENT
PFInputForm.Hide
End Sub
「続行」ボタンのフラグ変更を省略してフラグをゼロのままにし、上部のコードが続行されないようにします。次に、続行ボタン コードにいくつかの追加コンテンツを追加して、新しい ActiveCell から関連情報を取得できるようにします。
Private Sub PCONTButton_Click()
ActiveCell = "P"
ActiveCell.Offset(0, 1) = PFInputForm.INPUTCOMMENT
ActiveCell.Offset(1, 0).Select
PFInputForm.INPUTCOMMENT.Text = CStr(ActiveCell.Offset(0, 1).Value)
PFInputForm.ITEMNO = "Item " & ActiveCell.Offset(0, -2)
PFInputForm.ITEMDESCR = ActiveCell.Offset(0, -1)
End Sub
このコードは、フォームを初期化するためのコードと同じ情報ソースを使用します(元の投稿を参照)
リストの最後の項目に到達したらフラグが 1 に戻るように、「継続」コーディングの最後を整理する必要があります。
お役に立てれば!