Office - Word, Excel und Co. 9.751 Themen, 41.564 Beiträge

Access2003: Datenübergabe an Excel

daCrazyDoc / 5 Antworten / Baumansicht Nickles

Hab mal wieder ein Problem:

möchte Daten aus einer Abfrage in Access an Excel übergeben. Prinzipiell funktioniert das ja relativ einfach mit TransferSpreadsheet. Das hat jedoch den Nachteil, dass hier immer ein neues Excel-Sheet angelegt bzw. das alte gnadenlos überschrieben wird und es meines Wissens auch keine Möglichkeit gibt, beim Export innerhalb Excel ein bestimmtes Tabellenblatt anzusprechen (beim Import aus Excel geht das ja).

Nun besteht aber das Excel-Sheet, das ich verwenden möchte, aus zwei Tabellenblättern: einem, in dem die Daten sind (die ich halt auch über Access aktualisieren/einpflegen möchte) und einem zweiten, das das entsprechende Diagramm aus diesen Daten enthält, das ich dann innerhalb der Access-Anwendung wiederum anzeigen lassen möchte. (Möchte zum Anzeigen nicht Excel direkt verwenden, sondern das innerhalb Access, das eine eigene Benutzeroberfläche hat, machen lassen. Grund hierfür ist, dass mit dem Teil User arbeiten, die sich nicht wirklich mit EDV auskennen und ggfs. mehr kaputt als richtig machen würden).

Hat jemand nen guten Tipp für mich, wie ich es schaffe, die Daten genau in das richtige Tabellenblatt zu exportieren. Angedacht hab ich auch schon mal die Möglichkeit, zwei Excel-Dateien zu verwenden: eines, in das ich exportiere (und das daher auch gnadenlos neu geschrieben werden kann) und ein zweites, dass das Diagramm enthält und sich seine Daten aus dem ersten Sheet holt...

THX für Tipps

bei Antwort benachrichtigen
neanderix daCrazyDoc „Access2003: Datenübergabe an Excel“
Optionen

Hi Doc,

schon wieder ich ;)

Was das Diagramm betrifft: warum lässt du nicht ACCESS das Diagramm aus den Daten erzeugen?

Wenn irgendwelche logischen Gründe dagegn sprechen:

dann übergib die Daten halt mittels Office-automation, d.h. du sprichst EXCEL direkt aus Access an - OHNE Import, Export und ähnliches Gekaspere.

Tipp:
Das "Access 2007 Codebook" von Bernd Held enthält ein paar Tipps zu diesem Thema.
Ich selber bin noch nicht so weit ;)

Volker

Computers are like airconditioners - they stop working properly when you open Windows Ich bin unschuldig, ich habe sie nicht gewählt!
bei Antwort benachrichtigen
daCrazyDoc neanderix „Hi Doc, schon wieder ich Was das Diagramm betrifft: warum lässt du nicht ACCESS...“
Optionen

Hi Volker,

langsam muss ich Dir glaube ich mal ein Gehalt für personal Coaching zahlen ;-)

Hab ich mal versucht, aber leider keine Möglichkeit gefunden, dieses Diagramm auch halbwegs anständig zu formatieren. Wäre mir in jedem Fall die liebere, weil auch einfachere, Lösung.

Hab das mal angetestet und als das Teil einfach nur total beschissen aussah, etwas im Netz gesucht, aber Nichts gefunden, wie man Schriftgröße etc. formatieren kann. Werd es aber noch mal versuchen; vielleicht so wieder nach Methode try an (hoffentlich nicht) error.

THX erst mal

bei Antwort benachrichtigen
daCrazyDoc Nachtrag zu: „Hi Volker, langsam muss ich Dir glaube ich mal ein Gehalt für personal Coaching...“
Optionen

Hi,

habe mein Problem jetzt folgendermaßen gelöst:
Anm: Die Datenübertragung wird über den Button bu_ok angestoßen; vorher wird im entsprechenden Formular ein Markt ausgewählt, dessen Ergebnisse bei den verschiedenen Aktionen dargestellt werden sollen.

