Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1032to1036
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
Inhaltsverzeichnis

Absturz bei Import von Codes für Module und Tab.

Absturz bei Import von Codes für Module und Tab.
11.12.2008 12:21:00
Codes
Guten Tag
Beim Ausführen des Nachfolgenden Codes erhalte ich regelmässig einen Excel-Absturz. Gibt es irgend eine Möglichkeit zu lokalisieren, wo der Fehler liegt?
Die zu importierenden Files liegen im Ordner, wo die Datei abgespeichert ist aus der der Code ausgeführt wird. Die Endungen sind *.cls, *.bas
Vielen Dank für jeden Hinweis.
Gruss, Peter

Public Sub prcImport()
Dim objVBComponents As Object, strFilename As String
If FuObjFile Is Nothing Then Exit Sub 'überprüfen, ob weniger oder mehr als zwei Dateien  _
offen
With Workbooks(FuObjFile.Name).VBProject  'FuObjFile ist ein Objekt
For Each objVBComponents In .VBComponents
Select Case objVBComponents.Type
Case 1, 2, 3
.VBComponents.Remove .VBComponents(objVBComponents.Name)
Case 100
With objVBComponents.CodeModule
.DeleteLines 1, .CountOfLines
End With
End Select
Next
strFilename = Dir$(ThisWorkbook.Path & "\" & "*.*")
Do While strFilename  ""
If UCase$(Right$(strFilename, 4)) = ".BAS" Or _
UCase$(Right$(strFilename, 4)) = ".FRM" Or _
UCase$(Right$(strFilename, 4)) = ".CLS" Then
.VBComponents.Import ThisWorkbook.Path & "\" & strFilename
End If
strFilename = Dir$
Loop
On Error Resume Next
For Each objVBComponents In .VBComponents
If objVBComponents.Type = 2 Then
Err.Clear
If Left$(objVBComponents.Name, 17) = "DieseArbeitsmappe" Or _
Left$(objVBComponents.Name, 7) = "Tabelle" Or _
Left$(objVBComponents.Name, 8) = "Diagramm" Then
.VBComponents(Left$(objVBComponents.Name, Len(objVBComponents.Name) - 1)).  _
_
CodeModule.InsertLines 1, objVBComponents.CodeModule.Lines( _
1, objVBComponents.CodeModule.CountOfLines)
If Err.Number = 0 Then
.VBComponents.Remove .VBComponents(objVBComponents.Name)
Else
Debug.Print objVBComponents.Name
End If
End If
End If
Next
End With
End Sub


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

Betreff
Datum
Anwender
Anzeige
AW: Absturz bei Import von Codes für Module und Tab.
11.12.2008 12:31:00
Codes
Hallo Peter,
Du hast den Zugriff auf das VBA Projekt zugelassen?

AW: Absturz bei Import von Codes für Module und Tab.
11.12.2008 13:44:00
Codes
Hallo Hajo
Ja, den Zugriff habe ich zugelassen.
Zudem habe ich bei VBA-Umgebung, Extrax "Verweise" Folgende aktiviert:
- Visual Basic for Application
- Mcrosoft Excel 11.0 Object Library
- OLE Automation
- Microsoft Ofice 11. Object Library
- Mircosoft Visual Basic for Applications Extensibility 5.3
Gruss, Peter
AW: Absturz bei Import von Codes für Module und Tab.
11.12.2008 15:56:05
Codes
Hallo
Der Absturz erfolgt immer im unteren Teil des Code, wenn ich das richtig analisiert habe, dort wo
If Err.Number = 0 Then steht
Da habe ich mal vornedran die Zeile
MsgBox Err.Description
eingefügt. Das hat dann an dieser Stelle zu einem Absturz geführt.
Vielleicht gibt es eine andere Möglichkeit, den Code wieder zu importieren, der im gleichen Ordner abgespeichert ist, wie das Workbook, aus dem der Code gestartet wird?
Nebst den Modulen hat es dort das File DieseArbeitsmappe.cls sowie die pro Tabelle eine *.cls Datei.
Für jede Hilfe bin ich dankbar.
Gruss, Peter
Gruss, Peter
Anzeige
AW: Nachtrag - Lösungsansatz?
11.12.2008 17:35:17
Peter
Guten Abend
Wie bisher beschrieben wird beim Import von Code ein Absturz von Excel ausgelöst. Ich habe nun gepröbelt und festgestellt, dass der Absturz vermieden werden kann, wenn ich den Code bei "DieseArbeitsmappe" auskommentiere.
Anscheinend wird dieser Code, wenn er nicht auskommentiert ist aktiv. Dort habe ich folgende Ereignismakros drin:
Private Sub workbook_activate()
Private Sub Workbook_Deactivate()
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Allerdings ist der erste Befehl beim Code-Kopieren:
Application.EnableEvents = False
Weshalb machen diese Ereignismakros anscheinend trotzdem Probleme - und können die allenfalls vermieden werden?
Gruss, Peter
Anzeige
AW: Nachtrag - Lösungsansatz?
17.12.2008 18:06:44
fcs
Hallo Peter,
ich hab auch noch ein wenig mit deinem Code experimentiert.
Jede Menge Excel-Abstürze, Excel 2003 (Office 2003 Professional), Windows XP.
Zum Schluß hab ich dann mit den Einstellungen unter den Optionen im VBA-Editor experimentiert.
Folgende Einstellung scheint zu funktionieren, wobei ich den Fehler nicht reproduzieren konnte durch zurücksetzen der Optionen.
Userbild
Zusätzlich hatte ich im Register Editor noch die Option "Automatische Syntaxüberprüfung" deaktiviert. Aber keine genaue Ahnung welches jetzt die entscheidende Einstellungsänderung war; möglicherweise ist Kompilieren im Hintergrund die kritische Einstellung. Aber warum dann "nur" bei "DieseArbeitsmappe" und bei mir auch beim Diagrammmodul?.
Die Prozedur hab ich ein wenig modifiziert (ist dann irgendwie übersichtlicher). Ob das am Ende auch die Fehleranfälligkeit mit beseitigt hat kann ich nicht genau sagen.
Gruß
Franz

Option Explicit
'testprozedur
Private FuObjFile As Workbook
Sub aaTestVBA_Austausch()
If MsgBox("VBA-Projekt in Datei  " & ActiveWorkbook.Name _
& "  Tatsächlich durch importierte Version ersetzen?", vbYesNo + vbQuestion, _
"VBA-Module, neue Versionen") = vbYes Then
If ActiveWorkbook.Name = ThisWorkbook.Name Or _
LCase(ActiveWorkbook.Name) = LCase("PERSONL.XLS") Then
MsgBox "VBA-Import darf nicht in der Datei " & ActiveWorkbook.Name & " erfolgen!!!"
Exit Sub
Else
Set FuObjFile = ActiveWorkbook
Call prcImport
End If
End If
End Sub
Public Sub prcImport()
Dim objVBComponents As Object, strFilename As String
Dim strCompQuelleName As String, strCompZielName As String, strCodeText As String
If FuObjFile Is Nothing Then Exit Sub 'überprüfen, ob weniger oder mehr _
als zwei Dateien offen
On Error GoTo Fehler
With Workbooks(FuObjFile.Name).VBProject  'FuObjFile ist ein Objekt
For Each objVBComponents In .VBComponents
Select Case objVBComponents.Type
Case 1, 2, 3
.VBComponents.Remove .VBComponents(objVBComponents.Name)
Case 100
With objVBComponents.CodeModule
.DeleteLines 1, .CountOfLines
End With
End Select
Next
strFilename = Dir$(ThisWorkbook.Path & "\" & "*.*")
Do While strFilename  ""
If UCase$(Right$(strFilename, 4)) = ".BAS" Or _
UCase$(Right$(strFilename, 4)) = ".FRM" Or _
UCase$(Right$(strFilename, 4)) = ".CLS" Then
.VBComponents.Import ThisWorkbook.Path & "\" & strFilename
End If
strFilename = Dir$
Loop
For Each objVBComponents In .VBComponents
strCompQuelleName = objVBComponents.Name
If objVBComponents.Type = 2 Then
If Left$(objVBComponents.Name, 17) = "DieseArbeitsmappe" Or _
Left$(objVBComponents.Name, 7) = "Tabelle" Or _
Left$(objVBComponents.Name, 8) = "Diagramm" Then
strCompZielName = Left$(objVBComponents.Name, Len(objVBComponents.Name) - 1)
strCodeText = objVBComponents.CodeModule.Lines(1, _
objVBComponents.CodeModule.CountOfLines)
.VBComponents(strCompZielName).CodeModule.InsertLines 1, strCodeText
.VBComponents.Remove .VBComponents(strCompQuelleName)
End If
End If
Next
End With
Fehler:
With Err
If .Number  0 Then
Debug.Print objVBComponents.Name
MsgBox "Fehler-Nr. " & .Number & vbLf & .Description
Resume Next
End If
End With
End Sub


Anzeige
AW: Nachtrag - Lösungsansatz?
18.12.2008 16:27:00
Peter
Hallo Franz
Vielen Dank, dass du dich da noch mit meinem Problem auseinandergesetzt hast.
Ich habe nun die Änderungen bei mir auch im gesetzt (auch bei den VBA-Optionen, wie von dir beschrieben).
Interessanterweise ist der Absturz geblieben und meines Erachtens passiert er beim untenstehenden Codestück.
Nun kommt jedoch eine sehr "genaue" Fehlerbezeichnung:
Fehler Nr. -2147024809 - Ungültiger Prozeduraufruf oder ungültiges Argument.
Doch vielleicht weiss nur Bill Gates, was diese spezifische Fehlernummer bedeutet. Immerhin habe ich nach der Zahl gegoogelt und verschiedene Beiträge gefunden, allerdings keinen mit einer schlüssigen Antwort.
- ev wird irgend ein Objekt nicht gefunden oder
- es hat irgendwelche Leerschläge zu viel
Aber daraus konnte ich leider (noch) nichts ableiten.
Gruss, Peter
If Left$(objVBComponents.Name, 17) = "DieseArbeitsmappe" Or _
Left$(objVBComponents.Name, 7) = "Tabelle" Or _
Left$(objVBComponents.Name, 8) = "Diagramm" Then
strCompZielName = Left$(objVBComponents.Name, Len(objVBComponents.Name) - 1)
strCodeText = objVBComponents.CodeModule.Lines(1, _
objVBComponents.CodeModule.CountOfLines)
.VBComponents(strCompZielName).CodeModule.InsertLines 1, strCodeText
.VBComponents.Remove .VBComponents(strCompQuelleName)
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige