
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!