Dimensionierungen im Formular

Dim objXLS As Excel.Application
Dim objWbk As Excel.Workbooks
Dim objSheet, objSheet2 As Excel.Worksheet
Dim Rst As DAO.Recordset
Dim intI As Integer

******************************************************************
Prg.-Code

Private Sub bu_OK_Click()

If Me.marktID 0 Then

Set Rst = CurrentDb.OpenRecordset("abf_frmStatistik0010")

If Rst.RecordCount > 0 Then

Set objXLS = CreateObject("Excel.Application")
Set objWbk = objXLS.Workbooks
objWbk.Open ("E:\Projekte\DB Markt dev\Export\abf_frmStatistik0010.xls")
Set objSheet = objWbk.Item(1).Worksheets(2)
Set objSheet2 = objWbk.Item(1).Worksheets(1)

' Tabelle leeren
objSheet.Range("A2:E100").Clear
' Excel erst ab Zeile 2 befüllen, da erste Zeile Überschriften enthält, daher intI auf 2 setzen
intI = 2
Rst.MoveFirst
While Not Rst.EOF
objSheet.Range("A" & Right$(Str$(intI), 1)).Value = Rst.Fields(0)
objSheet.Range("B" & Right$(Str$(intI), 1)).Value = Rst.Fields(1)
objSheet.Range("C" & Right$(Str$(intI), 1)).Value = Rst.Fields(2)
objSheet.Range("D" & Right$(Str$(intI), 1)).Value = Rst.Fields(3)
objSheet.Range("E" & Right$(Str$(intI), 1)).Value = Rst.Fields(4)
intI = intI + 1
Rst.MoveNext
Wend

objSheet.Range("A2:A100").NumberFormat = "m/d/yyyy"

' Grafiksheet aktivieren
objSheet2.ChartObjects("Diagramm 2").Activate
>>>> ActiveChart.SetSourceData Source:=objSheet.Range("A1:E" & Right$(Str$(intI - 1), 1)), PlotBy:=xlColumns
objSheet2.Range("A30").Select

objWbk.Close
Set objXLS = Nothing

End If
End If

End Sub

******************************************************************
Funktioniert beim ersten Aufruf, bei weiteren Aufrufen erhalte ich in der mit >>>> gekennzeichneten Zeile folgende Fehlermeldung:

die Methode ActiveChart für das Objekt _Global ist fehlgeschlagen

Merkwürdigerweise ist das Excel-Worksheet auch nicht geschlossen, obwohl dies ja der Fall sein sollte (Kontrolle über Taskmanager). Es erfolgt sogar die Abfrage, ob die Änderungen in dem Sheet
gespeichert werden sollen.

Tipps für nen Dummy???

bei Antwort benachrichtigen
daCrazyDoc Nachtrag zu: „Lösung mit kleinen Fehlern“
Optionen

Ein kleines Teilproblem hab ich inzwischen gelöst: Excel schließen funzt mit folgendem Code:


objWbk.Application.Quit
Set objWbk = Nothing
Set objXLS = Nothing

Trotzdem bleibt der oben beschriebene Fehler

bei Antwort benachrichtigen
daCrazyDoc Nachtrag zu: „Ein kleines Teilproblem hab ich inzwischen gelöst: Excel schließen funzt mit...“
Optionen

Habe das Problem so lösen können:

With objWbk.Application.ActiveChart
.SetSourceData Source:=objSheet.Range("A1:E" & Right$(Str$(intI - 1), Len(Str$(intI - 1)) - 1)), PlotBy:=xlColumns
End With

Verweise also ausdrücklich noch mal auf das Excel-Object (s. with-Zeile). Warum Access beim ersten Aufruf den Verweis nicht braucht, weiß ich nicht, bleiben wir aber pragmatisch, so ist der Fehler weg.

Und damit es nicht langweilig wird, brauch ich jetzt nen neuen Tipp; siehe hierzu:

Access: Excel-Spreadsheet aktualisieren

bei Antwort benachrichtigen