Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Bericht erstellen aus Ergebnis einer Filterung über Kombinationsfelder

Begonnen von sklass, Juli 03, 2015, 11:08:59

⏪ vorheriges - nächstes ⏩

sklass

Hallo zusammen, ich bin neu hier im Forum und habe ein Problem... Habe mich bei meinen Chef zu weit aus dem Fenster gelehnt und eine Datenbank zur Projektsteuerung angekündigt. Meine letzten VBA-Kenntnisse stammen aus dem 19. Jahrhundert  ;) und scheinbar komme ich mit dem folgenden Problem nur über diesen Weg weiter ... Access Version 2013..

Ich habe eine Tabelle angelegt [Datenpool] mit einer Menge Infos [Spalte1...x] über ein Projekt.
Weiterhin habe ich ein Formular angelegt [Berichterstellen] mit 6 Kombinationsfeldern die ich über eine Abfrage aus der Tabelle [Datenpool] füttere. Für jede [Spalte] ein Kombifeld. Meine Vorstellung ist es nun in den Kombifeldern eine Auswahl zu treffen [z.B. Kombifeld 1 aus Spalte 1: Bearbeitungsstand erledigt oder in Bearbeitung; Kombifeld 2 aus Spalte 2: Projektnummer, usw.] damit kann ich dann Filterkriterien für die Tabelle [Datenpool] erstellen und diese entsprechend filtern und daraus dann einen individuellen Bericht basierend auf der Auswahl erstellen.

Sollte doch vom Prinzip eine einfache Sache sein. Aber ich finde einfach nicht den richtigen Ansatz. Hat schon mal jemand sowas erstellt? Und kann mir nen VBA-Code senden?

Besten Dank für Eure Mühe...

Wurliwurm

Zitat von: sklass am Juli 03, 2015, 11:08:59
Sollte doch vom Prinzip eine einfache Sache sein. Aber ich finde einfach nicht den richtigen Ansatz. Hat schon mal jemand sowas erstellt? Und kann mir nen VBA-Code senden?

Hast recht, im Prinzip ist das nicht schwer. Gibt sicherlich mehrere Wege, die nach Rom führen.

Ich würde den Weg über einen SQL-String gehen. Sprich, es geht darum, aus dem Formular einen Text in der Form "SELECT ... FROM ... WHERE ..." zu bauen.

Ein Klick auf einen Button ruft eine Routine auf (ein Sub im Formular), welches der Reihe nach die WHERE Bedingungen hintereinander verkettet.

Im Stil von:
if not isnull(cmbStatus.value) then
sqlString = sqlString & "Status='" & cmbStatus.value & "'"
end if
sqlString = "SELECT * FROM meineTabelle WHERE " & sqlString


Die WHERE-Bedingungen müssen mit "AND" verkettet werden. Der sqlString soll dann die Datenbasis des Reports beschreiben.

sklass

Besten Dank für die Erklärung. Aber ich merke das mir das zu hoch wird  :o
Am besten ich versuche es mit einem Anfängerbuch für VBA...  :'(

sklass

ich hänge jetzt einfach mal die Datei mit an, vielleicht hat ja einer Lust dran rumzubasteln...

MaggieMay

Hallo,

zunächst einmal solltest du das Tabellenkonzept noch etwas verbessern und die DB somit "komfortabler" machen:
1.) Mindestens für Status, Verantwortlicher und Einstufung solltest du zusätzliche Tabellen anlegen, die Werte per Kombifeld auswählen lassen und nur den Referenzkey speichern. Somit erleichterst du dem Anwender die Eingabe und verhinderst Falscheingaben.
2.) Jahr und Woche müssen nicht gespeichert werden, wenn sie sich aus dem Datum berechnen lassen.
3.) Der Name "Datum" ist ein reserviertes Wort und sollte nicht für eigene Felder oder Variablen etc. verwendet werden.
4.) Gib den Steuerelementen gleich beim Anlegen sinnvolle, sprechende Namen. So etwas wie "Kombinationsfeld14" ist ein No-Go.
5.) Aktiviere die VBA-Option "Variablendeklaration erforderlich", sodass jedes neue (Klassen-) Modul automatisch den Eintrag "Option Explicit" erhält. Bei bestehenden Modulen ist dies nachträglich einzufügen. Anschließend kompilieren und Fehler bereinigen.

Erst wenn du all das umgesetzt hast, kannst du dich an die Auswertung der Filterkriterien machen. ;-)
Freundliche Grüße
MaggieMay

sklass

achherje   ??? ich sags ja... ich kauf mir VBA für Dummys  ;)

sklass

