Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
356to360
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
356to360
356to360
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Fehler 1004 Methode fehlgeschlagen

Fehler 1004 Methode fehlgeschlagen
03.01.2004 03:30:12
Frank Holiet
Hallo zusammen,

wahrscheinlich ist es eine Zumutung, daß ich den gesaamten Code hier schreibe, aber ich komme einfach nicht mehr weiter.

Das Problem ist, daß der erste Durchlauf dieses Codes völlig unproblematisch ist, doch beim 2. Durchlauf kommt die Fehlermeldung 1004. Die Methode Cells für das Objekt '_Application' ist fehlgeschlagen.

Kann mir jemand eine Hilfestellung geben, wo der Fehler sitzt?

Ganz herzlichen Dank schon vorab!!
Frank


Private Sub ExportmeineTabelle_Click()
Dim oExcel As Excel.Application, DB As DAO.Database, RS As DAO.Recordset, I As Long
Dim XLExport As Object
Dim Datei1
On Error Resume Next
' Löschen der Excel-Tabelle, falls bereits vorhanden
Datei1 = Dir("c:\temp\meineTabelle.xls")
If Datei1 <> "" Then
Kill "c:\temp\meineTabelle.xls"
Else: Resume Next
End If
' öffnet Excel, wenn noch nicht geöffnet
Err.Clear
Set oExcel = GetObject(, "Excel.Application ")
If Err.Number <> 0 Then Set oExcel = CreateObject("Excel.Application")
On Error GoTo 0
With oExcel
.Visible = True
' Import der DBase-Tabelle, abspeichern im Excel-Format
Workbooks.Open FileName:="C:\TEMP\meineTabelle.dbf"
ActiveWorkbook.SaveAs FileName:="C:\TEMP\meineTabelle.xls", FileFormat:=xlNormal
ActiveWorkbook.Close (False)
.Application.Quit
End With
'Löschen der dBase-Tabelle, falls bereits vorhanden
Datei1 = Dir("c:\temp\meineTabelle.dbf")
If Datei1 <> "" Then
Kill "c:\temp\meineTabelle.dbf"
End If
' füllt die Export-Tabelle "tbldBase" mit Daten aus CAQ und dBase-File
DoCmd.SetWarnings False
DoCmd.OpenQuery "qryExcel1"
DoCmd.SetWarnings True
' zurück zu Excel
With oExcel
.Visible = True
' Laden der Vorlage (notwendig, weil dBase Zahlenformate nicht anerkennt)
Set XLExport = GetObject("C:\TEMP\meineTabelle.xlt")
' Microsoft Excel mit zugehöriger Application-Eigenschaft einblenden
XLExport.Application.Visible = True
XLExport.Parent.Windows(1).Visible = True
' zurück zu Access, Verweis auf DB, Öffnen des Recordsets im Snapshot-Format
Set DB = CurrentDb
Set RS = DB.OpenRecordset("tblDBase", dbOpenSnapshot)
' Feldnamen als Überschriften ins Excel übertragen
For I = 0 To RS.Fields.Count - 1
.Cells(1, I + 1) = RS.Fields(I).Name
Next I
.Range("A2").Select
.Selection.CopyFromRecordset RS
' Excel Tabelle in dBaseIV konvertieren und speichern
.ActiveWorkbook.SaveAs FileName:="C:\Temp\meineTabelle.dbf", FileFormat:=xlDBF4
.ActiveWorkbook.Close (False)
.Application.Quit
End With
' Verweis auf Anwendung und Tabellen freigeben.
Set RS = Nothing
Set DB = Nothing
Set XLExport = Nothing
Set oExcel = Nothing
' Löschen der Datensätze der Access-Tabelle "tblDBase
DoCmd.SetWarnings False
DoCmd.RunSQL "DELETE tblDBase.* FROM tblDBase;"
DoCmd.SetWarnings True
End Sub

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Fehler 1004 Methode fehlgeschlagen
03.01.2004 09:59:51
Hajo_Zi
Hallo Frank

