Sonntag, 10. Januar 2010

Utf Q ExcelWorkbook Saveas l C A sst VB FPr

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 schrieb im Beitrag
...
> 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 schrieb im Beitrag
<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 schrieb im Beitrag
...
> 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 schrieb im Beitrag
<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 schrieb im Beitrag
...
> 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 schrieb im Beitrag
<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" schrieb im Newsbeitrag
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 schrieb im Beitrag
...
> 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" schrieb im Newsbeitrag
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


Keine Kommentare:

Kommentar veröffentlichen