aber mal im Ernst:
1. Status und Einstufung wähle ich im Eingabeformular doch eindeutig per kombifeld aus. Verantwortlicher muss Flexibel bleiben.
2. Jahr und Woche muss ich manuell eingeben können da, sich die Kennung daraus zusammensetzt und es auch mal Nächträge mit alten Daten geben kann.
3. werde ich ändern
4. werde ich ändern
5. muss ich wohl mal gucken wo ich das einstelle.

Und dann?!? Wie filtere ich und übergebe das an einen Bericht?

MaggieMay

Es ging mir bei meinem Hinweis auf die zusätzlichen Tabellen nicht um das Berichtsanforderungsformular. Irgendwie müssen die Daten ja auch erfasst werden und dort spielt das eine Rolle. Da setzt du aber Kombifelder mit Wertelisten ein und das solltest du auf Tabellen umstellen.
Freundliche Grüße
MaggieMay

sklass

ok verstanden, gesetz dem Fall ich stelle die Datenerfassung um, wie geht es dann weiter... sorry das ich so doof frage, steh wie ein Ochs vorm Berg. Montag bin ich wieder im Büro, dann wurschtel ich wohl weiter.

sklass

Hallo, habe die Datenbank nun etwas aufgeräumt und würde mich jetzt gerne ans Filtern geben.
wie gehe ich am Besten vor. Hat jemand einen Hinweis?

Wurliwurm

Zitat von: sklass am Juli 06, 2015, 16:42:30
Hallo, habe die Datenbank nun etwas aufgeräumt und würde mich jetzt gerne ans Filtern geben.
wie gehe ich am Besten vor. Hat jemand einen Hinweis?

Ich habe Dir das ergänzt, was ich oben beschrieben hatte. Klicke auf im Formular Bericht erstellen auf den Button und er wird die getroffene Auswahl in SQL übersetzt. Es soll nur eine Anregung sein.

MaggieMay

Hi,

du hast mich nicht ganz verstanden, es sollte zukünftig nicht der Text sondern die Datensatz-ID des Textes gespeichert werden. Dazu müssen die Tabellen einen eindeutigen (Autowert-) Key bekommen.

Aber davon abgesehen könnte man natürlich schon allgemeine Hinweise zum Filtern des (nicht vorhandenen) Berichts geben, wenn man denn wüsste, auf welcher Datenbasis er erstellt werden sollte. Allerdings ist dieses Thema so selten nicht, dass du bei der Suche reichlich Anregungen finden solltest. Man muss ja das Rad nicht immer wieder neu erfinden. Ein gutes Beispiel findest du auch im alten Forum "Office-loesung" unter dem Stichwort "1. Suchformular in 10 Minuten...".

Du musst dabei jedes Eingabefeld prüfen, ob es zum Filtern herangezogen werden soll oder nicht und daraus den Kriterienteil des SQL-Codes dynamisch zusammensetzen. Diesen "Filter" übergibst du dann beim Öffnen des Berichts mit der OpenReport-Methode als "WhereCondition".
Freundliche Grüße
MaggieMay

sklass

Hallo Wurliwurm, ok habe einen Bericht über den Assistenten erstellt und im Anschluss an deinen Vorschlag zur Auswahl der Datensätze folgenden Code eingefügt:
Private Sub Berichtöffnen_Click()
DoCmd.OpenReport "Projektbericht", acViewPreview
End Sub
Wie erkläre ich dieser Prozedur nun, die Kombination an vorher ausgewählten Daten einzufügen?
Da kommt nun vermutlich Maggie´s openreport Methode als whereCondition ins spiel.
bloß wie sieht die where condition aus?

Wurliwurm

Zitat von: sklass am Juli 07, 2015, 15:25:13
Hallo Wurliwurm, ok habe einen Bericht über den Assistenten erstellt und im Anschluss an deinen Vorschlag zur Auswahl der Datensätze folgenden Code eingefügt:
Private Sub Berichtöffnen_Click()
DoCmd.OpenReport "Projektbericht", acViewPreview
End Sub
Wie erkläre ich dieser Prozedur nun, die Kombination an vorher ausgewählten Daten einzufügen?
Da kommt nun vermutlich Maggie´s openreport Methode als whereCondition ins spiel.
bloß wie sieht die where condition aus?

Anbei der Aufruf im Formular "Bericht öffnen"
Was ausgetauscht werden muß im Code ist der Berichtname, von "rptDatenpool" in "Projektbericht".

sklass

Wurliwurm du bist ein Gott... danke! Ich erkenne ja, das ihr Profis hier im Forum die Kleingeister dazu bewegen wollt selbst nachzudenken. Aber ist halt echt schwer wenn man sonst nix mit VBA am Hut hat. Aber ich habe Lust bekommen mich mal wieder intensiver damit zu beschäftigen! Als erstes werden ich mal deinen Code durcharbeiten und verstehen lernen.
Danke. :)