Hallo liebe community,
ich habe folgendes Problem:
Im Hauptformular befindet sich eine Combobox, die über eine Abfrage Werte aus einer Tabelle entnehmen soll. Diese Abfrage ist eine Select Distrinct Abfrage.
Die gefilterten Werte sollen in einem Unterformular angezeigt werden.
Leider funktioniert das mit meinem Code nicht. Es erscheint Syntaxfehler 3075 fehlender Operator. Beim Debuggen bleibt er bei .Filter = String stehen.
Private Sub cboMonat_AfterUpdate()
Dim strFilter As String
strFilter = Me!cboMonat
Debug.Print strFilter
With Me!UFOgemittelterAbsatz.Form
.Filter = strFilter
.FilterOn = True
End With
End Sub
Vielen Dank für eure Hilfe.
Ich brauche schnellstmöglich eine Antwort. Abgabetermin ist sehr bald.
Liebe Grüße
Hallo,
der reine Feldname im Formular ist kein gültiger Filterstring.
Bei der Ausgabe über Debug.Print muss Dir das eigentlich klar sein.
Du musst ja mit etwas vergleichen.
Etwa so:
ZitatstrFilter = "FeldnameTabelle = " & Me!cboMonat
Aud welches Feld soll sich also der Monat beziehen ?
Zeige mal den SQL Text der Abfrage.
PS:
Verwende die Codetags des Forums.
Vielen Dank MzKlMu
Das habe ich schon getan leider funktioniert das trotzdem nicht.
Die sql - Abfrage ist
SELECT DISTINCT tblsale.Monat From tblsale
als Ereignis der combobox
Leider bin ich in dem Gebiet nicht sehr bewandert. Wäre trotzdem toll, wenn mir geholfen werden kann.
Liebe Grüße
Lisa
Hallo,
was für Werte enthält tblsale.Monat ?
Und außerdem: reservierte Wörter vermeiden. ("Monat" ist der (deutsche) Name für die Month()-Funktion)
Zitatals Ereignis der combobox
??
Du meinst damit, der SQL-String steht in der Kombifeld-Eigenschaft "Datensatzherkunft" ?
die Werte in der Tabelle sind als kurzer Text deklariert. Meintest du das?
"01 Januar"z.B.
hab das jetzt umgeändert in xx-Monat in der Tabelle, leider funktioniert es trotzdem nicht.
Zitat:
"Du meinst damit, der SQL-String steht in der Kombifeld-Eigenschaft "Datensatzherkunft" ?"
ja genau dort hab ich es reingeschrieben.
Hallo,
ja, ich meinte den Datentyp des Tabellenfeldes.
Wenn Text , dann muss das Filterkriterium (-string) so lauten:
strFilter = "[Monat] = '" & Me!cboMonat & "'"
Warum steht aber im Feld "Monat" eine Tageszahl plus ein Monatsname drin?
Solche Konstruktionen führen in den meisten Fällen in irgendwelche chaotischen/fehlerträchtigen/undefinierte Situationen.
Ich habe eine importierte Exceldatei mit Datum und verschiedenen Bestellungen.
Diese Bestellungen sollen nach Monat chronologisch in der combobox aufgelistet werden.
Januar; Februar; März;...
Das hat nicht funktioniert, deshalb hab ich vor den Monat 01; 02;03;... gesetzt.
Somit funktioniert die Sortierung in der combobox.
Das hat zur Folge, dass es kein Datum sondern ein Text in der importierten exceltabelle ist.
Ich komme irgendwie überhaupt nicht weiter und ich weiß nicht wie ich das hinbekommen soll.
Ziel ist es die Bestellungen nach Datum von der combobox im Unterformular anzeigen zu lassen.
Hallo,
wenn Du ein Datumsfeld in der Tabelle hast, ist ein extra Feld für den Monat überflüssig. Der Monat lässt aus dem Datum ableiten. Und wenn Du mit SELECT DISTINCT dann den Monat aus dem Datum ableitest, ist auch die Zahl vor dem Monat nicht notwendig, denn die Sortierung nach dem Datum sortiert auch den Monat richtig.
Ein anderes Problem ist da eher auch das Jahr, denn den Februar gibt es 2017 und die Wahrscheinlichkeit dass es den auch 2019 gibt ist relativ hoch.
Du musst daher auch noch das Jahr in den Filter einfließen lassen.
Weiterhin ermittelt man den Monat immer als Zahl, den Monatsnamen dazu gewint man über die Funktion:
MonatName: Monatsname(Monatszahl)
Ein optionaler Parameter in der Funktion steuert auch ob 3 Buchstaben (Feb) oder voller Name (Februar).
Es ergeben sich also folgende Fragen:
- Wie liegt das Datum in der imortierten Tabelle vor, ist es ein vollständiges Datum oder nur der Monat ?
- Wie ist es mit dem Jahr, denn die Monate wiederholen sich ja. ?
Lieber Klaus,
wie leite ich denn aus dem Datum den Monat ab. Muss ich das in der Abfrage tun?
Das hab ich gestern schon den ganzen Tag versucht, bin aber leider nur auf die Notlösung mit ZahlundMonat gekommen.
Bin wirklich grad am verzweifeln.
Liebe Grüße
Lisa
Hallo,
beantworte mal meine obigen Fragen.
in der importierten Tabelle liegt das Datum z.B. 01.01.2017 vor
Versteh nicht ganz wo ich den Code einfügen soll. Ich bin wirklich eine Niete in dem ganzen. Sorry.
Hallo,
sorry, aber ich hatte 2 Fragen, die Frage wie Du das mit dem Jahr handhaben willst ist nicht beantwortet.
Hallo Klaus,
die Jahre können auch angezeigt werden.
Ist aber eigentlich erstmal egal.
Hallo,
ZitatIst aber eigentlich erstmal egal.
nein, es ist nicht egal.
Wenn in der Tabelle 2017 und 2018 enthalten ist, erhältst Du ja den Februar von 2017 und 2018 willst Du das wirklich haben ?
So sieht meine importierte Tabelle aus natürlcih kurz gefasst. Sind nur Daten aus dem Jahr 2017 drin.
Hallo,
Beispiel im Anhang.
Den Monat habe ich in der Tabelle gelöscht.
Das Kombi zeigt auch noch <Alle> an, damit man den Filter auch wieder löschen kann. Die Abfrage des Kombis musst Du in der SQL Sicht ansehen. Da siehst Du auch wie das gemacht ist mit dem Monat auslesen.
Hallo,
PS: Habe den Monatsnamen vergessen, Klaus hat ihn aber in seinem Beispiel... Trotzdem unten geändert.. 8)
wenn Du diese xls-Datei nach Access in eine Tabelle importiert hast, keine Änderungen (Umstrukturierungen) erfolgt sind und du willst nach einem Monat filtern , den Du in einem (ungebundenen) Kombifeld auswählen kannst, dann etwa so (nicht empfohlen):
Kombifeld:
Datensatzherkunft: select distinct [Monat] from tbl_XlsDatei order by Month([created_at])
Spaltenanzahl: 1
gebundene Spalte : 1
Spaltenbreiten: 2,5cm
und bei "AfterUpdate" des Kombis:
Private Sub cboMonat_AfterUpdate()
Me.Filter = "[Monat] = '" & Me!cboMonat & "'"
Me.FilterOn = True
End Sub
Wenn das weniger fehlerträchtig gehen soll, muss das Jahr mit involviert werden (empfohen):
Datensatzherkunft: select distinct Month([created_at]), MonthName([created_at]), Year([created_at]) from tbl_XlsDatei order by Year([created_at]), Month([created_at])
Spaltenanzahl: 3
gebundene Spalte : 1
Spaltenbreiten: 0cm; 2,5cm;2,5 cm
Private Sub cboMonat_AfterUpdate()
Me.Filter = "Month([created_at])= " & Me!cboMonat.Column(0) & " and Year([created_at])= " & Me!cboMonat.Column(2)
Me.FilterOn = True
End Sub
Hallo Klaus,
das sieht echt top aus. Ich muss jedoch die einzelnen Bestellungen addieren, damit ich sehe was in dem Monat wie oft verkauft worden ist.
Ich wollte das mit einem Unterformular lösen. Und die Werte dann zusammen addieren.
Kannst du mir da auch irgendwie weiterhelfen?
Ich bin echt dankbar für deine Hilfe.
Liebe Grüße
Lisa
Hallo,
welche Spalte soll denn da addiert werden ?
Hallo Klaus
Die qty_shipped Spalte soll nach dem Monat addierte werden
Hallo Franz,
hab es so auch ausprobiert leider, kommt dann ein Prozedurfehler. Weißt du warum? und wie ich es beheben kann?
Liebe Grüße
Lisa
Hallo,
da braucht es kein Unterformular. Im Formularkopf ein Feld für die Summe einfügen, fertig.
Geänderte DB anbei.
ZitatWeißt du warum? und wie ich es beheben kann?
sorry, Lisa, aber glaubst Du wirklich man könnte darauf eine vernünftige Antwort geben ?
Das mindeste wäre mal den Code zu zeigen den man wirklich verwendet und dann auch noch zu beschreiben welcher Fehler wann kommt.
Hallo Klaus,
das sieht echt super aus! Danke!
Zur besseren Übersicht wäre ein Liste natürlcih besser. Weißt du wie ich das dann mit dem addieren mache?
Liebe Grüße
Lisa
Hallo Klaus,
natürlich ist das schon eine Liste. Ich weiß, aber nicht wie du das gemacht hast.
Liebe Grüße
Lisa
Herzlichen Dank! Danke Klaus! Danke Franz!
Ich bin unglaublich happy, dass ihr mir so toll weitergeholfen habt.
Mit der Ansicht hab ich glücklicherweise selbst noch rausbekommen.
Habe habe im Endlosformular alle Felder nebeneinander in dem Detailsbereich gelegt. So erscheint es dann als Tabelle. Wusste ich vorher nicht. ::)
Es sieht jetzt so aus, wie ich es mir gewünscht habe.