Neuigkeiten:

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

Mobiles Hauptmenü

Access Abfrage in Excel schreiben mit mehrfach verbundener Tabelle

Begonnen von silentwolf, Oktober 05, 2019, 11:39:06

⏪ vorheriges - nächstes ⏩

silentwolf

Hallo an alle!
Ich möchte gerne meine Daten in eine Excel worksheet schreiben aus einer Access Abfrage.
Alles kein großes Problem ausser das ich einen tblFahrten mit tblObjekte mehrfach verknüpft habe.
Also Fahrt_Von und Fahrt_Bis sind mit der tblObjekte verknüpft.
Auch das ist ja kein Problem nur möchte ich nun diese Daten in mein Excel Worksheet übertragen mit einem Recordset.

Alles funktioniert aber wenn ich Obj_Name also field angebe dann bekomme ich einen Laufzeitfehler 3265 Element in dieser Auflistung nicht gefunden.
Ich habe in der qryAbrechnung das Feld "Obj_Name" mit einem Alias versehen und das probiert aber trotzdem funktioniert es nicht.

Kann mir jemand sagen wie man dieses Problem lösen könnte?

Vielen Dank

Albert

ebs17

Wie wäre es mit dem Anschauen und Analysieren des Codes, der dafür zuständig ist?
Mit freundlichem Glück Auf!

Eberhard

silentwolf

Hallo Eberhard,

anbei der Code und ein Bild der Abfrage.

Sub WriteToExcel()
    Dim appExcel As Excel.Application
    Dim wbkExcel As Excel.Workbook
    Dim wksExcel As Excel.Worksheet
    Dim rngExcel As Excel.Range
    Dim rcsK As Recordset
    Dim lngZeile As Long
    Dim lngZaehler As Long
   
    Set appExcel = Excel.Application
    Set wbkExcel = appExcel.Workbooks.Open(CurrentProject.Path & "\Stefan_Excel.xlsx", AddToMru:=False)
    appExcel.Visible = True
   
    Set wksExcel = wbkExcel.Worksheets("Stundenaufzeichnung")
    Set rngExcel = wksExcel.UsedRange
   
    lngZeile = wksExcel.Cells(Rows.Count, 1).End(xlUp).Row
   
    Set rcsK = CurrentDb.OpenRecordset("qryAbrechnung", dbOpenDynaset)
   
    lngZaehler = lngZeile + 1     'Damit in der ersten freien Zeile geschrieben wird
   
    Do Until rcsK.EOF
        wksExcel.Cells(lngZaehler, 1).Value = rcsK.Fields("Fahrt_Datum").Value
        wksExcel.Cells(lngZaehler, 2).Value = rcsK.Fields("Klient_NameBerechnet").Value
       
'        wksExcel.Cells(lngZaehler, 3).Value = rcsK.Fields("Obj_Name").Value        'Feldname der ersten Verknüpfung
'        wksExcel.Cells(lngZaehler, 4).Value = rcsK.Fields("Bis").Value       'Feldname der zweiten Verknüpfung Alias name .. Probe!
       
   
        rcsK.MoveNext
        lngZaehler = lngZaehler + 1
    Loop

End Sub



ebs17

Zitatdas Feld "Obj_Name" mit einem Alias versehen
Der Alias wirkt als Feldname nach außen und wäre somit auch zwingend in der Felderauflistung des Recordsets zu verwenden.
Mit freundlichem Glück Auf!

Eberhard

silentwolf

Hallo Eberhard,
das  hab ich schon versucht den im Recordset zu benennen das geht aber leider nicht.

Schöne Grüße

DF6GL

Hallo,

na, was hast Du genau versucht?

.
.
wksExcel.Cells(lngZaehler, 3).Value = rcsK.Fields("Von")    'Alias-Namen einsetzen!
wksExcel.Cells(lngZaehler, 4).Value = rcsK.Fields("Bis")     
.
.

ebs17

Zitatden im Recordset zu benennen
Wieder mal keine Ahnung, was Du machst. Das Recordset übernimmt einfach die Feldnamen aus der Abfrage, da gibt es nichts umzubenennen.

