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.
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.
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
Hallo,
hier findest Du ein prinzipielles Beispiel, wie auch vieles Andere mehr..
http://dbwiki.net/images/3/3f/AccSampleAccessToExcel.zip
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.
:)
Hallo,
anbei die konvertierte Version.
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^^