ich habe mir den Code nicht angesehen. Abe die Zeilen

' Verweis auf Anwendung und Tabellen freigeben.
Set RS = Nothing
Set DB = Nothing
Set XLExport = Nothing
Set oExcel = Nothing

' Löschen der Datensätze der Access-Tabelle "tblDBase
DoCmd.SetWarnings False
DoCmd.RunSQL "DELETE tblDBase.* FROM tblDBase;"
DoCmd.SetWarnings True
erden nicht mehr ausgeführt.

Ist der Code in der ActiveWorkbook wird Application.Quit auch nicht mehr ausgeführt.

Bitte keine Mail, Probleme sollten im Forum gelöst werden.

Microsoft MVP für Excel

Das Forum lebt auch von den Rückmeldungen.
Betriebssystem XP Pro und Excel Version XP Pro


Anzeige
AW: Fehler 1004 Methode fehlgeschlagen
03.01.2004 12:26:50
Dieter Klemke
Hallo Frank,
ich habe deinen Code nicht ganz durchschaut, aber die folgende Stelle ist sicher problematisch:
Wenn du in dem Programmteil

With oExcel
.Visible = True

' Import der DBase-Tabelle, abspeichern im Excel-Format
Workbooks.Open FileName:="C:\TEMP\meineTabelle.dbf"
ActiveWorkbook.SaveAs FileName:="C:\TEMP\meineTabelle.xls", FileFormat:=xlNormal
ActiveWorkbook.Close (False)
.Application.Quit
End With

die Anwendung Excel schließt, dann kannst du sie nicht einfach mit

' zurück zu Excel
With oExcel
.Visible = True
...
End With

wieder öffnen.

Um in der gestarteten Excel-Anwendung eine neue Arbeitsmappe nach dem Muster "C:\TEMP\meineTabelle.xlt" anzulegen, kannst du anstelle von
Set XLExport = GetObject("C:\TEMP\meineTabelle.xlt")
schreiben
Set XLExport = oExcel.Workbooks.Add(Template:="C:\TEMP\meineTabelle.xlt")
XLExport ist vom Typ Workbook.
Damit müßte es sich eigentlich problemlos weiterarbeiten lassen.
Z.B. XLExport.Worksheets(1).Cells(1, I + 1) = RS.Fields(I).Name

MfG
Dieter
Anzeige
AW: Fehler 1004 Methode fehlgeschlagen
04.01.2004 01:01:16
Frank Holiet
Hallo Dieter,

zunächst einmal herzlichen Dank für Deine konkrete Hilfe!

Ich habe den Code Deiner Empfehlung entsprechend geändert, jetzt wird allerdings der Recordset nicht in die Vorlage kopiert. Es kommt eine Fehlermeldung, daß die Copy-Methode des Worksheet-Objekts nicht ausgeführt werden konnte. Es handelt sich dabei um die letzte Zeile. Er kennt weder den Befehl Selection.CopyFromRecordset RS noch den hier benutzen Copy RS. Könntest du mir weiterhelfen ;-)))

Nochmals vielen Dank.
Gruß
Frank

Set XLExport = oExcel.Workbooks.Add(Template:="C:\TEMP\meineTabelle.xlt")

' Microsoft Excel mit zugehöriger Application-Eigenschaft einblenden
XLExport.Application.Visible = True
XLExport.Parent.Windows(1).Visible = True

' zurück zu Access, Verweis auf DB, Öffnen des Recordsets im Snapshot-Format
Set DB = CurrentDb
Set RS = DB.OpenRecordset("tblDBase", dbOpenSnapshot)

