Moin,
ich weiß, die Frage wurde schon 100mal gestellt, aber mit den Sachen, die ich gefunden habe klappt es einfach nicht!
Ich möchte abgefragte Daten aus access in eine Excel Datei schreiben und die abschließend speichern.
Das Erstellen und Schließen klappt, bloß das speichern nicht. Hier der Code:
Set test = CreateObject("Excel.Application")
test.Visible = false
Set xls = test.Workbooks.Add
xls.SaveAs ("D:\tt.xls")
test.Quit
Set test = Nothing
Jemand ne Idee? :(
HAllo,
wenn Du mit "speichern" die Access-Daten meinst, dann ist das nicht verwunderlich. Du schreibst ja gar keine in das Excel-Sheet.. ::)
Moin,
achso das reinschreiben habe ich nicht mit reingenommen, aber das klappt.
Es geht nur um das speichern der Excel-Datei auf der Festplatte.
Hallo,
zeig mal den kompletten Code, sonst stochert man im Nebel herum....
Hey,
ups, ich war ein bisschen voreilig. Das Schreiben klappt auch nicht! Nur das Auslesen aus Access klappt ^^ Ich will alle Spaltennamen einer Tabelle nach Excel schreiben.
Sub excelschreiben()
Dim i As Integer
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("Tabelle 1", dbOpenSnapshot)
Set test = CreateObject("Excel.Application")
test.Visible = True
Set xls = test.Workbooks.Add
For i = 0 To rs.Fields.Count - 1
xls.ActiveSheet.Cells(1, i) = rs.Fields(i).Name
Next
xls.SaveAs ("D:\tt.xls")
test.Quit
Set test = Nothing
End Sub
Hallo,
versuch mal so:
Option Compare Database
Option Explicit 'Deklarieren aller Variablen erforderlich
.
.
.
Dim test As Object, i As Long
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("Tabelle1", dbOpenSnapshot) 'Leer- und Sonderzeichen in Namen vermeiden!
Set test = CreateObject("Excel.Application")
With test
.Visible = True
.Workbooks.add
For i = 0 To rs.Fields.Count - 1
.Cells(1, i + 1) = CStr(rs.Fields(i).Name) 'Zelle (1,0) gibt es nicht
Next
.ActiveWorkbook.SaveAs ("D:\tt.xls")
.Quit
End With
Set test = Nothing
rs.Close
set rs = Nothing
Hey,
danke für deine Mühen. Er gibt leider noch immer einen Fehler aus, die Excel-Datei wird erstellt und auch mit Inhalt gefüllt.
Allerdings meckert er bei
.ActiveWorkbook.SaveAs ("D:\tt.xls")
Laufzeitfehler '1004':
Microsoft Excel kann auf die Datei 'D:\0BDCE500' nicht zugreifen. Dies kann mehrere Gründe haben:
- Name des Dokuments nicht vorhanden
- Dokument wird von einem anderen Programm verwendet
- Name der Arbeitsmappe, die gespeichert werden soll, ist identisch zu dem Namen eines anderen Dokuments, welches schreibgeschützt ist
Hallo,
wo jetzt dieser "Dateiname" herkommt, kann ich nicht sagen.. Ansonsten solltest Du halt mal die Fehler-Hinweise auf ihr Zutreffen überprüfen.
--Vielleicht ist auch erst mal "tabula rasa" vonnöten, sprich: schau im Taskmanger nach , ob noch Excel-Instanzen aktiv sind und lösche diese, falls vorhanden.
--Lösche evtl. erzeugte xls-Dateien.
--Beende Access (mit Speichern) und starte die DB neu.
Moin,
ja, das hatte ich alles schon überprüft. Es sind keine Excel-Prozesse offen. Der Dateiname ist noch nicht vorhanden.
Ich habe jetzt z.B. versucht mit .ActiveWorkbook.SaveAs ("C:\hallowelt.xls") zu speichern.
Bei der Fehlermeldung sagt er mir dann, dass er auf die Datei C:\BAB56600 nicht zugreifen kann. Diese Datei existiert gar nicht. :-/
Alles sehr merkwürdig, naja ich probier weiter. Jedenfalls weiß ich, dass der Code an sich richtig ist. Danke! :-)
edit: Gelöst. Ich bin auch ne Wurst. Der Ordner war schreibgeschützt -.- nu klappt alles. Thx
Moin,
komme wieder nich weiter. Ich möchte die Auswahl der ausgegebenen Spalten einschränken.
Ich möchte alle Spalten die mit "_id" enden nicht ausgeben. Aber irgendwie gibt er sie trotzdem immer aus!
Hier der Code
Option Compare Database
Option Explicit 'Deklarieren aller Variablen erforderlich
Sub Tabellen_und_Spaltennamen_auslesen()
Dim test As Object, tbl As TableDef
'On Error GoTo Err_Befehl7_Click
Dim i As Long
Dim rs As DAO.Recordset
Dim j As Long
j = 1
Set test = CreateObject("Excel.Application")
test.Visible = True
test.Workbooks.Add
For Each tbl In CurrentDb.TableDefs
If Left(tbl.Name, 4) <> "MSys" _
Then
Set rs = CurrentDb.OpenRecordset(tbl.Name, dbOpenSnapshot)
test.Cells(j, 1) = tbl.Name
test.Range("A" & j).select
test.selection.Font.Bold = True
j = j + 1
For i = 0 To rs.Fields.Count - 1
If rs.Fields(i).Name <> "*" & "_id" _
Then
test.Cells(j + i, 1) = CStr(rs.Fields(i).Name)
Else
j = j - 1
End If
Next
j = j + rs.Fields.Count
End If
Next
test.ActiveWorkbook.SaveAs ("T:\moin.xls")
test.Quit
Set test = Nothing
End Sub
HAllo,
Sternchen kann nur mit dem Like-Operator verwendet werden.
Mach das besser so:
If Right(rs.Fields(i).Name,3) <> "_id" _
Dank dir. Ich habe es mit dem Like-Operator gelöst, weil ich auch ein paar Felder der Form *blabla* ausschließen möchte
So, wieder ein neues Problem ^^
Wie kann ich jetzt alle Spalten abfangen, die eh nur NULL für alle Tupel haben?
Hallo,
If isNull(rs.Fields(i)) Then