Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Dateinamen aus 2 Kombinationsfeldern aus einem Unterformular zusammensetzen

Begonnen von Atuatuca, Juli 14, 2019, 22:20:05

⏪ vorheriges - nächstes ⏩

Atuatuca

Hallo Access O Maniacs,

habe hier ein kleines Problem.

Ich versuche aus 2 Kombinationsfeldern, aus einem Unterformular, die Werte (das was angezeigt wird, nicht die gebundene Spalte 0) als Dateinamen zu verwenden.

Wenn ich nur ein Kombinationsfeld nehme funktioniert es, wenn ich jedoch 2 Kombinationsfelder nehme funktioniert es nicht mehr.

hier funktioniert es

Private Sub btn_bericht_pdf_Click()
Dim reportName As String
    Dim fileName As String
    Dim criteria As String
    Dim Lieferant As String
    Dim Artikel As String
   
    reportName = "rep_BA"
    Artikel = [Forms]![frm_BA]![ufrm_BA_1]![cbo_Art].Text
    fileName = CurrentProject.Path & "\" & "BA - " & Artikel & " - " & Lieferant & " - " & Me!Pruefdatum & ".pdf"
    criteria = "ID_BA = " & Me![txtf_ID_BA]
    DoCmd.OpenReport reportName, acViewPreview, , criteria, acHidden
    DoCmd.OutputTo acOutputReport, reportName, acFormatPDF, fileName
    DoCmd.Close acReport, reportName, acSaveNo
End Sub


wenn ich jetzt das zweite Kombinationsfeld hinzunehme nicht mehr.

Private Sub btn_bericht_pdf_Click()
Dim reportName As String
    Dim fileName As String
    Dim criteria As String
    Dim Lieferant As String
    Dim Artikel As String
   
    reportName = "rep_BA"
  Artikel = [Forms]![frm_BA]![ufrm_BA_1]![cbo_Art].Text
    Lieferant = [Forms]![frm_BA]![ufrm_BA_1]![cbo_Lfrt].Text[/b]
    fileName = CurrentProject.Path & "\" & "BA - " & Artikel & " - " & Lieferant & " - " & Me!Pruefdatum & ".pdf"
    criteria = "ID_BA = " & Me![txtf_ID_BA]
    DoCmd.OpenReport reportName, acViewPreview, , criteria, acHidden
    DoCmd.OutputTo acOutputReport, reportName, acFormatPDF, fileName
    DoCmd.Close acReport, reportName, acSaveNo
End Sub


Atuatuca

natürlich ohne "[/b]"


Private Sub btn_bericht_pdf_Click()
Dim reportName As String
    Dim fileName As String
    Dim criteria As String
    Dim Lieferant As String
    Dim Artikel As String
   
    reportName = "rep_BA"
  Artikel = [Forms]![frm_BA]![ufrm_BA_1]![cbo_Art].Text
    Lieferant = [Forms]![frm_BA]![ufrm_BA_1]![cbo_Lfrt].Text
    fileName = CurrentProject.Path & "\" & "BA - " & Artikel & " - " & Lieferant & " - " & Me!Pruefdatum & ".pdf"
    criteria = "ID_BA = " & Me![txtf_ID_BA]
    DoCmd.OpenReport reportName, acViewPreview, , criteria, acHidden
    DoCmd.OutputTo acOutputReport, reportName, acFormatPDF, fileName
    DoCmd.Close acReport, reportName, acSaveNo
End Sub

DF6GL

Hallo,

lass ".Text" weg.


.Text kann nur verwendet, wenn das Control auch aktuell den Fokus besitzt.   Und zwei Felder können nicht gleichzeitig den Fokus haben.

Du solltest die Ablauflogik überdenken und die Werte aus gebundenen Form-Textfeldern entnehmen oder z. B. mit Dlookup aus der/den Tabelle/n auslesen.


Atuatuca

Hallo Franz,

danke für den Hinweis.

Also müsste es mit u.g. code funktionieren:



Public Function FirmenIDErmitteln(strFirma As String) As Long
    Lieferant = DLookup("Lieferant", "tbl_Lfrt", "ID_Lfrt LIKE '" & [forms]![frm_BA]![ufrm_BA_1]![cbo_Lfrt] & "'")
    Artikel = DLookup("ArtNr", "tbl_Art", "ID_Art LIKE '" & [forms]![frm_BA]![ufrm_BA_1]![cbo_Art] & "'")