' Feldnamen als Überschriften ins Excel übertragen
For I = 0 To RS.Fields.Count - 1
XLExport.Worksheets(1).Cells(1, I + 1) = RS.Fields(I).Name
Next I
XLExport.Worksheets(1).Range("A2").Select
XLExport.Worksheets(1).Copy RS
Anzeige
AW: Fehler 1004 Methode fehlgeschlagen
04.01.2004 08:44:44
Dieter Klemke
Hallo Frank,
ob "Selection.CopyFromRecordset RS" funktioniert, hängt davon ab, was Selection für ein Objekt ist. Du kannst das mit "MsgBox TypeName(Selection)" testen. Selection muss ein Range-Objekt sein.
"XLExport.Worksheets(1).Range("A2").Select" funktioniert nur, wenn XLExport.Worksheets(1)
das aktive Blatt ist.
"XLExport.Worksheets(1).Copy RS" kann nicht funktionieren, da die Copy-Methode des Worksheet-Objektes das Blatt kopiert und ganz andere Parameter erwartet.
Du musst hier schreiben:
"XLExport.Worksheets(1).Range("A2").CopyFromRecordset RS"
Eleganter ist es, wenn du einmal setzt "Set ws = XLExport.Worksheets(1)" (Dim ws As Excel.Worksheet) und dann immer nur ws verwendest, z.B.
"ws.Range("A2").CopyFromRecordset RS"

MfG
Dieter

P.S.
Den Teil
' Microsoft Excel mit zugehöriger Application-Eigenschaft einblenden
XLExport.Application.Visible = True
XLExport.Parent.Windows(1).Visible = True
kannst du vermutlich weglassen, da die Excel-Application oExcel schon früher sichtbar geschaltet wurde. Außerdem muss sie für die vorliegende Verarbeitung nicht unbedingt sichtbar sein.
Anzeige
AW: Fehler 1004 Methode fehlgeschlagen
05.01.2004 06:35:16
Frank Holiet
Hallo Dieter,

ohne die Hilfe des Forums, d.h. insbesondere deiner Hilfe hätte ich es nie geschafft, das Problem zu löschen. Vielen Dank.

Restfehler ist jetzt noch, daß sich Excel nicht automatisch beenden läßt, sondern für jede Art der Beendigung, die ich bisher ausprobiert habe, eine Fehlermeldung bringt. Könntest Du mir noch ein letztes Mal helfen?

ws.SaveAs FileName:="C:\Temp\meine Tabelle.dbf", FileFormat:=xlDBF4
oExcel.Application.Quit

funktioniert nicht, weil dann immer noch gefragt wird, ob gespeichert werden soll und kein False o.ä. wird akzeptiert. Für die nächste Zeit habe ich wirklich die Nase voll von Excel, jede Datenbank ist einfacher.

Mit bestem Gruß
Frank
Anzeige
AW: Fehler 1004 Methode fehlgeschlagen
05.01.2004 10:25:05
Dieter Klemke
Hallo Frank,
wenn beim Quit noch eine vorsorgliche Speicherabfrage kommt, dann ist sicher noch eine Arbeitsmappe offen, die du verändert, aber noch nicht gespeichert hast.
Das Problem lässt sich auf verschiedenen Wegen beheben.

a) Dich interessiert nicht, um welche Arbeitsmappe es sich handelt und du unterdrückst die vorsorgliche Speicherabfrage folgendermaßen:
oExcel.DisplayAlerts = False
oExcel.Quit
(Es reicht anstelle von "oExcel.Application.Quit" zu schreiben "oExcel.Quit")

b) Du schließt die betreffende(n) Datei(en), für die die Speicherungsabfrage angezeigt wird vor dem Quit mit oder ohne vorherige Speicherung (Parameter SaveChanges):
oExcel.Workbooks("DateiXY.xls").Close SaveChanges:=True
oExcel.Quit

Falls du Zweifel bzgl. der noch geöffneten Arbeitsmappe hast, solltest du noch mal deinen gesamten Code posten.

MfG
Dieter
P.S.
Excel-VBA ist nicht so schlecht, wie du im Moment meinst. Natürlich musst du hier "dateiorientierter" denken als bei einer Datenbank.
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige