Formular ab Zellenklick anzeigen, dann CommandButton zum Weiterleiten an die nächste ActiveCell

Formular ab Zellenklick anzeigen, dann CommandButton zum Weiterleiten an die nächste ActiveCell

Ich erstelle ein Eingabeformular für die Verwendung mit einem Tablet-PC in Excel, das unsere Leute vor Ort ausfüllen können. Da Eingaben wie Dropdown-Menüs und dergleichen ziemlich knifflig sind, möchte ich ein einfaches Eingabeformular mit großen Pass/Fail-Befehlsschaltflächen verwenden. Anstatt einzelne Befehlsfelder zum Aufrufen des Formulars zu verwenden, habe ich mich dafür entschieden, den folgenden Code (innerhalb des Objekts/Blatts) zu verwenden, um das Formular aufzurufen, wenn bestimmte Zellen ausgewählt werden:

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

Layout des Eingabeformulars

Das Eingabeformular ruft Informationen bezüglich der ActiveCell ab, um die Artikelnummer, Beschreibung und Kommentare mithilfe des folgenden Codes im FORMULAR auszufüllen.

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

Dabei soll der Benutzer ggf. einen Kommentar eingeben und anschließend auf eine der vier Schaltflächen „Bestehen“, „Nicht bestehen“, „Bestehen und fortfahren“ und „Nicht bestehen und fortfahren“ klicken.

Wenn sie auf „Bestanden“ oder „Nicht bestanden“ klicken, habe ich Code im Formular, der den Text im Kommentarfeld in die benachbarte Zelle zurücksetzt (mithilfe von Offset), „P“ bzw. „F“ in die aktive Zelle eingibt und das Benutzerformular problemlos schließt (mithilfe des folgenden Codes im FORMULAR).

Private Sub PASSButton_Click()
    PFInputForm.Hide
    ActiveCell = "P"
    ActiveCell.Offset(0, 1) = PFInputForm.INPUTCOMMENT
End Sub

Mein Problem besteht darin, dass der Benutzer entweder auf „Bestehen und fortfahren“ oder „Nicht bestehen und fortfahren“ klicken soll, obwohl das oben genannte passieren soll, die aktive Zelle dann jedoch eine Zelle nach unten verschoben wird und ein neues, für diese Zeile spezifisches Formular geöffnet wird.

Unten sehen Sie den Code, den ich derzeit vom FORMULAR für „Pass & Continue“ ausführe. Mein Problem ist, dass ich beim Öffnen des neuen Formulars zwar sehen kann, dass die neue aktive Zelle auf dem Blatt ausgewählt ist, das Formular aber immer noch die Informationen aus der vorherigen aktiven Zelle abruft.

Private Sub PCONTButton_Click()
    PFInputForm.Hide
    ActiveCell = "P"
    ActiveCell.Offset(0, 1) = PFInputForm.INPUTCOMMENT
    ActiveCell.Offset(1, 0).Select
End Sub  

Ich habe erfolglos einige Varianten ausprobiert, darunter das Ausblenden des Benutzerformulars (sowohl im FORM-Code als auch im Sheet-Code), aber nachdem ich einige Stunden in diesem (und anderen) Forum herumgestöbert habe, habe ich das Gefühl, dass ich jetzt nur noch im Dunkeln tappe!

Antwort1

Dank eines anderen Benutzers habe ich eine Lösung gefunden. Ich habe der Funktion, die das Formular aufruft, eine zusätzliche IF THEN-Anweisung hinzugefügt, die nach einer Flagge (entweder 1 oder 0) in Zelle AI14 (die mit 1 beginnt) sucht:

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  

Ich habe dann eine Flag-Änderung zurück auf 1 für die Schaltflächen „PASS“ und „FAIL“ hinzugefügt:

Private Sub PASSButton_Click()
    Range("AI14") = 1
    ActiveCell = "P"
    ActiveCell.Offset(0, 1) = PFInputForm.INPUTCOMMENT
    PFInputForm.Hide
End Sub

Ich lasse die Flag-Änderung bei den „Weiter“-Buttons weg, um das Flag auf Null zu belassen, damit der obere Code nicht fortgesetzt wird. Dann habe ich dem Code des „Weiter“-Buttons zusätzlichen Inhalt hinzugefügt, damit er die zugehörigen Informationen aus der neuen ActiveCell durchzieht:

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

Dieser Code verwendet die gleiche Informationsquelle wie der Code zum Initialisieren des Formulars (siehe Originalbeitrag).

Ich muss nur das Ende der „Weiter“-Codierung aufräumen, sodass das Flag auf 1 zurückgesetzt wird, sobald das letzte Element in der Liste erreicht wurde.

Hoffe das hilft!

verwandte Informationen