Grafikfehler beim Öffnen einer Exceltabelle über ShellExecute

28/05/2009 - 08:45 von Volker Scherf | Report spam
Hallo NG,
- A2K-SP3, ADE-Projekt
Mit nachfolgendem Code erzeuge ich eine Excel-Tabelle und öffne diese dann
zum Bearbeiten.
Nun habe ich folgendes Problem, dass auf einigen Rechnern ein Grafikfehler
auftritt, d.h. der Inhalt des Excelfensters enthàlt praktisch wie eine Art
Snapshot des aktuellen Access-Formulars, aus welchem ich die Tabelle
geöffnet habe. Kann es evtl. an der Shell32.dll liegen auf die in
ShellExecute verwiesen wird? Also auf meinem Entwicklungsrechner ist
WinXP-SP3 drauf, auf den Rechnern, auf denen es nicht funktioniert isses
gemischt: W2K-SP4, WinXP-SP3.

Die Menüs in Excel funktionieren komischerweise alle. Wenn ich die Tabelle
schließe und manuell öffne, dann wird alles korrekt angezeigt. Dazu muss ich
Excel allerdings erst schließen, da sonst der Grafikfehler bestehen bleibt.

#####
Private Sub cmdExportExcel_Click()

Dim stDocName As String
Dim strFileName As String
Dim x As Long, y As Long
Dim RC As Long
Dim intColor As Integer

10 On Error GoTo cmdExportExcel_Click_Error

Dim strModulName As String
Dim varErrLine As Variant

20 intColor = 24

30 RC =
NullToZero(Me!frm_bemusterungen_stat_u_liste.Form.RecordsetClone.RecordCount)

40 If RC = 0 Then
50 FormatMsgBox "Hinweis@Keine Daten zum Exportieren!",
vbInformation
60 GoTo ExitHere
70 End If

80 strModulName = "Sub:
Form_frm_bemusterungen_stat.cmdExportExcel_Click"

90 strFileName = GetTempDir(True) & "BemusterungStatistik.xls"

100 stDocName = "rep_bemuster_stat_XLS"
110 DoCmd.OutputTo acOutputReport, stDocName, acFormatXLS,
strFileName, False

Dim oExcel As Object, oBook As Object, oSheet As Object

120 Set oExcel = CreateObject("Excel.Application")
130 Set oBook = oExcel.Workbooks.Open(strFileName)
140 Set oSheet = oBook.Worksheets(1)
150 oExcel.DisplayAlerts = False

160 oSheet.Columns("A:Q").AutoFit
170 oSheet.Range("A:Q").Cells.VerticalAlignment = xlVAlignCenter
180 oSheet.Range("A1:A" & RC + 1 & "").RowHeight = 16

190 oSheet.Range("A1:Q" & RC + 1 & "").Borders.LineStyle =
xlContinuous
200 oSheet.Range("A1:Q" & RC + 1 & "").Borders.Color = RGB(150, 150,
150)

210 oSheet.Range("A1:A" & RC + 1 & "").Interior.ColorIndex = intColor
220 oSheet.Range("C1:C" & RC + 1 & "").Interior.ColorIndex = intColor
230 oSheet.Range("E1:E" & RC + 1 & "").Interior.ColorIndex = intColor
240 oSheet.Range("G1:G" & RC + 1 & "").Interior.ColorIndex = intColor
250 oSheet.Range("I1:I" & RC + 1 & "").Interior.ColorIndex = intColor
260 oSheet.Range("K1:K" & RC + 1 & "").Interior.ColorIndex = intColor
270 oSheet.Range("M1:M" & RC + 1 & "").Interior.ColorIndex = intColor
280 oSheet.Range("O1:O" & RC + 1 & "").Interior.ColorIndex = intColor
290 oSheet.Range("Q1:Q" & RC + 1 & "").Interior.ColorIndex = intColor

300 oSheet.Range("A1:Q1").Interior.ColorIndex = 11
310 oSheet.Range("A1:Q1").Cells.Font.ColorIndex = 2

320 With oSheet.Range("A1:Q1").Cells
330 .Orientation = 0
340 .Font.Bold = True
350 .Font.Size = 8
360 .Borders.Color = RGB(150, 150, 150)
370 End With

380 oExcel.DisplayAlerts = True
390 oBook.Save
400 oExcel.Quit

410 x = ShellExecute(0&, "open", """" & strFileName & """", "", 0&,
vbMaximizedFocus + vbReadOnly)

420 If x = 0 Then
430 Err.Raise 9999, , "Fehler beim Öffnen von '" & strFileName &
"'"
440 End If

ExitHere:
450 Set oExcel = Nothing
460 Set oBook = Nothing
470 Set oSheet = Nothing
480 Exit Sub

cmdExportExcel_Click_Error:
[...]

End Sub
#####

#####
Declare Function ShellExecute Lib "shell32.dll" Alias _
"ShellExecuteA" _
(ByVal hwnd As Long, _
ByVal lpOperation As String, _
ByVal lpFile As String, _
ByVal lpParameters As String, _
ByVal lpDirectory As String, _
ByVal nShowCmd As Long) As Long
#####


Viele Grüße,
Volker Scherf
 

Lesen sie die antworten

#1 Jörg Ackermann
28/05/2009 - 09:22 | Warnen spam
Hallo Volker,

Volker Scherf meinte:

Mit nachfolgendem Code erzeuge ich eine Excel-Tabelle und öffne diese
dann zum Bearbeiten.
Nun habe ich folgendes Problem, dass auf einigen Rechnern ein
Grafikfehler auftritt
[Snip]



In der zeile 170 muß der Wert der Konstante xlVAlignCenter
angegeben werden, falls Du sie nicht woanders explicit
deklariert hast

Ich würde nach Zeile 110 kontrollieren, ob das
Excel-File fertig geschrieben ist, indem Du zB.
testest, ob die Datei exklusiv geöffnet werden kann.

Ggf tut es auch ein DoEvents, vielleicht in einer
Schleife von 1-2 Sec. Dauer.


Gruß Acki

Mitglied im DBDEV http://www.dbdev.org
Access-FAQ: http://www.donkarl.com

Ähnliche fragen