Eingabe Filter in VBA Maske Access

Hallo,

ich bin Anfänger in der VBA-Programmierung und habe folgendes Problem:

ich habe eine Acess-Tabelle (Name: DD001_XXX) mit ca 30.000 Datensätzen. Ein Datensatz nennt sich z.b. „VS_Berater“.

Ich habe mir nun ein Formular erstellt und einen Button eingerichtet. Nach Click auf den Button soll nun eine 3 stellige ID (z.B. 152) eingegeben werden. Dieser Eingabewert soll in meiner Abfrage (Name: DD001_XXX)
nun den Wert in der Spalte „VS_Berater“ einsetzen.

Ich bin aktuell soweit:

On Error GoTo Err_
param1 = InputBox(„Bitte Betriebsstelle eingeben“)
If param1 = „“ Then Exit Sub
Exit_:
Exit Sub
Err_:
MsgBox "Fehlernr.: " & vbCrLf & Err.Description
Resume Exit_
End Sub

Hallo,

ich bin Anfänger in der VBA-Programmierung und habe folgendes
Problem:

ich habe eine Acess-Tabelle (Name: DD001_XXX) mit ca 30.000
Datensätzen. Ein Datensatz nennt sich z.b. „VS_Berater“.

Du meinst eine „Spalte“ anstelle Datensatz?

Ich habe mir nun ein Formular erstellt und einen Button
eingerichtet. Nach Click auf den Button soll nun eine 3
stellige ID (z.B. 152)

Warum soll die „ID“ 3 stellig sein?
Welchen Datentyp hat das Feld „VS_Berater“ in der Tabelle?

eingegeben werden. Dieser Eingabewert

soll in meiner Abfrage (Name: DD001_XXX)
nun den Wert in der Spalte „VS_Berater“ einsetzen.

in ALLEN Datensätzen??

Ich bin aktuell soweit:

Sub btnButton1_Click() ’ hast Du vergessen…

On Error GoTo Err_
param1 = InputBox(„Bitte Betriebsstelle eingeben“)
If param1 = „“ Then Exit Sub

Currentdb.Execute „Update DD001_XXX set VS_Berater =’“ & param1 & „’“
’ falls „VS_Berater“ vom Datentyp TEXT ist.

Exit_:
Exit Sub
Err_:
MsgBox "Fehlernr.: " & vbCrLf & Err.Description
Resume Exit_
End Sub

Ich befürchte aber, Du willst etwas anderes machen, als alle Datensätze mit dieser einen „ID“ zu beaufschlagen…

Weiterhin empfehle ich NICHT die Verwendung der Inputbox.

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!

Hallo Franz,

das ging schnell!!! vielen Dank dafür.

Scheinbar habe ich da wirklich die falschen Begriffe verwendet.

Also Basis des ganzen ist eine Exceldatei die ich mir als Tabelle in Acces importiert habe (keine Verknüpfung).

Auf diese Tabelle habe ich eine 1:1 Abfrage (Also alle Felder) erstellt, mit dem Namen „DD001_XXX“.

Die Tabelle beinhaltet Kundendaten (Name, Vorname, etc.) und unter anderem ein Feld in welcher Geschäftstelle der Kunde betreut wird. Die Geschäftstellen haben einen 3-stelligen Code, z.B. „152“.

Jetzt springe ich kurz zum Ende meines vorhabens:

In meiner Abfrage „DD001_xxx“ kann ich ja nun manuell zum Filtern die 152 eingeben. Anschließend greifen noch ca 20 andere Abfragen darauf zu und am Ende speichere und schließe ich Access und lasse mir per Daten-Import die Werte in Excel ausgeben.

Die Geschichte mit der „Eingabebox“ ist im Grunde auch nur noch Schönheitsfehler-Beseitigung. Optimal wäre natürlich eine Drop-Down-Auswahlliste, um gar nicht erst einen falschen Wert vorzugeben.