End Function


Für Lieferant:
Suche in tbl_Lfrt nach der ID_Lfrt wie Kombinationsfeld cbo_Lfrt (gebundene Spalte) und gebe mir den Wert der Spalte Lieferant zurück.

Für Artikel:
Suche in tbl_Art nach der ID_Art wie Kombinationsfeld cbo_Art (gebundene Spalte) und gebe mir den Wert der Spalte ArtNr zurück.

Gruss
Rudi

Beaker s.a.

@Atuatuca
Zitatdie Werte (das was angezeigt wird, nicht die gebundene Spalte 0) als Dateinamen zu verwenden.
Artikel = [Forms]![frm_BA]![ufrm_BA_1]![cbo_Art].Column(1)
    Lieferant = [Forms]![frm_BA]![ufrm_BA_1]![cbo_Lfrt].Column(1)
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Beaker s.a.

@Atuatuca
Hat sich überschnitten, aber dein Code wirft Fragen auf, -
Lieferant = DLookup("Lieferant", "tbl_Lfrt", "ID_Lfrt LIKE '" & [forms]![frm_BA]![ufrm_BA_1]![cbo_Lfrt] & "'")
sind deine IDs wirklich vom Typ "Text"? Das würde ich schleunigst ändern.
Sind das Zahlen vom Typ "Long", was richtig wäre, müssen die "'" weg und
LIKE (zumal auch noch ohne Joker-Zeichen verwendet) macht keinen Sinn,
da ein Kombi immer den kompletten Wert einer Spalte zurückgibt.
Ausserdem geht das Ganze auch kürzer, wenn sich der Button auf frm_BA
befindet
Lieferant = DLookup("Lieferant", "tbl_Lfrt", "ID_Lfrt = " & Me![ufrm_BA_1].Form![cbo_Lfrt])
(Die Referenz auf das Formular im UFo-Steuerelement fehlt bei dir i.Ü. auch.

gruss ekkehard

P.S. LIKE ohne Joker ist wie =, nur ohne Indexnutzung (wenn ich nicht irre).
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Atuatuca

Hallo Ekkehard,

IDs wirklich vom Typ "Text"?
Nein, sind alles Zahlen

Sind das Zahlen vom Typ "Long" ?
Nein, Zahlen sind long integer

Ausserdem geht das Ganze auch kürzer, wenn sich der Button auf frm_BA befindet
Ja, der Button befindet sich auf frm_BA.

Könnte man es so machen ?


Private Sub btn_bericht_pdf_Click()
Dim reportName As String
    Dim fileName As String
    Dim criteria As String
    Dim Lieferant As String
    Dim Artikel As String
   
    reportName = "rep_BA"
      Artikel = DLookup("Lieferant", "tbl_Art", "ID_Art = " & Me![ufrm_BA_1].Form![cbo_Art])
      Lieferant = DLookup("Lieferant", "tbl_Lfrt", "ID_Lfrt = " & Me![ufrm_BA_1].Form![cbo_Lfrt])
    fileName = CurrentProject.Path & "\" & "BA - " & Artikel & " - " & Lieferant & " - " & Me!Pruefdatum & ".pdf"
    criteria = "ID_BA = " & Me![txtf_ID_BA]
    DoCmd.OpenReport reportName, acViewPreview, , criteria, acHidden
    DoCmd.OutputTo acOutputReport, reportName, acFormatPDF, fileName
    DoCmd.Close acReport, reportName, acSaveNo
End Sub


oder besser so:


Private Sub btn_bericht_pdf_Click()
Dim reportName As String
    Dim fileName As String
    Dim criteria As String
    Dim Lieferant As String
    Dim Artikel As String
   
    reportName = "rep_BA"
    Artikel = [Forms]![frm_BA]![ufrm_BA_1]![cbo_Art].Column(1) 'zweite Spalte aus cbo_Art
    Lieferant = [Forms]![frm_BA]![ufrm_BA_1]![cbo_Lfrt].Column(1) 'zwiete Spalte aus cbo_Lfrt
    fileName = CurrentProject.Path & "\" & "BA - " & Artikel & " - " & Lieferant & " - " & Me!Pruefdatum & ".pdf"
    criteria = "ID_BA = " & Me![txtf_ID_BA]
    DoCmd.OpenReport reportName, acViewPreview, , criteria, acHidden
    DoCmd.OutputTo acOutputReport, reportName, acFormatPDF, fileName
    DoCmd.Close acReport, reportName, acSaveNo
End Sub


Oder liege ich völlig falsch und es muss über eine "Public Function" laufen.

Gruss
Rudi

Beaker s.a.

Hallo Rudi,
Nein, beim Button ist das IMO schon gut aufgehoben.
Ob du das nun per DLookup machst oder direkt auf die Kombis zugreifst ist
mehr oder weniger egal. Obwohl DLookup wahrscheinlich langsamer ist.
Aber auch beim direkten Zugriff kannst du die Referenz auf das HFo durch
"Me." abkürzen
Artikel = Me![ufrm_BA_1]![cbo_Art].Column(1)

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Atuatuca

Moin Ekkehard,

danke erst einmal.

dann werde ich es später mal versuchen mit:


Private Sub btn_bericht_pdf_Click()
Dim reportName As String
    Dim fileName As String
    Dim criteria As String
    Dim Lieferant As String
    Dim Artikel As String
   
    reportName = "rep_BA"
    Artikel = [Forms]![frm_BA]![ufrm_BA_1]![cbo_Art].Column(1) 'zweite Spalte aus cbo_Art
    Lieferant = [Forms]![frm_BA]![ufrm_BA_1]![cbo_Lfrt].Column(1) 'zwiete Spalte aus cbo_Lfrt
    fileName = CurrentProject.Path & "\" & "BA - " & Artikel & " - " & Lieferant & " - " & Me!Pruefdatum & ".pdf"
    criteria = "ID_BA = " & Me![txtf_ID_BA]
    DoCmd.OpenReport reportName, acViewPreview, , criteria, acHidden
    DoCmd.OutputTo acOutputReport, reportName, acFormatPDF, fileName
    DoCmd.Close acReport, reportName, acSaveNo
End Sub


Gruss
Rudi

Atuatuca

Moin Franz & Ekkehard,

vielen Dank für die Unterstützung. Mein Problemchen ist gelöst. Leider werden noch viele weitere Folgen :-X :-X

Stehe noch weit am Anfang meines Projektes / Datenbank.

Hier mein Code für diejenigen die es für Ihre eigene Datenbank verwenden möchten


Private Sub btn_bericht_pdf_Click()
Dim reportName As String
    Dim fileName As String
    Dim criteria As String
    Dim Lieferant As String     'variable definieren
    Dim Artikel As String       'variable definieren
   
    reportName = "rep_BA"       'welcher Bericht soll verwendet werden. Hier den Bericht mit dem Namen "rep_BA"
    Artikel = Me![ufrm_BA_1]![cbo_Art].Column(1)
    'nehme den Wert der 2. Spalte des Kombinationfeldes cbo_Art in Unterformular ufrm_BA_1
   
    Lieferant = Me![ufrm_BA_1]![cbo_Lfrt].Column(1)
    'nehme den Wert der 2. Spalte des Kombinationfeldes cbo_Lfrt in Unterformular ufrm_BA_1
   
    'jetzt wird der Pfad und den Dateiname definiert. Hier wird das Aktuelles Verzeichnis genommen,
    'Dateiname = BA - + variable Lieferant + variable Artikel + textfeld Pruefdatum im aktuellen Hauptformular
    fileName = CurrentProject.Path & "\BA - " & Lieferant & " - " & Artikel & " - " & Me!Pruefdatum & ".pdf"
   
    'hier wird die Bedingung (Filter) definiert und zwar den aktuellen Datensatz.
    criteria = "ID_BA = " & Me![txtf_ID_BA]
    DoCmd.OpenReport reportName, acViewPreview, , criteria, acHidden
    DoCmd.OutputTo acOutputReport, reportName, acFormatPDF, fileName
    DoCmd.Close acReport, reportName, acSaveNo
End Sub


Gruss
Rudi

Beaker s.a.

@Regulars
Artikel = Me![ufrm_BA_1]![cbo_Art].Column(1)
Geht das wirklich ohne die Form-Referenz?
ZitatArtikel = Me![ufrm_BA_1].Form![cbo_Art].Column(1)
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)