Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Excel-Datei per VBA erstellen und abspeichern

Begonnen von henfoni, November 29, 2011, 08:51:51

⏪ vorheriges - nächstes ⏩

henfoni

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? :(
Wer nicht fragt, bleibt dumm.

DF6GL

HAllo,

wenn Du mit "speichern" die Access-Daten meinst, dann ist das nicht verwunderlich. Du schreibst ja gar keine in das Excel-Sheet..  ::)
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

henfoni

Moin,

achso das reinschreiben habe ich nicht mit reingenommen, aber das klappt.
Es geht nur um das speichern der Excel-Datei auf der Festplatte.
Wer nicht fragt, bleibt dumm.

DF6GL

Hallo,

zeig mal den kompletten Code, sonst stochert man im Nebel herum....
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

henfoni

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
Wer nicht fragt, bleibt dumm.

DF6GL

#5
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

Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

henfoni

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
Wer nicht fragt, bleibt dumm.

DF6GL

#7
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.

Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

henfoni

#8
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
Wer nicht fragt, bleibt dumm.

henfoni

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

Wer nicht fragt, bleibt dumm.

DF6GL

HAllo,


Sternchen kann nur mit dem Like-Operator verwendet werden.


Mach das besser so:

If Right(rs.Fields(i).Name,3) <> "_id" _
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

henfoni

Dank dir. Ich habe es mit dem Like-Operator gelöst, weil ich auch ein paar Felder der Form *blabla* ausschließen möchte
Wer nicht fragt, bleibt dumm.

henfoni

So, wieder ein neues Problem ^^

Wie kann ich jetzt alle Spalten abfangen, die eh nur NULL für alle Tupel haben?
Wer nicht fragt, bleibt dumm.

DF6GL

Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access