Viele Grüße

Gregor.

Hallo,

nach dieser neuen Beschreibung vermute ich, Die willst das Kriterium in der Abfrage mit einem eingebenen Wert variabel und „dauerhaft“ versehen und abspeichern, damit später in Excel die Abfrage nur die DS liefert , die dem Kriteriumswert entsprechen…

Schreib dann Folgendes:

.
.
.
Currentdb.Querydefs(„DD001_XXX“).SQL = "Select * from tblKundendaten Where VS_Berater = " & param1
.
.

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!

Hallo,

genau das ist mein Plan.

ich habe jetzt folgendes stehen:

Private Sub Befehl11_Click()
On Error GoTo Err_
param1 = InputBox(„Bitte SV_Berater eingeben“)
If param1 = „“ Then Exit Sub
CurrentDb.QueryDefs(„01 DD001D_M_55050120_1 Abfrage“).SQL = "Select * from tblDD001D_M_55050120_1 Where VS_Berater = " & param1
Exit_:
Exit Sub
Err_:
MsgBox "Fehlernr.: " & vbCrLf & Err.Description
Resume Exit_
End Sub

Ich habe jetzt die originalen Namen verwendet (also DD001_XXX heißt eigentlich „DD001D_M_55050120_1“ und die Abfrage die auf dieser Tabelle läuft lautet „01 DD001D_M_55050120_1 Abfrage“).

Mein Problem jetzt:

Ich gebe den Wert ein und will anschließend prüfen, ob auch alles richtig gemacht wurde. Aber bekomme jetzt eine Fehlermeldung:
"Das Microsoft Jet-Datenbankmodul findet die Tabelle oder Abfrage ‚tblDD001D_M_55050120_01‘ nicht. Stellen Sie sicher, dass sie existiert und der Name richtig eingegeben wurde.

Was habe ich falsch gemacht? Ich habe zwar ein paar Ideen, aber keine Lösung dafür greifbar.

Hallo,

naja, wenn die Idee ist, dass „tbl“ vor dem Abfragenamen zu viel ist, dann lass das halt einfach mal weg…

Access meckert doch das an.

Hallo noch mal,

ich bin jetzt leider nicht mehr auf der Arbeit, aber habe zu Hause etwas rum gebastelt.

Ich komme auch im Moment leider nicht weiter.

Zur Zeit passiert folgendes wenn ich den Button betätige: es öffnet sich ein Fenster, ich gebe die 3 Stellige ID ein. Öffne ich die Abfrage, bekomme ich eine Fehlermeldung dass die Kriterien unverträglich sind. Es sieht auch aus, als hätte Acces die Abfrage komplett geleert und lediglich das Feld „VS_Berater“ eingefügt. Das Kriterium (die eingegebene ID im Fenster) steht dort aber :smile:

Ich würde aber gerne in der von mir erstellten Abfrage nur das Kriterium abändern können.

Falls ich mich doch zu unklar ausdrücke weiß ich auch nicht weiter :wink: Vielleicht hilft es ja weiter wenn ich mal eine Beispieldatei hochlade?

Viele Grüße und einen schönen Abend noch.

Hallo,

ich bin jetzt leider nicht mehr auf der Arbeit, aber habe zu
Hause etwas rum gebastelt.

Ich komme auch im Moment leider nicht weiter.

Zur Zeit passiert folgendes wenn ich den Button betätige: es
öffnet sich ein Fenster, ich gebe die 3 Stellige ID ein. Öffne
ich die Abfrage, bekomme ich eine Fehlermeldung dass die
Kriterien unverträglich sind. Es sieht auch aus, als hätte
Acces die Abfrage komplett geleert und lediglich das Feld
„VS_Berater“ eingefügt. Das Kriterium (die eingegebene ID im
Fenster) steht dort aber :smile:

Naja, wenn er die abzufragende Tabelle/Abfrage nicht findet …

