VBA für Excel, Erstellen einer Art dynamischer if-Anweisung

VBA für Excel, Erstellen einer Art dynamischer if-Anweisung

Ich arbeite an einem datenbankähnlichen Dokument zum Speichern von Artikeln und deren Informationen. Ich habe ein Problem damit, mir eine Möglichkeit auszudenken, mit VBA einen Bericht dazu zu erstellen. Derzeit habe ich ein Benutzerformular, das eine mehrseitige Seite mit Registerkarten für jede Informationszeile zu den Artikeln enthält:

Registerkarten: [Alle zum Rep hinzufügen] [Nach Status hinzufügen] [Nach Typ hinzufügen] [Nach Seriennummer hinzufügen] [Nach Ablaufdatum hinzufügen]

Jede Registerkarte hat unterschiedliche Umschaltflächen.

Zuerst wollte ich, dass der Code einfach einen Bericht mit einem Auswahlfall mit multipage.SelectedItem.index erstellt, und mir wurde klar, dass dies die Berichtsgestaltung stark einschränken würde. Ich entschied mich, den Registerkarten eine „Seite hinzufügen“ hinzuzufügen, damit Sie verschiedene Kriterien hinzufügen können, z. B. alle Elemente mit Status A mit Ablaufdatum A zu Ablaufdatum B hinzufügen. Damit wurde mir klar, dass ich 6 Registerkarten habe und alle möglichen IF-Anweisungen codieren müsste ... Jetzt die Bitte um Hilfe: Gibt es eine Möglichkeit, einen dynamischen IF- oder CASE-Block zu erstellen, in dem Sie nur die „aktiven“ oder hinzugefügten Registerkarten in die Suchkriterien aufnehmen können? Der Rest des Codes würde darin bestehen, die Anzahl der Elemente auf dem Arbeitsblatt zu zählen, sie mithilfe einer FOR-Schleife zu durchlaufen und sie einem Word-Dokument hinzuzufügen, wenn sie die Kriterien erfüllen. Ich habe noch keinen festen Code geschrieben, aber was ich habe, sieht so aus:

In diesem Codestück habe ich versucht, eine „Sammelfunktion“ zu erstellen, um die möglichen IF-Anweisungen zu verwalten, je nachdem, welche Argumente Sie an sie übergeben haben:

Private Function advancedGathering(Optional status As String, Optional itemType As String, Optional id As Integer, Optional expDate As Date, Optional holder As String)

Select Case advancedGathering
    Case status <> Null And _
         itemType <> Null And _
         id <> Null And _
         expDate <> Null And _
         holder <> Null

    Case status <> Null And _
         itemType <> Null And _
         id  <> Null And _
         expDate <> Null And _
         holder <> Null

    End Select


End Function

Es ist unvollständig, wie Sie sehen können.

Und ich habe auch dies für das Schaltflächenklickereignis:

Private Sub Button_generate_Click()

    Dim row, quantity As Integer

    quantity = WorksheetFunction.Count(Range(colHandler.column("id") & 3, colHandler.column("id") & 900)) 'There are less than 900 items, this is just to capture all

    If Toggle_status_ATR.Value = False Or _
       Toggle_type_ATR.Value = False Or _
       Toggle_id_ATR.Value = False Or _
       Toggle_expDate_ATR.Value = False Or _
       Toggle_holder_ATR.Value = False Then

        Select Case MultiPage_main.SelectedItem.Index
            Case 0 'Add All"
                If Toggle_all_addAll.Value = True Then
                    'This is the first tab which I'm not worried about because if selected it will add all the info on the items
                Else

                End If

            Case 1 'Add by Status
                    If Toggle_status_wayOverdue.Value = True Then
                ElseIf Toggle_status_overdue.Value = True Then
                ElseIf Toggle_status_due.Value = True Then
                ElseIf Toggle_status_good.Value = True Then
                ElseIf Toggle_status_valid.Value = True Then
                End If

            Case 2 'Add by Type

            Case 3 'Add by ID

            Case 4 'Add by expDate

            Case 5 'Add by Holder

        End Select

    Else '> Any of the [Toggle_xxx_ATR] buttons are clicked

    End If

Multipage_selection: 'I tried to use GOTO statements


check_valid:

    Unload Me

End Sub

Mir sind ehrlich gesagt die Ideen ausgegangen, ich bin kein erfahrener Programmierer und arbeite erst seit ein paar Monaten mit VBA als Zusatzprojekt zu meinem eigentlichen Job. Jede Idee hilft und vielen Dank an alle für Ihre Zeit!

verwandte Informationen