Neuigkeiten:

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

Mobiles Hauptmenü

Bestimmte Daten vom Formular an bestimmte Zellen an Excel übergeben

Begonnen von Lemmy2902, Mai 20, 2025, 14:03:56

⏪ vorheriges - nächstes ⏩

Knobbi38

Hallo Lemmy,

den Umstieg von ADO nach DAO hast du jetzt vollzogen, ob das in diesem speziellen Fall von Vorteil ist, wird sich noch zeigen. Die anderen Hinweise hast du leider aber nur zum Teil umgesetzt, daran solltest du noch arbeiten.

Was verstehst du denn nun unter  "bestimmter Teil" und in welche Zellen soll das dann geschrieben werden?

Knobbi38


Lemmy2902

ich möchte einen Bericht in Excel machen so wie der Access-Bericht mit Formatierungen und so weiter und dazu müssen die Inhalte an bestimmten Cells sein, name an A2, Baustelle A4, Ticket Nr.: A6 usw.

Lemmy2902


Knobbi38

Hallo Lemmy,

das wird nur mit CopyFromRecordset alleine nicht gehen und natürlich auch nicht in einem Rutsch, den es geht hier um Kopfdaten und Positionsdaten.

Im ersten Schritt kannst du die Kopfdaten per Recordset auslesen und dann jedes Feld einzeln den Zellen zuweisen, wobei benannte Bereiche sicherlich hilfreich sein könnten. Das geht im Prinzp so wie in den Beispielen vorher, also
Range("Name der Zelle").Value = Recordset.Field("Feldname").Value
Im zweiten Schritt werden die Positionsdaten übertragen. Dabei mußt du dir eine Abfrage erstellen, bei welcher die Felder exakt in der gleichen Position sind, wie sie im Bericht benötigt werden. Dann kannst du diese mit CopyFromRecordset an die Zielort zuweisen. Es ginge auch in einer Schleife, Datensatz für Datensatz, aber das wäre nur mehr Aufwand.

Anschließend noch die Formatierungen anpassen und fertig. Wie du die Formatierungen vornimmst, kannst du probehalber mal in Excel mit dem Makrorecorder aufzeichnen und dann analog in Access übertragen.

Aber mal ganz ehrlich, so etwas macht man doch in Access mit einem Report und nicht in Excel.  ::)

Knobbi38

Lemmy2902

danke werde ich mal Versuchen sicher hab ich ja, aber der Wunsch besteht an den Regie-Berichten falls nötig Änderungen vorzunehmen zu können, und da die berichte nur in PDF ausgegeben werden ist das schwierig und ein Export oder in ein anderes office Produkt Umzuwandeln die Formatierungen nicht Übernommen werden.

Knobbi38

Hallo Lemmy,

Zitat... ist aber der Wunsch besteht an den Regie-Berichten falls nötig Änderungen vorzunehmen zu können
Entschuldige, aber das halte ich für kompletten Nonsens. Wenn Änderungen zu machen sind, sollten diese ausnahmslos nur in der der Datenbasis gemacht werden dürfen und dann kann man ggf. einen neuen Bericht ausdrucken.

Aber das ist ein anderes Thema.

Knobbi38

Lemmy2902

Private Sub Befehl139_Click()
     Dim db As DAO.Database
     Dim rst As DAO.Recordset
     Dim i As Long
     Dim oExcel As Object
     
     
     On Error Resume Next
     Err.Clear
     
     Set oExcel = CreateObject("Excel.Applikation")
     If Err.Number <> 0 Then Set oExcel = CreateObject("Excel.Application")
     On Error GoTo 0
     
     Set rst = CurrentDb.OpenRecordset("qryProjektBericht")
     With oExcel
        .Visible = True
        .workbooks.Add
     For i = 0 To rst.Fields.Count - 1
            .Range("A6").Value = rst.Fields("projektID").Value
            .Range("B6").Value = rst.Fields("proStartDatum").Value
            .Range("C6").Value = rst.Fields("proNummer").Value
      Next i
    End With
    Set oExcel = Nothing
    rst.Close
End Sub

Das ist jetzt der Code den ich verwende, mit einer Tabelle klappt es mit einer Abfrage leider nicht
Fehlermeldung: 1 Parameter wurde erwartet aber es wurden zu wenig Parameter Übergeben. es liegt an den Filter den ich in der qryProjektBericht Habe.

