| Betreff | =?Utf-8?Q?ExcelWorkbook.Saveas_l=C3=A4sst_VB=5FPr?= |
| Von | =?Utf-8?B?QWRhbSBMb2No?= |
| Datum | 28.10.2009 13:38:01 |
Hallo NG,
mit einem VB-Programm soll eine Exceldatei erstellt und mit Daten gefüllt
werden. Progrann läuft bis zu dem Befehl" ExcelWorkbook.Save as Dateiname" .
M.E. bricht das Programm bei diesem Befehl ab , da keine Exceldatei
gespeichert wird. Obwohl ein Fehlerausgang in der Prozedur drin ist, erfolgt
keine Fehlermeldung.
Programm läuft reibungslos auf dem Entwicklungsrechner.
Auf dem Rechner, auf dem das VB-Programm getestet wird, ist Excel
installiert.
Was könnte den die Fehlerursache sein bzw. wie kann ich überhaupt eine
Fehlermeldung ersichtlich machen?
| Betreff | Re: ExcelWorkbook.Saveas =?UTF-8?B?bMOkc3N0IFZCX1Byb2dyYW1tIGFicw==?= |
| Von | =?UTF-8?B?VGhvbWFzIE3DtmxsZXI=?= |
| Datum | 28.10.2009 15:13:39 |
Hallo Adam,
Adam Loch schrieb:
> mit einem VB-Programm soll eine Exceldatei erstellt und mit Daten gefüllt
> werden. Progrann läuft bis zu dem Befehl" ExcelWorkbook.Save as Dateiname" .
> M.E. bricht das Programm bei diesem Befehl ab , da keine Exceldatei
> gespeichert wird. Obwohl ein Fehlerausgang in der Prozedur drin ist, erfolgt
> keine Fehlermeldung.
>
> Programm läuft reibungslos auf dem Entwicklungsrechner.
> Auf dem Rechner, auf dem das VB-Programm getestet wird, ist Excel
> installiert.
bist Du sicher, dass Du in der richtigen Newsgroup gelandet bist?
Hier geht es um Access, nicht um VB oder Excel.
CU
--
Thomas
Homepage: www.Team-Moeller.de
| Betreff | Re: ExcelWorkbook.Saveas =?UTF-8?B?bMOkc3N0IFZCX1Byb2dyYW1tIGFicw==?= |
| Von | =?UTF-8?B?VGhvbWFzIE3DtmxsZXI=?= |
| Datum | 28.10.2009 15:16:45 |
Hallo Thomas,
Thomas Möller schrieb:
>> Programm läuft reibungslos auf dem Entwicklungsrechner.
>> Auf dem Rechner, auf dem das VB-Programm getestet wird, ist Excel
>> installiert.
>
> bist Du sicher, dass Du in der richtigen Newsgroup gelandet bist?
>
> Hier geht es um Access, nicht um VB oder Excel.
bist Du sicher, dass Du da nichts verwechselt hast. :-)
Die Frage ist in dieser NG schon vollkommen richtig.
GruÃ
--
Ingrid
Homepage: www.Team-Moeller.de
| Betreff | =?utf-8?Q?Re:_ExcelWorkbook.Saveas_l=C3=A4sst_V?= |
| Von | "Klaus Kugeren" |
| Datum | 28.10.2009 17:41:10 |
> M.E. bricht das Programm bei diesem Befehl ab , da keine Exceldatei
> gespeichert wird.
wie wär's mit einer Messagebox davor und dahinter?
| Betreff | =?Utf-8?Q?Re:_ExcelWorkbook.Saveas_l=C3=A4sst_V?= |
| Von | =?Utf-8?B?QWRhbSBMb2No?= |
| Datum | 28.10.2009 20:41:01 |
"Klaus Kugeren" wrote:
>
> wie wär's mit einer Messagebox davor und dahinter?
>
Eine Messagebox davor habe ich eingebaut, diese wird noch angezeigt.
| Betreff | Re: ExcelWorkbook.Saveas lässt VB_Programm abstürzen |
| Von | "Thorsten Albers" |
| Datum | 28.10.2009 20:02:39 |
Adam Loch
> mit einem VB-Programm soll eine Exceldatei erstellt und mit Daten
gefüllt
> werden. Progrann läuft bis zu dem Befehl" ExcelWorkbook.Save as
Dateiname" .
> M.E. bricht das Programm bei diesem Befehl ab , da keine Exceldatei
> gespeichert wird.
Oder bei einem Befehl davor?
> Obwohl ein Fehlerausgang in der Prozedur drin ist, erfolgt
> keine Fehlermeldung.
Obwohl ich ganz und gar nicht weiß, was ein 'Fehlerausgang' sein soll, so
bin ich mir doch sicher, daß durch einen 'Fehlerausgang' sowieso keine
Fehlermeldung erfolgen kann. Entweder läßt Du VB den Fehler 'raisen', d.h.
Du mußt alle On Error-Anweisungen an der vermuteten Fehlerstelle
auskommentieren oder außer Kraft setzen; dann meldet VB den Fehler. Oder -
auf jeden Fall vorzuziehen - Du mußt auf geeignete Weise protokollieren,
welche Schritte des Programmes durchlaufen wurden, und an der Stelle, wo
der Fehler aufgefangen, diese Informationen sowie die Fehlermeldung selbst
ausgeben.
> Programm läuft reibungslos auf dem Entwicklungsrechner.
> Auf dem Rechner, auf dem das VB-Programm getestet wird, ist Excel
> installiert.
Wenn wirklich 'ExelWorkbook.SaveAs' der Fehlerpunkt ist, dann liegt das
Problem vermutlich an dem dieser Funktion übergebenen Dateipfad, der
entweder ungültig ist, auf ein nicht existierendes Laufwerk oder
Verzeichnis verweist, oder auf ein Verzeichnis, in welchem keine
Schreibrechte bestehen. Laß mich raten: Der Pfad, den Du übergibst, wird
nicht dynamisch zur Laufzeit generiert sondern ist im Programmcode fixiert?
--
Thorsten Albers
albers (a) uni-freiburg.de
| Betreff | Re: ExcelWorkbook.Saveas =?UTF-8?B?bMOkc3N0IFZCX1Byb2dyYW1tIGFicw==?= |
| Von | Peter Rambauske |
| Datum | 28.10.2009 22:22:17 |
Hallo Adam,
> mit einem VB-Programm soll eine Exceldatei erstellt und mit Daten gefüllt
> werden. Progrann läuft bis zu dem Befehl" ExcelWorkbook.Save as Dateiname" .
> M.E. bricht das Programm bei diesem Befehl ab , da keine Exceldatei
> gespeichert wird. Obwohl ein Fehlerausgang in der Prozedur drin ist, erfolgt
> keine Fehlermeldung.
>
> Programm läuft reibungslos auf dem Entwicklungsrechner.
> Auf dem Rechner, auf dem das VB-Programm getestet wird, ist Excel
> installiert.
>
> Was könnte den die Fehlerursache sein bzw. wie kann ich überhaupt eine
> Fehlermeldung ersichtlich machen?
>
Welche Office-Version verwendest Du?
Mit Office-2007 und "Save As" hatten wir auch sonderbare Erlebnisse.
Wenn beim Zugriff auf eine Serverfreigabe der Benutzer nicht auf alle
Ordner im Baum die entsprechenden Rechte hat kommt es zu einem Fehler.
Eine Datei öffnen und speichern (Save) kann O-2007 ohne Probleme.
Beispiel:
//server/freigabe/a/b/c/mm.xls
Bei unserem Kunden haben die User auf freigabe und c die entsprechenden
Rechte, auf a und b keine Rechte. Bei vollständiger Eingabe des Pfades
kann der Explorer darauf zugreifen. O-2007 kann diese Datei öffnen und
speichern, aber nicht mit "save as" speichern.
Dieses Problem betrifft Excell und Word.
Wir haben lange gesucht, bis wir auf einem Testrechner und diesen Fehler
nachvollziehen konnten.
GrüÃe aus Wien
Peter
| Betreff | =?Utf-8?Q?Re:_ExcelWorkbook.Saveas_l=C3=A4sst_V?= |
| Von | =?Utf-8?B?QWRhbSBMb2No?= |
| Datum | 29.10.2009 11:28:01 |
Hallo Peter,
> Welche Office-Version verwendest Du?
Es wird Excel 2000 eingesetzt. Es liegt wohl nicht an den Rechten. Auch
nachdem alle Einschränkungen entfernt wurden, wird die Datei nicht
gespeichert - Programm verabschiedet sich ohne Meldung.
Verstehe nicht warum keine Fehlermeldung angezeigt wird bzw. nachstehender
Code ignoriert wird:
On Local Error Goto Datei_Fehler
....
....
Datei_Fehler:
MsgBox "Unbehandelter Fehler" & Cstr(Err.Number) & "-" & Err.Descirption & "
aufegreten."
GruÃ
GruÃ
| Betreff | =?UTF-8?Q?Re:_ExcelWorkbook.Saveas_l=C3=A4sst_V?= |
| Von | "Horst Heinrich Dittgens" |
| Datum | 29.10.2009 18:06:51 |
> On Local Error Goto Datei_Fehler
Hmm, was ist denn "Local Error" ?
Und wenn es das tatsächlich gibt, dann würde ich's mal mit 'global'
probieren: On Error Goto...
Wenn nämlich bei 'local' tatsächlich nur lokale Fehler behandelt werden
sollten, dann würde es mich nicht wundern, wenn ein externer Fehler (z.B. in
einer Komponente) den exitus subito auslösen würde....
| Betreff | Re: ExcelWorkbook.Saveas lässt VB_Programm abstürzen |
| Von | "Ingo Moch" |
| Datum | 29.10.2009 22:56:03 |
Hallo,
"Horst Heinrich Dittgens" schrieb:
>> On Local Error Goto Datei_Fehler
> Hmm, was ist denn "Local Error" ?
> Und wenn es das tatsächlich gibt, dann würde ich's mal mit 'global'
> probieren: On Error Goto...
>
> Wenn nämlich bei 'local' tatsächlich nur lokale Fehler behandelt werden
> sollten, dann würde es mich nicht wundern, wenn ein externer Fehler (z.B.
> in einer Komponente) den exitus subito auslösen würde....
Das "Local" gibt es noch aus Kompatibilitaet zu den DOS-Vorgaengern
(QuickBASIC, BASIC PDS, VBDOS). ON ERROR GOTO war dort global
und wurde auf Modulebene aktiviert. ON LOCAL ERROR GOTO war fuer
die prozeduale Ebene. Mit VisualBasic for Windows konnte kein Code
mehr auf Modulebene ausgefuehrt werden und somit auch die Moeglichkeit
genommen, mit OnBoard-Mitteln eine (umgebende) globale
Fehlerbehandlung zu definieren. Wie auch immer: "On Error Goto" und
"On Local Error Goto" ist unter VisualBasic dasselbe.
Ingo
| Betreff | Re: ExcelWorkbook.Saveas lässt VB_Programm abstürzen |
| Von | "Ingo Moch" |
| Datum | 29.10.2009 23:13:13 |
Hallo Adam,
"Adam Loch" schrieb:
> mit einem VB-Programm soll eine Exceldatei erstellt und mit Daten
> gefüllt werden. Progrann läuft bis zu dem Befehl
> "ExcelWorkbook.Save as Dateiname". M.E. bricht das Programm
> bei diesem Befehl ab , da keine Exceldatei gespeichert wird.
> Obwohl ein Fehlerausgang in der Prozedur drin ist, erfolgt
> keine Fehlermeldung.
ich habe auch mal so einem Phaenomen mehrere Tage lang
hinterhergesucht. Am Ende war es ein falsch übergebenener
Parameterwert für das Datei-Format.
Zeig doch mal den konkreten Aufruf als Code.
> Programm läuft reibungslos auf dem Entwicklungsrechner.
> Auf dem Rechner, auf dem das VB-Programm getestet wird, ist
> Excel installiert.
falls Du an der Stelle Variablen verwendest: Ist der Inhalt der
Variablen _sicher_ dieselben wie auf dem Entwicklungsrechner
(ggf. mal vor dem Aufruf in eine Logdatei schreiben lassen".
Um das hier schon angesprochene Rechteproblem auszuschliessen:
Passiert das auch, wenn die Datei lokal in den "Eigene Dateien"-
Ordner abgelegt werden?
Wenn Du sonst gar nicht weiterkommst: Protokolliere mal die
Dateizugriffe mit FileMon bzw. Process Monitor
(http://technet.microsoft.com/de-de/sysinternals/bb896645.aspx).
Kompilierst Du als Systemcode? Ich habe schon ein paar
wundersame Effekte verschwinden sehen, wenn ich zu P-Code
kompiliert habe.
HTH
Ingo
| Betreff | =?Utf-8?Q?Re:_ExcelWorkbook.Saveas_l=C3=A4sst_V?= |
| Von | =?Utf-8?B?QWRhbSBMb2No?= |
| Datum | 30.10.2009 09:13:01 |
Hallo Ingo,
"Ingo Moch" wrote:
>
> Zeig doch mal den konkreten Aufruf als Code.
>
>
Hier in Auszügen der Code:
....
Dim ExcelApp As Excel.Application
Dim ExcelWorkbook As Excel.Workbook
Dim ExcelSheet As Excel.Worksheet
....
Help_Verzeichnis = Help_Dateien_Pfad & "\" & Help_Datei & ".XLS"
On Local Error GoTo Datei_Fehler
If Len(Dir(Help_Verzeichnis)) <> 0 Then
Antwort = MsgBox(Help_Verzeichnis & " vorhanden! Soll diese Datei gelöscht
werden?", vbQuestion + vbYesNoCancel, "Excel-Datei erstellen")
If Antwort = vbCancel Or Antwort = vbNo Then
Exit Sub
End If
'Datei löschen
fso.DeleteFile Help_Verzeichnis, True
End If
'----------------------------------
'Löschen der Datei funktioniert!
'----------------------------------
'Datei erstellen
'erzeuge Excel Objekt
Set ExcelApp = CreateObject("Excel.Application")
'erzeuge ein neues Workbook
Set ExcelWorkbook = ExcelApp.Workbooks.Add
Set ExcelSheet = ExcelWorkbook.Worksheets(1)
ExcelApp.Columns("A").ColumnWidth = 10
ExcelApp.Columns("B").ColumnWidth = 13
ExcelApp.Columns("C").ColumnWidth = 40
ExcelApp.Columns("D").ColumnWidth = 13
ExcelApp.Columns("E").ColumnWidth = 13
ExcelApp.Columns("F").ColumnWidth = 13
Help_Excel_Zeile = 1
ExcelSheet.Cells(Help_Excel_Zeile, 1).value = "Re.-Nr."
ExcelSheet.Cells(Help_Excel_Zeile, 2).value = "Re.-Datum"
ExcelSheet.Cells(Help_Excel_Zeile, 3).value = "Kunde"
ExcelSheet.Cells(Help_Excel_Zeile, 4).value = "Betrag"
ExcelSheet.Cells(Help_Excel_Zeile, 5).value = "bezahlt am"
ExcelSheet.Cells(Help_Excel_Zeile, 6).value = "fällig am"
ExcelSheet.Cells(Help_Excel_Zeile, 1).Interior.ColorIndex = 33 'Blauer
Hintergrund
ExcelSheet.Cells(Help_Excel_Zeile, 2).Interior.ColorIndex = 33
ExcelSheet.Cells(Help_Excel_Zeile, 3).Interior.ColorIndex = 33
ExcelSheet.Cells(Help_Excel_Zeile, 4).Interior.ColorIndex = 33
ExcelSheet.Cells(Help_Excel_Zeile, 5).Interior.ColorIndex = 33
ExcelSheet.Cells(Help_Excel_Zeile, 6).Interior.ColorIndex = 33
ExcelSheet.Cells(Help_Excel_Zeile, 1).BorderAround 1, xlMedium
ExcelSheet.Cells(Help_Excel_Zeile, 2).BorderAround 1, xlMedium
ExcelSheet.Cells(Help_Excel_Zeile, 3).BorderAround 1, xlMedium
ExcelSheet.Cells(Help_Excel_Zeile, 4).BorderAround 1, xlMedium
ExcelSheet.Cells(Help_Excel_Zeile, 5).BorderAround 1, xlMedium
ExcelSheet.Cells(Help_Excel_Zeile, 6).BorderAround 1, xlMedium
ExcelApp.Range("A1:F1").Select
ExcelApp.Selection.Font.Bold = True
......
'Excel-Zellen füllen, Z.B. so:
Help_Excel_Zeile = Help_Excel_Zeile + 1
ExcelSheet.Cells(Help_Excel_Zeile, 1) = Rechnungsnummer
......
.....
'Speichern
'Für Test eingebaut, wird angezeigt:
'--->
MsgBox "Die Excel-Datei " & Help_Verzeichnis & " muà nur noch gespeichert
werden!", vbInformation, "Excel-Datei speichern"
'--->
'speichere das neue Workbook
ExcelWorkbook.SaveAs Help_Verzeichnis
'schliessen
ExcelWorkbook.Close False
ExcelApp.Quit
Set ExcelApp = Nothing
Set ExcelWorkbook = Nothing
Set ExcelSheet = Nothing
Diese Meldung wird nicht mehr angezeigt:
--->
MsgBox "Eine Excel-Datei wurde erstellt!", vbInformation, "Excel-Datei
erstellen"
--->
Exit Sub
Datei_Fehler:
'MsgBox Error
MsgBox "Unbehandelter Fehler " & CStr(Err.Number) & "-" & Err.Description &
" aufgetreten."
> Kompilierst Du als Systemcode?
Es wird zu System-Code kompiliert.
GruÃ
| Betreff | Re: ExcelWorkbook.Saveas =?UTF-8?B?bMOkc3N0IFZCX1Byb2dyYW1tIGFicw==?= |
| Von | Christoph Basedau |
| Datum | 30.10.2009 10:54:00 |
Adam Loch schrieb:
> "Ingo Moch" wrote:
>
>> Zeig doch mal den konkreten Aufruf als Code.
>
> Hier in Auszügen der Code:
>
> .....
> Dim ExcelApp As Excel.Application
> Dim ExcelWorkbook As Excel.Workbook
> Dim ExcelSheet As Excel.Worksheet
> .....
>
> Help_Verzeichnis = Help_Dateien_Pfad & "\" & Help_Datei & ".XLS"
Hier würde ich sicherstellen, dass nur EIN Backslash im Spiel sein kann,
wenn Help_Dateien_Pfad als Rootdir übergeben wird, z.B. D:\
würde "D:\\name.xls" draus.
Da Du das FSO verwendest:
Help_Verzeichnis = fso.BuildPath ( _
Help_Dateien_Pfad , Help_Datei & .XLS")
"Help_Verzeichnis" ist übrigens ein suboptimaler Name für eine DATEI.
>
> On Local Error GoTo Datei_Fehler
>
>
> If Len(Dir(Help_Verzeichnis)) <> 0 Then
> Antwort = MsgBox(Help_Verzeichnis & " vorhanden! Soll diese Datei gelöscht
> werden?", vbQuestion + vbYesNoCancel, "Excel-Datei erstellen")
>
> If Antwort = vbCancel Or Antwort = vbNo Then
> Exit Sub
> End If
>
> 'Datei löschen
>
> fso.DeleteFile Help_Verzeichnis, True
>
> End If
>
> '----------------------------------
> 'Löschen der Datei funktioniert!
> '----------------------------------
das ist nicht gesagt, Du müsst es eigentlich nochmals
prüfen, ob die Datei noch da ist, evtl hat's mit einem Zugriffsfehler zu
tun, ihmo gibt es auch Situation wo DeleteFile keinen Fehler wirft, auch
wenn nichts deleted wurde.
>
> 'Datei erstellen
>
>
> 'erzeuge Excel Objekt
> Set ExcelApp = CreateObject("Excel.Application")
>
> 'erzeuge ein neues Workbook
> Set ExcelWorkbook = ExcelApp.Workbooks.Add
> Set ExcelSheet = ExcelWorkbook.Worksheets(1)
>
> ExcelApp.Columns("A").ColumnWidth = 10
...
> ExcelSheet.Cells(Help_Excel_Zeile, 6).BorderAround 1, xlMedium
>
> ExcelApp.Range("A1:F1").Select
> ExcelApp.Selection.Font.Bold = True
Selection-Objekt ist hier unnötig:
ExcelApp.Range("A1:F1").Font.Bold = True
reicht völlig aus.
Selection/Select sollte man bei Automatisierung
weitgehend vermeiden, weil es durch Userinteraktion verändert
werden könnte und auch weil es langsam ist.
Mit dem Problem hier dürfte es allerdings eher nichts zu
tun haben.
> 'Excel-Zellen füllen, Z.B. so:
>
> Help_Excel_Zeile = Help_Excel_Zeile + 1
>
> ExcelSheet.Cells(Help_Excel_Zeile, 1) = Rechnungsnummer
>
> .......
>
> ......
>
>
> 'Speichern
>
> 'Für Test eingebaut, wird angezeigt:
> '--->
> MsgBox "Die Excel-Datei " & Help_Verzeichnis & " muà nur noch gespeichert
> werden!", vbInformation, "Excel-Datei speichern"
> '--->
>
> 'speichere das neue Workbook
> ExcelWorkbook.SaveAs Help_Verzeichnis
> Diese Meldung wird nicht mehr angezeigt:
> --->
> MsgBox "Eine Excel-Datei wurde erstellt!", vbInformation, "Excel-Datei
> erstellen"
> --->
Wenn Der ErrHandler nicht mehr angesprungen wird, liegt der Fehler auf
einer Ebene, bei der auch die Runtime crasht. Bei API-Calls mit falschen
Zeiger-Ãbergaben oder nicht-alloziertem Speicher
passiert das ganz gerne.
Zum Troubleshooting würde ich mal
- diverse Parameter für den Speicherpfad austesten (möglichst
unterschiedliche LWs und LW-Typen
- weitere Parameter der SaveAs-Methode prüfen, v.a.
explizites FileFormat
- auf unterschiedlichen Rechnern mit unterschiedlichen XLS-Versionen
testen
- testen ob es an dem Dateizugriff selbst liegt, unabhängig von Excel.
Also einfach eine Textdatei an dem besagten Speicherort erstellen
mit VB- oder FSO-Bordmitteln. Wenn es auch hier ein Problem gibt, ist
das Problem kein Excel- sondern ein Zugriff- bzw Dateinamensformat-
Problem.
HTH,
Christoph
| Betreff | Re: ExcelWorkbook.Saveas lässt VB_Programm abstürzen |
| Von | "Thorsten Albers" |
| Datum | 30.10.2009 13:44:50 |
Adam Loch
<5DC6B4E8-B8C1-4637-B2D6-E2439BC5CF99@microsoft.com>...
> 'Für Test eingebaut, wird angezeigt:
> '--->
> MsgBox "Die Excel-Datei " & Help_Verzeichnis & " muà nur noch
gespeichert
> werden!", vbInformation, "Excel-Datei speichern"
> '--->
> 'speichere das neue Workbook
> ExcelWorkbook.SaveAs Help_Verzeichnis
Dann sollte hier zum Test aber auch gleich noch eine Nachricht ausgegeben
werden, am besten:
MsgBox ExcelWorkbook.FullName & " wurde gespeichert."
Testweise solltest Du auch das 'On Local Error GoTo Datei_Fehler' 'mal
auskommentieren.
--
Thorsten Albers
albers (a) uni-freiburg.de
| Betreff | Re: ExcelWorkbook.Saveas lässt VB_Programm abstürzen |
| Von | "Ingo Moch" |
| Datum | 31.10.2009 22:18:45 |
Hallo Adam,
"Adam Loch" schrieb:
> "Ingo Moch" wrote:
> ....
> Dim ExcelApp As Excel.Application
> Dim ExcelWorkbook As Excel.Workbook
> Dim ExcelSheet As Excel.Worksheet
"Early binding" ist bei Office-Objekten eine eher unguenstige Wahl, es sei
denn, Du hast es mindeststens zu 100% im Griff, dass auch wirklich die
selbe Version zum Einsatz kommt. Erschwerend kommt noch hinzu,
dass Du weiter unten mit
Set ExcelApp = CreateObject("Excel.Application")
soger den Versuch des "late binding" vollziehst.
> ....
>
> Help_Verzeichnis = Help_Dateien_Pfad & "\" & Help_Datei & ".XLS"
>
> On Local Error GoTo Datei_Fehler
>
> If Len(Dir(Help_Verzeichnis)) <> 0 Then
Damit erwischt Du u. a. keine versteckten Dateien ... aber das nur
nebenbei.
> [...]
>
> 'Speichern
>
> 'Für Test eingebaut, wird angezeigt:
> '--->
> MsgBox "Die Excel-Datei " & Help_Verzeichnis & " muß nur noch
> gespeichert werden!", vbInformation, "Excel-Datei speichern"
> '--->
>
> 'speichere das neue Workbook
> ExcelWorkbook.SaveAs Help_Verzeichnis
Welchen Wert hat denn die Variable "Help_Verzeichnis"?
>> Kompilierst Du als Systemcode?
> Es wird zu System-Code kompiliert.
Und unter P-Code ist dasselbe Phaenomen zu sehen?
Ingo
| Betreff | =?Utf-8?Q?Re:_ExcelWorkbook.Saveas_l=C3=A4sst_V?= |
| Von | =?Utf-8?B?QWRhbSBMb2No?= |
| Datum | 02.11.2009 15:20:01 |
On Local Error ... wurde entfernt.
Es wurden unterschiedliche Verzeichnisse ausgewählt:
z.B. C:\Dokumente und Einstellungen\xy\Eigene Dateien oder C:\Dukumente und
Einstellungen\ All Users\Dokumente\Eigene Bilder oder x:\Export
Die Meldung:
Die Excel-Datei x:\export\ra0910.xls muà nur noch gespeichert werden!
wird noch angezeigt.
Nach dem Klick auf das OK der MsgBox meldet Windows :
vbtest.exe hat ein Fehler entdeckt und muss beendet werden.
GruÃ
| Betreff | Re: ExcelWorkbook.Saveas lässt VB_Programm abstürzen |
| Von | "Thorsten Albers" |
| Datum | 02.11.2009 21:29:11 |
Adam Loch
> Es wurden unterschiedliche Verzeichnisse ausgewählt:
> z.B. C:\Dokumente und Einstellungen\xy\Eigene Dateien oder C:\Dukumente
und
> Einstellungen\ All Users\Dokumente\Eigene Bilder oder x:\Export
Hast Du denn 'mal auf dem betroffenen System versucht, in Excel selbst die
Datei unter den angegebenen Pfaden zu speichern? Kommt da auch eine
Fehlermeldung?
> vbtest.exe hat ein Fehler entdeckt und muss beendet werden.
Zunächst einmal kann man damit schon sagen, daß >>kein<< direkter
VB-Programmierfehler vorliegt, denn es wird kein VB-Laufzeitfehler
ausgelöst sondern Dein Programm schmiert einfach ab. Wenn - wie ich annehme
- in deinem Code keinerlei Manipulationen mit CopyMemory() oder dergleichen
durchgeführt werden, ist ein indirekter VB-Programmierfehler (z.B. durch
Zugriff auf ungültigen Speicher) vermutlich ebenfalls auszuschließen.
Bliebe noch die Möglichkeit, daß eine in Deinem Programm eingesetzte
Komponente von einem anderen Hersteller zu Problemen führt. Verwendest Du
da irgendetwas?
Da so vermutlich alle möglichen Fehlerpunkte in Deinem eigenen Code
auszuschließen sind, und da laut einem Posting von Dir Dein Programm auf
einem anderen System problemlos arbeitet, liegt die Vermutung nahe, daß der
Fehler nicht durch Dein Programm verursacht wird sondern die Ursache im
System, auf welchem der Fehler auftritt, zu suchen ist. Da gibt es
natürlich viele mögliche Ursachen, angefangen bei einer fehlerhaften MS
Excel-Installation bis hin zu Festplattenfehlern. Wenn Du einfach 'mal nach
"hat ein Fehler entdeckt und muss beendet werden" googelst, zeigen die
Treffer (auf einen ersten Blick) zahlreiche mögliche Ursachen.
Auf der Fehlersuche würde ich zunächst einmal nach und nach alle Programme
deaktivieren, die das Dateisystem überwachen, wie z.B. Viren- und
Spyware-Scanner. Hilft das nichts, wäre zu überlegen, MS Excel einmal neu
zu installieren. Bringt auch das keine Änderung, sollte(n) die
betroffene(n) Festplatte(n) einmal mit einem entsprechenden, vom
Festplatten-Hersteller zur Verfügung gestellten Tool überprüft werden. Ist
das möglich und die Sache wert, sollte natürlich als eine der letzten
Möglichkeiten auch in Betracht gezogen werden, die Festplatte neu zu
formatieren und das Betriebssystem neu zu installieren.
--
Thorsten Albers
albers (a) uni-freiburg.de
| Betreff | =?Utf-8?Q?Re:_ExcelWorkbook.Saveas_l=C3=A4sst_V?= |
| Von | =?Utf-8?B?QWRhbSBMb2No?= |
| Datum | 02.11.2009 16:46:09 |
"Ingo Moch" wrote:
> Und unter P-Code ist dasselbe Phaenomen zu sehen?
Gleiche Reaktion auch als P-Code (kompiliert als P-Code ist das .exe-File
nur halb so groÃ):
vbTest.exe hat ein Problem festgestellt und muà beendet werden.
GruÃ
| Betreff | Re: ExcelWorkbook.Saveas lässt VB_Programm abstürzen |
| Von | "Ingo Moch" |
| Datum | 04.11.2009 00:24:03 |
Hallo Adam,
"Adam Loch" schrieb:
> "Ingo Moch" wrote:
>> Und unter P-Code ist dasselbe Phaenomen zu sehen?
>
> Gleiche Reaktion auch als P-Code (kompiliert als P-Code ist das
> .exe-File nur halb so groß):
>
> vbTest.exe hat ein Problem festgestellt und muß beendet werden.
irgendwie beantwortest Du nicht alle Vorschlaege ...
- Hast Du nun auf "late binding" umgestellt?
- explizite Angabe des Dateiformat (Ergänzend: Ggf. auch mal
ein reines Textformat testen)
Zudem ist bei mir folgende Frage aufgetaucht: Welchen Datentyp
hat denn die Variable Help_Verzeichnis?
Ingo
| Betreff | =?Utf-8?Q?Re:_ExcelWorkbook.Saveas_l=C3=A4sst_V?= |
| Von | =?Utf-8?B?QWRhbSBMb2No?= |
| Datum | 06.11.2009 13:43:01 |
"Ingo Moch" wrote:
>
> irgendwie beantwortest Du nicht alle Vorschlaege ...
>
> - Hast Du nun auf "late binding" umgestellt?
Habe nun auf Late Binding umgestellt:
Dim ExcelApp As Object
Dim ExcelWorkbook As Object
Dim ExcelSheet As Object
Damit funktioniert es.
> Zudem ist bei mir folgende Frage aufgetaucht: Welchen Datentyp
> hat denn die Variable Help_Verzeichnis?
>
Dim Help_Datei As String
Dim Help_Dateien_Pfad As String
Dim Help_Verzeichnis As String
Help_Datei = "RA" & Format(Val(cmbFuerJahr.Text) Mod 100, "00") & _
Format(Val(cmbFuerMonat.Text), "00")
'
'--
Verkürzt dargestellt:
Excel_Statistikdatei_123=Dir1.path
Excel_Statistikdatei_123=Trim(Excel_Statistikdatei_123)
'---
'
Help_Dateien_Pfad = Excel_Statistikdatei_123
Help_Verzeichnis = Help_Dateien_Pfad & "\" & Help_Datei & ".XLS"
Habe auch die Reihenfolge geändert:
Set ExcelSheet = Nothing
Set ExcelWorkbook = Nothing
Set ExcelApp = Nothing
Vielen Dank an alle für die Hilfe.
GruÃ
| Betreff | Re: ExcelWorkbook.Saveas lässt VB_Programm abstürzen |
| Von | "Thorsten Albers" |
| Datum | 06.11.2009 22:08:16 |
Adam Loch
<2690607A-4B60-4C65-92B2-4AEDE7B2F5D3@microsoft.com>...
> Damit funktioniert es.
> ...
> Vielen Dank an alle für die Hilfe.
Hast Du denn nun festgestellt, was denn nun die eigentliche Ursache für das
Abschmieren war?
--
Thorsten Albers
albers (a) uni-freiburg.de
| Betreff | Re: ExcelWorkbook.Saveas lässt VB_Programm abstürzen |
| Von | "Ingo Moch" |
| Datum | 12.11.2009 17:04:19 |
Hallo Thorsten,
"Thorsten Albers" schrieb:
> Adam Loch schrieb:
>> Damit funktioniert es.
>> ...
>> Vielen Dank an alle für die Hilfe.
> Hast Du denn nun festgestellt, was denn nun die
> eigentliche Ursache für das Abschmieren war?
Da das late binding den Fehler behoben hat,
duerfte es eine Inkompatibilitaet der Programm-
bibliothek vorgelegen haben, sprich: Der
Endanwender-PC war auf einem anderen Excel-
Updatestand als der Entwickler-PC. MS-Office-
Produkte sind da AFAIR seeeehr sensibel und
sollten daher besser nicht per early binding
angesprochen werden.
Ingo
| Betreff | Re: ExcelWorkbook.Saveas lässt VB_Programm abstürzen |
| Von | "Thorsten Albers" |
| Datum | 13.11.2009 13:31:45 |
Ingo Moch
> Da das late binding den Fehler behoben hat,
> duerfte es eine Inkompatibilitaet der Programm-
> bibliothek vorgelegen haben, sprich: Der
> Endanwender-PC war auf einem anderen Excel-
> Updatestand als der Entwickler-PC. MS-Office-
> Produkte sind da AFAIR seeeehr sensibel und
> sollten daher besser nicht per early binding
> angesprochen werden.
Eigentlich sollte es dann aber zu einer 'kontrollierten' Fehlermeldung
kommen à la 'Objekt nicht erstellbar' o.ä. - und nicht zu einem simplen
Programm->>Absturz<<.
--
Thorsten Albers
albers (a) uni-freiburg.de
| Betreff | Re: ExcelWorkbook.Saveas laesst VB_Programm abstuerzen |
| Von | "Ingo Moch" |
| Datum | 14.11.2009 23:32:10 |
Hallo Thorsten,
"Thorsten Albers" schrieb:
> Ingo Moch schrieb:
>> Da das late binding den Fehler behoben hat,
>> duerfte es eine Inkompatibilitaet der Programm-
>> bibliothek vorgelegen haben, sprich: Der
>> Endanwender-PC war auf einem anderen Excel-
>> Updatestand als der Entwickler-PC. MS-Office-
>> Produkte sind da AFAIR seeeehr sensibel und
>> sollten daher besser nicht per early binding
>> angesprochen werden.
> Eigentlich sollte es dann aber zu einer
> 'kontrollierten' Fehlermeldung kommen à la
> 'Objekt nicht erstellbar' o.ä. - und nicht zu
> einem simplen Programm->>Absturz<<.
Das "eigentlich" ist hier zu betonen. Bei den
MS-Office-Produkten erstaunen mich irgenwelche
Effekte beim early binding ueberhaupt nicht
mehr. Ich vermute, dass es an einer vom Office-
Objekt verwendeten DLL o. ae. liegt, welche
aktualisiert wurde.
Das ist natuerlich eine reine Spekulation
meinerseits. Du brauchst aber nur einmal Google
anzuwerfen und wirst in massen auf diese
Phaenomene stossen.
In folgendem Artikel hat ein Word-MVP ein
Beispiel zu irrefuehrenden Meldungen geschrieben:
http://word.mvps.org/fAQs/InterDev/EarlyvsLateBinding.htm
Ingo
| Betreff | =?Utf-8?Q?Re:_ExcelWorkbook.Saveas_l=C3=A4sst_V?= |
| Von | =?Utf-8?B?QWRhbSBMb2No?= |
| Datum | 04.11.2009 09:14:01 |
Hallo Zusammen,
eine Textdatei wird erstellt:
'####### für Textdateientest
Textdatei_Pfad = Help_Dateien_Pfad & "\" & Help_Datei & ".DAT"
'###### Test: Erstellen einer Textdatei ########
With fso
Set Textschlange = .CreateTextFile(Textdatei_Pfad, True)
End With
With Textschlange
.Write ("Das ist nur ein Test - Wird wenigstens diese Datei gespeichert?")
.Close
End With
MsgBox "Die Text-Datei " & Textdatei_Pfad & " wurde gespeichert!",
vbInformation, "Test Datei speichern"
'#######
Nach Klick auf OK bricht Programm wieder ab, es folgt ja:
'speichere das neue Workbook
ExcelWorkbook.SaveAs Help_Verzeichnis
Kann dem Kunden nicht sagen installiere MS-Excel neu, oder gar das
Betriebssysstem.
Es wird noch ein Versuch mit abgeschaltetem Virenscanner durchgeführt.
GruÃ
| Betreff | Re: ExcelWorkbook.Saveas lässt VB_Programm abstürzen |
| Von | "Thorsten Albers" |
| Datum | 04.11.2009 13:30:49 |
Adam Loch
<5DC6B4E8-B8C1-4637-B2D6-E2439BC5CF99@microsoft.com>...
> 'erzeuge Excel Objekt
> Set ExcelApp = CreateObject("Excel.Application")
>
> 'erzeuge ein neues Workbook
> Set ExcelWorkbook = ExcelApp.Workbooks.Add
> Set ExcelSheet = ExcelWorkbook.Worksheets(1)
> ...
> Set ExcelApp = Nothing
> Set ExcelWorkbook = Nothing
> Set ExcelSheet = Nothing
Ups - hier stimmt m.E. was nicht:
- 'ExelSheet' verweist auf ein Objekt, das von 'ExcelWorkbook'/'ExcelApp'
bereitgestellt wird
- 'ExcelWorkbook' verweist auf ein Objekt, das von 'ExcelApp'
bereitgestellt wird
Wenn Du 'ExcelApp' vor 'ExcelWorkbook' und 'ExcelSheet' sowie
'ExcelWorkbook' vor 'ExcelSheet' freigibst, denke ich, muß es zu Problemen
bei der internen Verwaltung der Objekte kommen, da mit 'ExcelApp' auch
'ExcelApp.Workbooks' und mit 'ExcelWorkbook' auch
'ExcelWorkbook.Worksheets' freigegeben werden.
Stelle also mal um zu:
Set ExcelSheet = Nothing
Set ExcelWorkbook = Nothing
Set ExcelApp = Nothing
--
Thorsten Albers
albers (a) uni-freiburg.de
| Betreff | Re: ExcelWorkbook.Saveas lässt VB_Programm abstürzen |
| Von | "Thomas Ehlert" |
| Datum | 04.11.2009 15:51:26 |
"Thorsten Albers"
news:01ca5d4a$96f879b0$0100007f@thalk8s8x...
> Ups - hier stimmt m.E. was nicht:
> Stelle also mal um zu:
>
> Set ExcelSheet = Nothing
> Set ExcelWorkbook = Nothing
> Set ExcelApp = Nothing
Hi,
aber selbst wenn - eine Variable auf Nothing stellen, selbst wenn der
Variablen gerade das Objekt unter dem Hintern weggezogen wurde,
dürfte keine Fehler, geschweige denn Abstürze verursachen?!?
Gruß
Thomas
| Betreff | Re: ExcelWorkbook.Saveas lässt VB_Programm abstürzen |
| Von | "Thorsten Albers" |
| Datum | 04.11.2009 17:52:34 |
Thomas Ehlert
> aber selbst wenn - eine Variable auf Nothing stellen, selbst wenn der
> Variablen gerade das Objekt unter dem Hintern weggezogen wurde,
> dürfte keine Fehler, geschweige denn Abstürze verursachen?!?
Wenn man es 'mal von VB aus betrachtet: Das Terminate-Ereignis wird laut
VB-Online-Hilfe gefeuert, wenn 'alle Verweise auf eine Instanz eines
(...)-Objekts, eines Benutzersteuerelements oder einer Klasse aus dem
Hauptspeicher entfernt werden, weil alle Variablen, die auf das Objekt
verweisen, auf den Wert Nothing gesetzt werden, oder weil der letzte
Verweis auf das Objekt außerhalb desGültigkeitsbereichs liegt'.
Theoretisch betrachtet müßte, wenn
Set ExcelSheet = Nothing
gesetzt wird, demnach
ExcelWorkbook.Worksheets(1).Terminate
ausgelöst werden. 'Terminate' ist dabei theoretisch und stehe hier einfach
'mal für das, was ein bzw. dieses Excel-Objekt macht, wenn es freigegeben
und gelöscht wird (z.B. Freigabe von Ressourcen, Speicher etc.).
Da 'ExcelWorkbook' (und damit auch 'Worksheets(1)') zu diesem Zeitpunkt
aber bereits durch das vorhergehende
Set ExcelWorkbook = Nothing
freigegeben und gelöscht wurde, liefe der Aufruf von
ExcelWorkbook.Worksheets(1).Terminate
'in's Leere'. Der Referenz in 'ExcelSheet' auf
'ExcelWorkbook.Worksheets(1)' ist nach
Set ExcelWorkbook = Nothing
ungültig, d.h. es wird auf ein Objekt verwiesen, das nicht mehr existiert.
Ich denke, daß VB das innerhalb der IDE auffängt bzw. auffangen kann, daß
es in einem eigenständigen Programm aber zu einem Absturz führen kann bzw.
müßte.
--
Thorsten Albers
albers (a) uni-freiburg.de
| Betreff | Re: ExcelWorkbook.Saveas lässt VB_Programm abstürzen |
| Von | "Gerald Haberl" |
| Datum | 05.11.2009 07:17:01 |
"Adam Loch"
news:5DC6B4E8-B8C1-4637-B2D6-E2439BC5CF99@microsoft.com...
................
> 'erzeuge Excel Objekt
> Set ExcelApp = CreateObject("Excel.Application")
>
> 'erzeuge ein neues Workbook
> Set ExcelWorkbook = ExcelApp.Workbooks.Add
> Set ExcelSheet = ExcelWorkbook.Worksheets(1)
Bei geöffnetem Excel wird eine zweite Applikation im Hintergrund erzeugt.
Beim Schließen (und SaveAs) wird (mit Excel < 2007) IMHO meist die sichtbare
Anwendung geschlossen.
Die neu erzeugte bleibt im Hintergrund offen und verursacht Schweinereien.
Ich versuche daher immer mit GetObject ein bereits geöffnetes Excel zu
verwenden.
Gerald
No comments:
Post a Comment