Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: Streber am Oktober 25, 2016, 21:40:00

Titel: Abfrage access und export in excel
Beitrag von: Streber am Oktober 25, 2016, 21:40:00
Hallo,

ich arbeite mit einem Programm welches täglich Daten in einer Access Datenbank automatisch abspeichert.
Die Daten sind nach Datum und Uhrzeit sortiert. Alle 15 min wird eine Zeile mit Daten gefüllt.
Jeden Monat muss ich einen Report erstellen. Der Report besteht aus einer Excel Vorlage.

Alle Monate muss ich eine Abfrage erstellen welche die Daten des vorherigen Monats in einer Excel Tabelle abspeichert. Dann muss ich die exportierten Daten in der Excel Tabelle kopieren und in meiner Vorlage in ganz bestimmten Zellen ablegen.

Ich möchte gerne diese manuelle Arbeit automatisieren.

Am besten wäre meine Excel-Vorlage öffnen zu können. Nach dem öffnen fragt mich das programm automatisch auf welcher Access Tabelle er zugreifen soll und im welchen Zeitraum er die Daten hernehmen soll und dann soll er diese in bestimmten Zellen in meiner Vorlage einfügen. Am Ende sollte sich die Vorlage automatisch abspeichern.

Wäre dies möglich?
Gibt es vielleicht etwas einfacheres?

Dies sollte alle Monate automatisch durchgeführt werden.

Bitte um Hilfe.
Titel: Re: Abfrage access und export in excel
Beitrag von: DF6GL am Oktober 26, 2016, 08:10:50
Hallo,

es gäbe zwei Möglichkeiten:


1)  in Excel "bleiben" und aus Excel heraus auf die DB-(Tabellen) zugreifen, die Daten auslesen und passend zu "verteilen".


2) Mit Access Excel automatisieren (fernbedienen), und die Daten  in die entspr. Zellen schreiben.


Beides benötigt VBA-Prozeduren.


Es bleibt jedoch die Frage, ob der Bericht nicht komplett mit Access erstellt und der Export nach Excel vermieden werden kann.
Titel: Re: Abfrage access und export in excel
Beitrag von: Streber am Oktober 26, 2016, 18:55:21
Hallo,

Viele  Dank fuer die Tipps.
Die zweitw Möglichkeit gefaellt mir. Leider bin ich ein amateur was excel und access betrifft. Sicherlich geht es auch nur mittels Access.

Könnten Sie mir vielleicht irgendwelche funktionen von VBA mitteilen die für meine anfrage geeignet ist? So kann ich im Internet reserchieren und etwas beginnen zusammenzustellen.

Wäre sehr hilfreich.
Vielen Dank nochmal
Titel: Re: Abfrage access und export in excel
Beitrag von: DF6GL am Oktober 26, 2016, 20:50:55
Hallo,

hier findest Du ein prinzipielles Beispiel, wie auch vieles Andere mehr..

http://dbwiki.net/images/3/3f/AccSampleAccessToExcel.zip
Titel: Re: Abfrage access und export in excel
Beitrag von: Streber am Oktober 27, 2016, 08:52:59
Danke,

leider kann ich die Beispiel Datei nicht öffnen.
Meine Access Version ist zu neu.
"Datenbank, die mit einer früheren Version erstellt wurden, kann nicht geöffnet werden"
Ich besitze access 2016.
:)
Titel: Re: Abfrage access und export in excel
Beitrag von: DF6GL am Oktober 27, 2016, 10:04:56
Hallo,


anbei die konvertierte Version.

Titel: Re: Abfrage access und export in excel
Beitrag von: MiHa am Oktober 27, 2016, 13:24:06
Mir würden zwei Ideen einfallen, die erste ist wie DF6GL schon gesagt hat aus Access heraus deine Datei zu füllen.
Die zweite Möglichkeit die etwas weniger programmieraufwand in Access bedeuten würde, wäre die Access Daten in einen neuen Tab deiner Vorlage zu Kopieren und die in deiner Vorlage befindlichen Felder mit dieser zu verbinden (Die Felder in der Vorlage sind dann wie folgt zu füllen (=Tabelle2!B3)). Den neuen Tab würde man z.B. dann unsichtbar machen, so dass du halt immer noch nur deinen Tab mit der Vorlage sehen würdest, in weiteren Schritten könnte man dann die Excel-Datei als PDF speichern oder oder oder ^^