Daneben könnte man aus Einfachheitsgründen, besonders aber aus Performancegründen auf Schleifen und Einzelwertzuweisungen verzichten und etwas Massendatenverarbeitung betreiben:
wksExcel.Cells(lngZaehler, 1).CopyFromRecordset rcsK

Nebenbei spielen dann hier die Feldnamen auch keine Rolle mehr. Man sollte aber in der Abfrage die Felder in der gewünschten Reihenfolge haben.

Zitatmit mehrfach verbundener Tabelle
Es will mir nicht gelingen, diese Formulierung des Thementitels in irgendeiner Form inhaltlich im Thema wiederzufinden. Hat das jetzt eine Bedeutung oder ist das IM?
Mit freundlichem Glück Auf!

Eberhard

silentwolf

Hallo nochmal,
Die Tabelle tblObjekte wird wie in dem Screenshot gezeigt zweimal mit der tblFahrten verknüpft und konnte beim erstellen des threads leider nicht den richtigen Namen dazu finden deshalb dachte ich könnte ich das mehrfachverknüpft nennen was aber natürlich wie richtig bemerkt der falsche Name ist. Deshalb hätte ich auch einen Screenshot angehängt wo man die Verknüpfung sehen und vielleicht erkennt um was es mit der "mehrfachverknüpfung" geht.
Hoffe das es nicht ein allzugroßes Problem ist.
@Franz. Ich habe versucht in der Abfrage einen Alias namen zu verwenden..........Von:[MeinFeldname] und dann diesen
wksExcel.Cells(lngZaehler,3).value= rcsK.Fiels("Von").Value            probiert das geht aber leider nicht

weiteres habe ich folgendes versucht
wksExcel.Cells(lngZaehler,3).value= rcsK.Fiels("Obj_Name").Value     auch kein Erfolg

ich bekomme immer den selben Laufzeitfehler den ich ja schon beschrieben habe.
Nochmal zum Problem:
Es sollen Daten aus der Abfrage in eine Excel Tabelle geschrieben werden. Die Excel Tabelle ist aber eine Vorlage eines "Kunden" die nicht geändert werden kann oder darf und dann an den Kunden ausgefüllt zurück gesendet wird. Deshalb kann ich nicht einfach die ganze Abfrage mit Copy übertragen sondern muß die Daten der Abfrage in der gewünschten Spalte der Excel Tabelle eintragen. Und das wollte ich über VBA schaffen.

Danke nochmal




DF6GL

Hallo,

die Verwendung von Alias-Namen in der Abfrage wird bei OpenRecordset einwandfrei unterstützt.

Vermutlich machst Du einen anderen Fehler.

Wenn der Code mit C&P hereingestellt wurde, dann ist hier etwas falsch:

ZitatIch habe versucht in der Abfrage einen Alias namen zu verwenden..........Von:[MeinFeldname] und dann diesen
wksExcel.Cells(lngZaehler,3).value= rcsK.Fiels("Von").Value            probiert das geht aber leider nicht

weiteres habe ich folgendes versucht
wksExcel.Cells(lngZaehler,3).value= rcsK.Fiels("Obj_Name").Value     auch kein Erfolg


Oder Du verwendest eine andere Abfrage als gezeigt, in der diese Aliase, bzw. Feldnamen nicht vorkommen.

silentwolf

Hallo,
nein hab mich nur verschrieben nicht C&P gemacht.

    Do Until rcsK.EOF
        wksExcel.Cells(lngZaehler, 1).Value = rcsK.Fields("Fahrt_Datum").Value
        wksExcel.Cells(lngZaehler, 2).Value = rcsK.Fields("Klient_NameBerechnet").Value
       
'        wksExcel.Cells(lngZaehler, 3).Value = rcsK.Fields("Von").Value        'Feldname der ersten Verknüpfung
'        wksExcel.Cells(lngZaehler, 4).Value = rcsK.Fields("Bis").Value       'Feldname der zweiten Verknüpfung
       
   
        rcsK.MoveNext
        lngZaehler = lngZaehler + 1
    Loop


ma ich verstehe es nicht dachte ich hätte das alles ausprobiert wie oben der Code jetzt steht.
Jetzt geht es ..

Ma tut mir sehr leid!!!

Danke nochmal an alle!