Ich würde aber gerne in der von mir erstellten Abfrage nur das
Kriterium abändern können.

Ja, da machen wir doch. Nur das Kriterium „ändern“ geht halt nicht nur so, es gibt ja zunächst keines…Wir fügen eines dazu.
Die Abfrage hat nun mal nur (wenn man die Parameters-Deklaration im SQL-Statement mal wegläßt) die Eigenschaft „SQL“ für den kompletten SQL-String, also müssen wir einen solchen auch zuweisen.

Falls ich mich doch zu unklar ausdrücke weiß ich auch nicht
weiter :wink: Vielleicht hilft es ja weiter wenn ich mal eine
Beispieldatei hochlade?

Du brauchst nur immer(!) Deinen Code zu posten und die Realnamen der Objekte zu nennen, dann kann man gezielt dazu Stellung nehmen. Prosa-Beschreibungen sind halt nicht sehr aufklärend.

Weiterhin kommt es beim Kriteriums-Ausdruck (der sogenannten „Where-Condition“ eines SQL-Statements) auf den Datentyp des Tabellenfeldes „VS_Berater“ an. Im Moment ist „Zahl, Long“ angenommen.

CurrentDb.QueryDefs(" 01 DD001D_M_55050120_1 Abfrage").SQL = "Select * from DD001D_M_55050120_1 Where VS_Berater = " & param1

01 DD001D_M_55050120_1 Abfrage ist der Name der Abfrage, die mit einem Kriterium versehen werden soll.

DD001D_M_55050120_1 ist der Name der Abfrage/Tabelle, die (später) abgefragt werden soll.

VS_Berater = " & param1 ist die Where-Condition (Kriteriums-Ausdruck)
Hier ist VS_Berater vom Datentyp Zahl,Long

Bei Text lautet das so:
VS_Berater = ‚" & param1 & "‘"

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!

Guten Morgen Franz,

gestern war ich leider auf Tour.

Habe es eben ausprobiert und „ES FUNKTIONIERT“!!!

Vielen herzlichen Dank für die Hilfe :smile:

Ich vermute mal es macht keinen Unterschied das das Feld" VS_Berater" in der Tabelle das nicht als „long integer“ sondern „double“ eingestellt ist?

Viele Grüße

Gregor

Hallo,

doch, das macht einen Unterschied…

Spätestens dann, wenn, aus welchen Gründen auch immer, ein Dezimalteil (Stellen nach dem Komma) in der Zahl enthalten ist (sind) …

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!

Hallo,

dann bin ich beruhigt, da hier generell nur ganze Zahlen auftauchen.

Eine letzte Frage habe ich noch. Durch diese Formularprogrammierung wird mir das Kriterium ja so wie ich es wollte abgespeichert. Mit welchem Befehl kann ich denn diese Eingabe löschen?

Oder gibt es eine Eingabe mit der alle verfügbaren Datensätze ausgegeben werden? z.B. „*“ (stern) ?

Vielen Dank im Voraus.

Gregor.

Hallo,

dann bin ich beruhigt, da hier generell nur ganze Zahlen
auftauchen.

Und ich wäre erst dann beruhigt, wenn das Tabellenfeld auf Long Integer eingestellt wird…

Eine letzte Frage habe ich noch. Durch diese
Formularprogrammierung wird mir das Kriterium ja so wie ich es
wollte abgespeichert. Mit welchem Befehl kann ich denn diese
Eingabe löschen?

Löschen nur, indem ein anderer SQL-String zugewiesen wird, der keine Where-Condition besitzt.

Oder gibt es eine Eingabe mit der alle verfügbaren Datensätze
ausgegeben werden? z.B. „*“ (stern) ?

Nein, nicht bei Datentyp Zahl (ob Double oder Integer). „Stern“ funktioniert nur in Verbindung mit dem LIKE-Operator (anstelle „=“) und einem Feld mit Datentyp TEXT.

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!