Als Code fürs Anlegen von einzelnen Blätter in einer Exceltabelle könnte folgender Code helfen:
Quelle: steffen0815 (http://www.office-loesung.de/ftopic98051_0_0_asc.php)

ich habe in meiner Datenbank auch eine Funktion fürs erstellen und bearbeiten von Excel-Datei, dabei lege ich eine neue Excel-Datei wie folgt an:

stDocName = "Formularname" 'Name des Formulars mit den Daten (Hierfür würdest du einfach eine Abfrage erstellen, die Monatweise deine Daten anzeigen würde).

stDocPfad = (CurrentProject.Path & "\Bestellungen\Bestellliste.xls") 'Wo die Datei entsprechend gespeichert werden soll

DoCmd.OutputTo acForm, stDocName, acFormatXLS, stDocPfad, False 'Der Befehl fürs erstellen der Datei

Das kann man dann im Formular was durch eine Abfrage dann nur den betreffenden Monat anzeigt, als Klickevent einsetzen.

Das öffnen und bearbeiten einer Excel-Datei habe ich wie folgt gelöst:
Sub Excel_oeffen_und_bearbeiten()

    Dim xlApp As Object ' Excel.Application
    Dim xlBook As Object 'Excel.Workbook
    Dim xlSheet As Object 'Excel.Worksheet
    Dim objcell As Object
    Dim letztezeile, Zähler As Long
   
    letztezeile = 0
    Zähler = 0
   
    On Error Resume Next
    Set xlApp = GetObject(, "Excel.Application")
   
    If xlApp Is Nothing Then
        Set xlApp = CreateObject("Excel.Application")
    End If
   
    On Error GoTo 0
    xlApp.Visible = False ' Testphase
    Set xlBook = xlApp.Workbooks.Open(Uebergabe_ExcelDateiName)
    'Set xlBook = xlApp.Workbooks.Open("H:\Dokumente\In ausarbeitung\Access-Systeme\Inventar\Bestellungen\Bestellliste.xls")
    Set xlSheet = xlBook.Worksheets(1)
   
    On Error Resume Next
   
    With xlSheet
        letztezeile = xlSheet.UsedRange.Rows(xlSheet.UsedRange.Rows.Count).Row
       
        .Columns("I:I").Delete Shift:=xlToLeft
        .Columns("H:H").Delete Shift:=xlToLeft
        .Columns("D:D").Delete Shift:=xlToLeft
        .Columns("B:B").Delete Shift:=xlToLeft
       
        Do While Zähler < (letztezeile - 1)
            Zähler = Zähler + 1
            .Cells(Zähler + 1, 1).Value = Zähler

            With .Cells(Zähler + 1, 5)

                If .Value <> "" Then
                    .Value = CDbl(.Value)
                    .NumberFormat = "#,##0.00 $"
                End If
            End With

            With .Cells(Zähler + 1, 6)
                .FormulaLocal = "=(B" & (Zähler + 1) & "*E" & (Zähler + 1) & ")"
                .NumberFormat = "#,##0.00 $"
            End With
           
        Loop
       
        .Cells(1, 1).Value = "Pos.:"
        .Cells(1, 2).Value = "Anzahl:"
        .Cells(1, 3).Value = "Bezeichnung:"
        .Cells(1, 4).Value = "Bestellnummer:"
        .Cells(1, 5).Value = "Einzelpreis:"
        .Cells(1, 6).Value = "Einzelgesamtbetrag:"
        .Cells(Zähler + 3, 5).Value = "Gesamtpreis:"
        .Cells(Zähler + 3, 6).FormulaLocal = "=Summe(F2:F" & (Zähler + 2) & ")"
        .Cells(Zähler + 3, 6).NumberFormat = "#,##0.00 $"
        .Rows("1:1").Select
        .Cells(1, 1).EntireRow.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
       
        With .Range("A2:F2")
            .Borders(xlDiagonalDown).LineStyle = xlNone
            .Borders(xlDiagonalUp).LineStyle = xlNone
            .Borders(xlInsideVertical).LineStyle = xlNone
            .Borders(xlInsideHorizontal).LineStyle = xlNone
            With .Borders ' entspricht xlEdgeLeft, xlEdgeTop, xlEdgeBottom und xlEdgeRight
                .LineStyle = xlContinuous
                .Weight = xlThin
                .ColorIndex = xlAutomatic
            End With
        End With
     
        .Range("A2:F2").Interior.ColorIndex = 15
        .Columns.AutoFit

        .Cells(1, 1).Value = "Bestellliste für Name: " & Uebergabe_Kontakt_Nachname & ", bei Firma: " & Uebergabe_Lieferant_Name & ", am: " & Uebergabe_Bestellung_Datum
       
    End With
   
   
    xlBook.Save ' Testphase
    xlApp.Application.Quit ' Testphase
   
    Set xlApp = Nothing
    Set xlBook = Nothing
   
End Sub


Wenn du einzig die Daten in deiner Tabelle aufnehmen willst, könntest du dies z.B. durch Befehle wie z.B.,,.Cells(1, 1).Value" machen. Hierbei müsste man vielleicht mit schleifen und Co die Inhalte in die entsprechenden Felder einfügen lassen.
In dem oben angehangenen Code sind einige Funktionen fürs Formatieren/ Löschen/ Schreiben in Excel-Dateien verwendet. Bin selbst kein Experte, aber irgendwie funktioniert das alles schon irgendwie^^