SELECT tblProjekte.projektID, tblProjekte.proBericht, tblProjekte.prokun_IDRef, tblProjekte.probau_IDRef, tblProjekte.proNummer, tblProjekte.proStartDatum, tblProjekte.proEndDatum, tblProjekte.proBeschreibung, tblProjekte.proOnIce, tblProjekte.proProjektGeschlossen, tblProjekte.proBericht, tblProjekte.proWeitereArbeiten, tblProjekte.proArbeitenAbgeschlossen, tblProjekte.proAnlagen, tblProjekte.proStundenLimit, tblProjekte.Status, tblProjekte.[Schätzung Std], tblProjekte.DatumAenderung, tblAufgaben.aufgabenid, tblAufgaben.aufper_IDRef, tblAufgaben.aufpro_IDRef, tblAufgaben.mitver_IDRef, tblAufgaben.aufDatum, tblAufgaben.aufStunden, tblAufgaben.aufBemerkung, tblAufgaben.aufStundenMonture, tblAufgaben.aufStundenOMonture, tblBaustellen.baustelleID, tblBaustellen.bauStelle, tblBaustellen.bauBemerkung, tblBerufsgruppe.VerhältnissID, tblBerufsgruppe.verBerufsGruppe, tblMitarbeiter.mitarbeiterID, tblMitarbeiter.mitRufname, tblMitarbeiter.mitNameVor, tblMitarbeiter.mitNameNach, tblMitarbeiter.mitNameAnzeige, tblMitarbeiter.mitStatus, tblMitarbeiter.mitNameLang, tblMitarbeiter.mitTel, tblMitarbeiter.mitPass, tblMitarbeiter.mitAdresse, tblMitarbeiter.mitPLZ, tblMitarbeiter.mitOrt, tblMitarbeiter.mitGeboren, tblMitarbeiter.mitActivEnde, tblMitarbeiter.mitActivStart, tblMitarbeiter.mitAlter
FROM (tblBaustellen INNER JOIN tblProjekte ON tblBaustellen.baustelleID = tblProjekte.probau_IDRef) INNER JOIN (tblBerufsgruppe INNER JOIN (tblMitarbeiter INNER JOIN tblAufgaben ON tblMitarbeiter.mitarbeiterID = tblAufgaben.aufper_IDRef) ON tblBerufsgruppe.VerhältnissID = tblAufgaben.mitver_IDRef) ON tblProjekte.projektID = tblAufgaben.aufpro_IDRef
WHERE (((tblProjekte.projektID)=[Formulare]![frmProjekteVerwaltung]![lstAuftragWaelen]));

Knobbi38

#37
Hallo Lemmy,

ich hatte doch darum gebeten, die Laufzeitfehlernummer mit anzugeben - der Fehlertext alleine reicht nicht immer aus.

In diesem Fall ist die Ursache aber relativ einfach:
Siehe https://www.donkarl.com?FAQ6.4

Du solltest die Abfrage in eine Parameterabfrage umwandeln und dann kannst du diesen Parameter aus der Listbox auslesen und übergeben.

Hier ist das eigentlich ganz gut erklärt:
https://www.donkarl.com?FAQ6.16
https://access-im-unternehmen.de/Parameterabfragen_unter_der_Lupe/

Knobbi38



Lemmy2902

Guten Morgen,
danke für die Antwort und sorry für die Fehlermeldung, aber mit dem Befehl eval komme ich nicht zurecht, wie muss ich das in die Abfrage mit einbauen.

Knobbi38

Hallo Lemmy,

wie Eval() angewendet wird, könntest du auch selber in der Hilfe nachschlagen, daß muß ich hier nicht nochmal wiederholen.

Allerdings halte ich in diesem Zusammenhang Parameterabfragen für sinnvoller und möchte das Thema bezügl. Eval() deshalb nicht weiter vertiefen. Wie das mit den Parameterabfragen geht, kannst du den Links aus #37 entnehmen.

Knobbi38

Lemmy2902


Knobbi38

Zum Beispiel so:

SELECT
...
FROM
...
WHERE tblProjekte.projektID=eval([Formulare]![frmProjekteVerwaltung]![lstAuftragWaelen])


Lemmy2902

danke, bekomme trotzdem den Fehler 3061
SELECT tblProjekte.projektID, tblProjekte.prokun_IDRef, tblProjekte.probau_IDRef, tblProjekte.proNummer, tblProjekte.proStartDatum, tblProjekte.proNummer, tblProjekte.proEndDatum, tblProjekte.proBeschreibung, tblProjekte.proProjektGeschlossen, tblProjekte.proBericht, tblProjekte.proWeitereArbeiten, tblProjekte.proArbeitenAbgeschlossen, tblProjekte.Status, tblWarenEinsatz.materialID, tblWarenEinsatz.matart_IDRef, tblWarenEinsatz.matpro_IDRef, tblWarenEinsatz.warArt_IDRef, tblWarenEinsatz.warson_IDRef, tblWarenEinsatz.warson_IDRef, tblWarenEinsatz.artMenge, tblWarenEinsatz.artMaterial, tblWarenEinsatz.artEinheit, tblArtikel.artikelID, tblArtikel.VKZ, tblArtikel.artNummerSonnePar, tblArtikel.artBeschreibung, tblAufgaben.aufgabenid, tblAufgaben.aufpro_IDRef, tblAufgaben.mitver_IDRef, tblAufgaben.aufDatum, tblAufgaben.aufStunden, tblAufgaben.aufBemerkung, tblBaustellen.baustelleID, tblBaustellen.bauStelle, tblBaustellen.bauBemerkung, tblMitarbeiter.mitRufname
FROM ((tblBaustellen INNER JOIN tblProjekte ON tblBaustellen.baustelleID = tblProjekte.probau_IDRef) INNER JOIN (tblMitarbeiter INNER JOIN tblAufgaben ON tblMitarbeiter.mitarbeiterID = tblAufgaben.aufper_IDRef) ON tblProjekte.projektID = tblAufgaben.aufpro_IDRef) INNER JOIN (tblArtikel INNER JOIN tblWarenEinsatz ON tblArtikel.artikelID = tblWarenEinsatz.matart_IDRef) ON tblProjekte.projektID = tblWarenEinsatz.matpro_IDRef
WHERE tblProjekte.projektID=eval([Formulare]![frmProjekteVerwaltung]![lstAuftragWaelen]);

Knobbi38

Hallo Lemmy,

ist denn sichergestellt, daß das Formular "frmProjekteVerwaltung" geöffnet ist und in der Listbox ein Wert selektiert ist?

Solche Unwägbarkeiten mußt du natürlich abfangen, bevor du so eine Abfrage öffnest.

Knobbi38

Lemmy2902

ja das Formular ist offen und ein Daten Satz ist ausgewählt