Irgend wie sehe ich den Wald vor lauter Bäumen nicht ;-)
Ich habe folgendes Problem: In einem Formular habe ich ein Kombifeld in
dessen Liste 3 Spalten (ID, Lieferantennr.,Lieferantenname) sind. Gebundene
Spalte (mit Breite = 0cm) ist die 1. (ID), angezeigt werden soll aber in dem
K-Feld die Lieferantennr.
Wenn ich das jetzt Manuell per Maus auswähle funktioniert das soweit auch
ganz gut.
Jetzt möchte ich den Wert aber auch automatisch per VBA einstellen und habe
das sowohl mit
Me![Kombinationsfeld] = ID
als auch mit
Me![Kombinationsfeld] = Lieferantennr.
versucht, aber irgend wie funzt beides nicht, ich sehe immer nur ein leeres
Feld. Wie kann ich jetzt in dem Feld ein Wert per VBA übergeben, dass das
Feld den Wert der ID enthält, aber die entsp. Lieferantennr angezeigt wird ???
Für Hilfe währe ich unendlich dankbar
Viele Grüße
Andreas
> Ich habe folgendes Problem: In einem Formular habe ich ein Kombifeld in
> dessen Liste 3 Spalten (ID, Lieferantennr.,Lieferantenname) sind. Gebundene
> Spalte (mit Breite = 0cm) ist die 1. (ID), angezeigt werden soll aber in dem
> K-Feld die Lieferantennr.
> Wenn ich das jetzt Manuell per Maus auswähle funktioniert das soweit auch
> ganz gut.
> Jetzt möchte ich den Wert aber auch automatisch per VBA einstellen und habe
> das sowohl mit
>
> Me![Kombinationsfeld] = ID
>
> als auch mit
>
> Me![Kombinationsfeld] = Lieferantennr.
>
> versucht, aber irgend wie funzt beides nicht, ich sehe immer nur ein leeres
> Feld.
Der zweite Fall kann in der Form nicht in deinem Code stehen, der Punkt
würde einen Fehler auslösen.
Richtig ist in jedem Fall die Zuweisung der gebundenen Spalte, bei dir
also der ID. Ggf. könntest du die Value-Eigenschaft explizit ansprechen,
diese ist für Kombinationsfelder allerdings auch die Standardeigenschaft:
Me![Kombinationsfeld].Value = ID
Wäre noch die Frage, ob "ID" eine Variable mit dem gewünschten Wert ist
und dieser Code überhaupt ausgeführt wird? Zeig doch mal den kompletten
Code zum Befüllen des Feldes her.
Viele Grüße aus Bremen,
Stefan
erst einmal Danke für deine schnelle Antwort
"Stefan Dase" wrote:
> Hallo Andreas!
>
> > Ich habe folgendes Problem: In einem Formular habe ich ein Kombifeld in
> > dessen Liste 3 Spalten (ID, Lieferantennr.,Lieferantenname) sind. Gebundene
> > Spalte (mit Breite = 0cm) ist die 1. (ID), angezeigt werden soll aber in dem
> > K-Feld die Lieferantennr.
> > Wenn ich das jetzt Manuell per Maus auswähle funktioniert das soweit auch
> > ganz gut.
> > Jetzt möchte ich den Wert aber auch automatisch per VBA einstellen und habe
> > das sowohl mit
> >
> > Me![Kombinationsfeld] = ID
> >
> > als auch mit
> >
> > Me![Kombinationsfeld] = Lieferantennr.
> >
> > versucht, aber irgend wie funzt beides nicht, ich sehe immer nur ein leeres
> > Feld.
>
> Der zweite Fall kann in der Form nicht in deinem Code stehen, der Punkt
> würde einen Fehler auslösen.
Stimmt !! der Einfachheit halber habe ich das etwas vereinfacht dargestellt,
der richtige Code sieht folgendermaßen aus:
'Überprüfen Wieviele Lieferanten für diese TNR geladen
Select Case DCount("[ID]", "tblLieferanten", "[Stamm_ID]=" &
Me![Artikelnummer] & " AND [Deaktiviert]=False")
Case 0
'Nichts tun
Me![Kombinationsfeld9] = Null
Me![Text11] = Null
Me![Kombinationsfeld9].RowSource = ""
Case 1
Me![Kombinationsfeld9].Value = DLookup("[Lieferantennr]",
"tblLieferanten", "[Stamm_ID]=" & Me![Artikelnummer] & " AND
[Deaktiviert]=False")
Me![Text11] = DLookup("[Lieferant]", "tblLieferanten",
"[Stamm_ID]=" & Me![Artikelnummer] & " AND [Deaktiviert]=False")
Me![Kombinationsfeld9].RowSource = "SELECT
tblLieferanten.Stamm_ID, tblLieferanten.Lieferantennr,
tblLieferanten.Lieferant " _
& "FROM tblLieferanten " _
& "WHERE (((tblLieferanten.Stamm_ID)=" & Me![Artikelnummer] & ")
AND ((tblLieferanten.Deaktiviert)=False));"
Case Else
Me![Kombinationsfeld9] = Null
Me![Text11] = Null
Me![Kombinationsfeld9].RowSource = "SELECT
tblLieferanten.Stamm_ID, tblLieferanten.Lieferantennr,
tblLieferanten.Lieferant " _
& "FROM tblLieferanten " _
& "WHERE (((tblLieferanten.Stamm_ID)=" & Me![Artikelnummer] & ")
AND ((tblLieferanten.Deaktiviert)=False));"
End Select
Hintergrund hierfür: Ich möchte zuerst Prüfen wieviele Lieferanten für eine
Teilnummer in der DB geladen sind. Wenn nur 1 Lieferant geladen, dann soll
die Nr. auch schon in das Kombifeld eingetragen werden (incl der
Lieferantenname in Feld Text11)
>
> Richtig ist in jedem Fall die Zuweisung der gebundenen Spalte, bei dir
> also der ID. Ggf. könntest du die Value-Eigenschaft explizit ansprechen,
> diese ist für Kombinationsfelder allerdings auch die Standardeigenschaft:
>
> Me![Kombinationsfeld].Value = ID
Habe ich probiert, funktioniert leider auch nicht
>
> Wäre noch die Frage, ob "ID" eine Variable mit dem gewünschten Wert ist
> und dieser Code überhaupt ausgeführt wird? Zeig doch mal den kompletten
> Code zum Befüllen des Feldes her.
Der Code wird ausgeführt, denn der Lieferantename (Text11) wird immer
richtig befüllt und auch die Rowsource Eigenschaft wir richtig gesetzt
>
> Viele Grüße aus Bremen,
> Stefan
> .
>
Für Hilfe nach wie vor vielen Dank
Gruß
Andreas
> Case 1
>
> Me![Kombinationsfeld9].Value = DLookup("[Lieferantennr]",
> "tblLieferanten", "[Stamm_ID]="& Me![Artikelnummer]& " AND
> [Deaktiviert]=False")
> Me![Text11] = DLookup("[Lieferant]", "tblLieferanten",
> "[Stamm_ID]="& Me![Artikelnummer]& " AND [Deaktiviert]=False")
>
> Me![Kombinationsfeld9].RowSource = "SELECT
> tblLieferanten.Stamm_ID, tblLieferanten.Lieferantennr,
> tblLieferanten.Lieferant " _
> & "FROM tblLieferanten " _
> & "WHERE (((tblLieferanten.Stamm_ID)="& Me![Artikelnummer]& ")
> AND ((tblLieferanten.Deaktiviert)=False));"
Irre ich mich, oder weist du erst den Value zu und dann die RowSource?
Sinn macht es eher anders rum!
Tipp: Wenn du nur eine Tabelle in der SQL-Anweisung verwendest, dann
kannst du die Felder ohne Tabellennamen verwenden; macht die Sache etwas
übersichtlicher:
Me![Kombinationsfeld9].RowSource = _
"SELECT Stamm_ID, Lieferantennr, Lieferant " & _
"FROM tblLieferanten " & _
"WHERE (Stamm_ID="& Me![Artikelnummer]& ") AND (Deaktiviert=False);"
HTH,
Stefan
"Stefan Dase" wrote:
> Hallo Andreas!
>
> > Case 1
> >
> > Me![Kombinationsfeld9].Value = DLookup("[Lieferantennr]",
> > "tblLieferanten", "[Stamm_ID]="& Me![Artikelnummer]& " AND
> > [Deaktiviert]=False")
> > Me![Text11] = DLookup("[Lieferant]", "tblLieferanten",
> > "[Stamm_ID]="& Me![Artikelnummer]& " AND [Deaktiviert]=False")
> >
> > Me![Kombinationsfeld9].RowSource = "SELECT
> > tblLieferanten.Stamm_ID, tblLieferanten.Lieferantennr,
> > tblLieferanten.Lieferant " _
> > & "FROM tblLieferanten " _
> > & "WHERE (((tblLieferanten.Stamm_ID)="& Me![Artikelnummer]& ")
> > AND ((tblLieferanten.Deaktiviert)=False));"
>
> Irre ich mich, oder weist du erst den Value zu und dann die RowSource?
> Sinn macht es eher anders rum!
>
Genau das habe ich mir genau 2 sek. nachdem ich den "Senden"-Button geklickt
habe auch gedacht. Habe es dann gleich ausprobiert, hat aber leider auch
nicht funktioniert.
Ist es denn wirklich nicht möglich dem genannten Kombi-Feld eine Wert per
VBA zuzuweisen????
> Tipp: Wenn du nur eine Tabelle in der SQL-Anweisung verwendest, dann
> kannst du die Felder ohne Tabellennamen verwenden; macht die Sache etwas
> übersichtlicher:
>
> Me![Kombinationsfeld9].RowSource = _
> "SELECT Stamm_ID, Lieferantennr, Lieferant " & _
> "FROM tblLieferanten " & _
> "WHERE (Stamm_ID="& Me![Artikelnummer]& ") AND (Deaktiviert=False);"
>
Danke für den Tipp.
> HTH,
> Stefan
> .
>
Nach wie vor währe ich sehr dankbar, wenn mir jemand bei meinem Problem
helfen kann.
Gruß
Andreas
>> Irre ich mich, oder weist du erst den Value zu und dann die RowSource?
>> Sinn macht es eher anders rum!
>>
>
> Genau das habe ich mir genau 2 sek. nachdem ich den "Senden"-Button geklickt
> habe auch gedacht. Habe es dann gleich ausprobiert, hat aber leider auch
> nicht funktioniert.
> Ist es denn wirklich nicht möglich dem genannten Kombi-Feld eine Wert per
> VBA zuzuweisen????
Grundsätzlich kann einem Kombifeld wie einem Textfeld ein Wert per VBA
zugewiesen werden.
Um dein Problem einzukreisen, mache mal bitte folgendes:
1. Mache die ID-Spalte testweise sichtbar.
2. Setz einen Haltepunkt auf die Zeile mit der Wertzuweisung
Me![Kombinationsfeld9].RowSource = ...
3. Zeige das Formular an und lass den Code auf diese Anweisung laufen.
4. Öffne den Code zum Debuggen.
5. Prüfe in der VBA-IDE, welchen Rückgabewert die DLookup-Funktion
liefert.
6. Prüfe, ob dieser Wert auch in der Kombiliste zur Auswahl steht.
Falls bis hierher noch alles wie erwartet läuft:
7. Führe die Zuweisung im Debugmodus mit F8 (Einzelschritt) aus.
8. Frage den aktuellen Wert des Kombifeldes ab, z.B. im Direktfenster
mit: ? Me![Kombinationsfeld9].Value
Die wiederholten D-Zugriffe auf die Tabelle sind eine enorme
Performancebremse, besonders, wenn du das im Netz machst.
Ich w�rde dir empfehlen, einen Verweis auf DAO zu setzen,
falls du den noch nicht hast (s. www.donkarl.com/?FAQ7.1)
und dann:
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim strSQL As String
Dim lngCount As Long
Set db = Currentdb
strSQL = "SELECT Stamm_ID, Lieferantennr, Lieferant" & _
" FROM tblLieferanten" & _
" WHERE Stamm_ID=" & Me!Artikelnummer & _
" AND Deaktiviert=False"
Set rs = db.OpenRecordset(strSQL, dbopendynaset)
If Not rs.BOF Then
rs.MoveLast
lngCount = rs.RecordCount
End If
Select Case lngCount
Case 0
Me!Kombinationsfeld9.RowSource = ""
Me!Kombinationsfeld9 = Null
Me!Text11 = Null
Case 1
Me!Kombinationsfeld9.RowSource = strSQL
Me!Kombinationsfeld9 = rs!Lieferantennr
Me!Text11 = rs!Lieferant
Case Else
Me!Kombinationsfeld9.RowSource = strSQL
Me!Kombinationsfeld9 = Null
Me!Text11 = Null
End Select
Untendran dann noch eine Fehlerbehandlung und Aufr�umen
der Variablen. Das war mir jetzt zu viel zum Tippen.
Au�erdem empfehle ich dir dringend, deinen Steuerelementen
sprechende Namen zu geben, also z.B. cboLieferantenNr und
txtLieferant f�r die beiden hier involvierten.
--
Servus
Karl
****************
Access-FAQ: http://www.donkarl.com
"Stefan Dase" wrote:
> Hallo Andreas!
>
> >> Irre ich mich, oder weist du erst den Value zu und dann die RowSource?
> >> Sinn macht es eher anders rum!
> >>
> >
> > Genau das habe ich mir genau 2 sek. nachdem ich den "Senden"-Button geklickt
> > habe auch gedacht. Habe es dann gleich ausprobiert, hat aber leider auch
> > nicht funktioniert.
> > Ist es denn wirklich nicht möglich dem genannten Kombi-Feld eine Wert per
> > VBA zuzuweisen????
>
> Grundsätzlich kann einem Kombifeld wie einem Textfeld ein Wert per VBA
> zugewiesen werden.
>
> Um dein Problem einzukreisen, mache mal bitte folgendes:
> 1. Mache die ID-Spalte testweise sichtbar.
Also das ganze habe ich mal so durchprobiert. Folgendes ist dabei
rausgekommen:
Sobald ich die ID-Spalte einblende funktioniert alles fast wie gewollt.
Einzig in dem Kombifeld steht jetzt die ID und nicht die gewollte
Lieferanten-Nummer. Aber auch wenn ich das Manuell auswähle steht jetzt darin
die ID.
Dies funktioniert aber leider nicht, da es die User durcheinander bringen
wird. Auch die Nummer als ID verwenden geht nicht.
> 2. Setz einen Haltepunkt auf die Zeile mit der Wertzuweisung
> Me![Kombinationsfeld9].RowSource = ...
> 3. Zeige das Formular an und lass den Code auf diese Anweisung laufen.
> 4. Öffne den Code zum Debuggen.
> 5. Prüfe in der VBA-IDE, welchen Rückgabewert die DLookup-Funktion
> liefert.
Die D.. Funktion hat den erwarteten Wert, nämlich die ID geliefert.
Bei eingeblendeter ID spalte steht jetzt die ID im Feld, bei ausgeblendet
eben nichts
> 6. Prüfe, ob dieser Wert auch in der Kombiliste zur Auswahl steht.
Steht er
>
> Falls bis hierher noch alles wie erwartet läuft:
> 7. Führe die Zuweisung im Debugmodus mit F8 (Einzelschritt) aus.
> 8. Frage den aktuellen Wert des Kombifeldes ab, z.B. im Direktfenster
> mit: ? Me![Kombinationsfeld9].Value
Das Feld enthält in beiden Fällen den ID Wert.
>
> Viele Grüße aus Bremen,
> Stefan
> .
>
Sorry, das dass doch etwas ausufert, aber für Hilfe nach wie vor vielen Dank
Gruß
Andreas
danke für den tipp, habe ich direkt umgesetzt, aber leider löst der Code
mein eigentliches Problem nicht.
Wenn du mir da weiterhelfen könntest währe ich dir sehr dankbar, da mir auch
kein "WorkAround" hierfür einfällt.
Was ich bräuchte ist ein Kombifeld des die LieferantenNr anzeigt, aber die
ID enthält.
Manuell geht das, aber eben per VBA nicht. Auf jeden Fall kenn ich kein Lösung
Viele Grüße
Andreas
"Karl Donaubauer" wrote:
> Andreas Gauer wrote:
> > ...
> >>> Jetzt möchte ich den Wert aber auch automatisch per VBA einstellen
> >>> und habe das sowohl mit
> >>>
> >>> Me![Kombinationsfeld] = ID
> >>>
> >>> versucht, aber irgend wie funzt beides nicht, ich sehe immer nur
> >>> ein leeres Feld.
> >
> > 'Überprüfen Wieviele Lieferanten für diese TNR geladen
> > Hintergrund hierfür: Ich möchte zuerst Prüfen wieviele Lieferanten
> > für eine Teilnummer in der DB geladen sind. Wenn nur 1 Lieferant
> > geladen, dann soll die Nr. auch schon in das Kombifeld eingetragen
> > werden (incl der Lieferantenname in Feld Text11)
> > ...
>
> Die wiederholten D-Zugriffe auf die Tabelle sind eine enorme
> Performancebremse, besonders, wenn du das im Netz machst.
> Ich würde dir empfehlen, einen Verweis auf DAO zu setzen,
> Untendran dann noch eine Fehlerbehandlung und Aufräumen
> der Variablen. Das war mir jetzt zu viel zum Tippen.
>
> Außerdem empfehle ich dir dringend, deinen Steuerelementen
> sprechende Namen zu geben, also z.B. cboLieferantenNr und
> txtLieferant für die beiden hier involvierten.
>
> --
> Servus
> Karl
> ****************
> Access-FAQ: http://www.donkarl.com
>
>
> .
>
da der Wert in das Kombinationsfeld eingetragen, aber nicht angezeigt wird:
Benutzt Du Access2003 / SP3 ?
Da hilft das Hotfix
http://support.microsoft.com/kb/945674
Gruß
Lars.
"Andreas Gauer" wrote:
> Hallo,
> Also das ganze habe ich mal so durchprobiert. Folgendes ist dabei
> rausgekommen:
> Sobald ich die ID-Spalte einblende funktioniert alles fast wie gewollt.
> Einzig in dem Kombifeld steht jetzt die ID und nicht die gewollte
> Lieferanten-Nummer. Aber auch wenn ich das Manuell auswähle steht jetzt darin
> die ID.
Irgendwo muss bei dir noch der Wurm drin sein. Du kannst einem Kombofeld
den gebundenen Wert zuweisen und er zeigt die erste sichtbare Spalte an.
Ein bisschen stutzig macht mich deine Anweisung, nachdem du in der
letzten Nachricht von Lieferantennr. und ID gesprochen hast:
> Me![Kombinationsfeld9].Value = DLookup("[Lieferantennr]", ...)
^^^^^^^^^^^^^^
Muss hier nicht irgendwas mit ID stehen?
Wenn du gar nicht weiterkommst, kannst du ein Muster deiner Datenbank
irgendwie zum Download anbieten?
Stefan hat in seinem letzten Beitrag eh schon drauf hingewiesen,
was ich auch übersehen hatte: Die Wertzuweisung an das Kombi
muss natürlich passend zur gebundenen Spalte gemacht werden.
Falls ich deine sonstige Erzählung richtig verstanden hatte, wäre
das statt
Me!Kombinationsfeld9 = rs!Lieferantennr
dann richtig
Me!Kombinationsfeld9 = rs!Stamm_ID
oder auch
Me!Kombinationsfeld9 = Me!Artikelnummer
oder was auch immer zur gebundenen Spalte passt,
die du in der Erläuterung "ID" genannt hast, .
Am 22.04.2010 09:05, schrieb Andreas Gauer:
> Hintergrund hierfür: Ich möchte zuerst Prüfen wieviele Lieferanten für eine
> Teilnummer in der DB geladen sind. Wenn nur 1 Lieferant geladen, dann soll
> die Nr. auch schon in das Kombifeld eingetragen werden (incl der
> Lieferantenname in Feld Text11)
probier mal den Folgenden Code:
Me!Kombinationsfeld9 = Me!Kombinationsfeld9.ItemData(0)
Damit setzt den Wert des Kombinationsfelds auf den ersten Eintrag -
unabhängig von dessen Inhalt.
BTW: Du solltest Deinen Steuerelementen erst "vernünftige" Namen geben,
bevor Du VBA-Code daran bindest. Das erhöht einfach die Lesbarkeit
Deines Codes. Weitere Infos findest Du hier:
http://www.team-moeller.de/?Tipps_und_Tricks:Regeln_und_Hinweise_fuer_gutes_VBA:Steuerelemente_aussagekraeftig_benamsen
(Link in einer Zeile)
HTH
--
Thomas
Homepage: www.Team-Moeller.de
Das hier hat geholfen.
Vielen Dank nocheinmal an alle, die mich hier bei der Problembehebung
unterstütz haben. Ihr habt mein Wochenende gerettet ;-)
die Tipps zur benamsung werde ich mir auch zu Herze nehmen. Macht wirklich
Sinn.
Ansonsten viele Grüße und ein schönes Wochenende
Andreas
"Thomas Möller" wrote:
> .
>