Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
900to904
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
900to904
900to904
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Automatisierungsfehler Codename VBE

Automatisierungsfehler Codename VBE
29.08.2007 13:05:00
Knut
Hallo !
Ich bin am verzweifeln. Problem : mein Programm laeuft fehlerfrei mit geoeffnetem VBE, aber nicht ohne VBE.
Habe ich den VBE nicht offen bei Programmstart, stuerzt Excel ab (automatisierungsfehler...). Seltsamerweise stuerzt es an der gleichen Stelle auch ab, wenn ich vorher den VBE im Laufe des Makros oeffne.
Das ganze geschieht am Ende meines Progs. Dann, wenn verschiedenen worksheets noch Ereignisprozeduren angefuegt werden sollen.
Hier der Code:
' Am Schluss werden nun noch die Ereignisprozeduren in die Erstellten Diagrammblaetter eingetragen
Dim boolv As Boolean
boolv = False
' den VBE oeffne ich, um an die Codenamen der im Laufe des Makros erstellten Blaetter zu kommen
With Application.VBE.MainWindow
If .Visible = False Then
boolv = True
.SetFocus
.Visible = True
End If
End With
For idia = 1 To UBound(dia)
If dia(idia) = True Then
Select Case idia
Case Is = 1
ereignis "B1_RW"
Case Is = 2
ereignis "B2_RW"
End Select
End If
Next idia
With Application.VBE.MainWindow
If boolv = True Then
.SetFocus
.Visible = False
End If
End With
End Sub
~f~
' in diesem Teil erfolgt der Absturz (beim zweiten durchlauf - also "B2_RW") Die msgBox wird noch angezeigt, aber dann will Excel schon Microsoft verstaendigen - ohne dass ich noch gelegenheit bekomme die msgbox wegzuklicken.
~f~
Option Explicit
Sub ereignis(ByRef blattname1 As String)
Dim ii As Long, zielname As String
' nur zum debuggen
If blattname1 = "B2_RW" Then
MsgBox "Schoenen Gruß"
End If
' Worksheets(blattname1).Activate
zielname = Worksheets(blattname1).CodeName
Select Case blattname1
Case Is = "B1_RW"
With ActiveWorkbook.VBProject.VBComponents(zielname).CodeModule
ii = .CreateEventProc("SelectionChange", "worksheet") + 1
.InsertLines ii, "dim rngg as range"
.InsertLines ii + 1, "i = 0"
.InsertLines ii + 2, "For Each rngg In Target: i = i + 1: Next rngg"
.InsertLines ii + 3, "If i <> 1 Then"
.InsertLines ii + 4, "Exit Sub"
.InsertLines ii + 5, "End If"
.InsertLines ii + 6, "Select Case Target.Column"
.InsertLines ii + 7, "Case 4 To 10, 15 To 21"
.InsertLines ii + 8, "If Target.Row > 4 And Target.Row < 12 Then"
.InsertLines ii + 9, "If Target.value > 0 Then"
.InsertLines ii + 10, "zeiley = Target.row"
.InsertLines ii + 11, "spaltex = Target.column"
.InsertLines ii + 12, "anzahlmonate =" & anzahlmonate
.InsertLines ii + 13, "Mliste.show"
.InsertLines ii + 14, "End If"
.InsertLines ii + 15, "End If"
.InsertLines ii + 16, "End Select"
End With
Case Is = "B2_RW"
With ActiveWorkbook.VBProject.VBComponents(zielname).CodeModule
ii = .CreateEventProc("SelectionChange", "worksheet") + 1
.InsertLines ii, "dim rngg as range"
.InsertLines ii + 1, "i = 0"
.InsertLines ii + 2, "For Each rngg In Target: i = i + 1: Next rngg"
.InsertLines ii + 3, "If i <> 1 Then"
.InsertLines ii + 4, "Exit Sub"
.InsertLines ii + 5, "End If"
.InsertLines ii + 6, "Select Case Target.Column"
.InsertLines ii + 7, "Case 5 To 13"
.InsertLines ii + 8, "If Target.Row > 6 And Target.Row < 14 Then"
.InsertLines ii + 9, "If Target.value > 0 Then"
.InsertLines ii + 10, "zeiley = Target.row"
.InsertLines ii + 11, "spaltex = Target.column"
.InsertLines ii + 12, "anzahlmonate =" & anzahlmonate
.InsertLines ii + 13, "Mliste.show"
.InsertLines ii + 14, "End If"
.InsertLines ii + 15, "End If"
.InsertLines ii + 16, "End Select"
End With
Case Else
End Select
Kann mir jemand helfen ? Vielleicht muss ich eine Function verwenden ? Ob ich mittels byref oder byval uebergebe aendert jedenfalls nichts.
Schoene Grueße,
Knut

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Automatisierungsfehler Codename VBE
29.08.2007 14:16:00
Herby
Hallo Knut,
habs mal nachgestellt. Bei dieser Zeile bleibt er hängen:
.InsertLines ii + 12, "anzahlmonate =" & anzahlmonate
nachdem ich anzahlmonate dimensioniert (integer) und einen
Wert zugewiesen habe, klappt es, dh. er hat die Msgbox sowie
diese Ereignisprocedure erstellt:

Private Sub worksheet_SelectionChange(ByVal Target As Range)
Dim rngg As Range
i = 0
For Each rngg In Target: i = i + 1: Next rngg
If i  1 Then
Exit Sub
End If
Select Case Target.Column
Case 5 To 13
If Target.Row > 6 And Target.Row  0 Then
zeiley = Target.Row
spaltex = Target.Column
anzahlmonate = 5
Mliste.Show
End If
End If
End Select
End Sub


viele Grüße
Herby

Anzeige
AW: Automatisierungsfehler Codename VBE
29.08.2007 14:39:00
Knut
Großmeister !!! Vielen Dank !!
Ich sehe immer noch keine Moeglichkeit es selber zu debuggen, da es bei mir ja immer abstuerzt - wie hast du das geschafft ?
Seltsam ist, dass anzahlmonate public integer ist, im ersten Schleifendurchlauf noch einen Wert hat und nur an dieser Stelle im ganzen Programm auftaucht (außer bei der Initialisierung ganz am Anfang.
Also ich habe es jetzt vorerst so geloest - bis mir was besseres einfaellt, oder ich verstehe was in VBE vorgeht:
Ich habe die Initialisierung der Variabla anzahlmonate in die schon gezeigte Schleife gelegt - was das Prog nicht gerade beschleunigt - Hauptsache es geht jetzt erstmal.
For idia = 1 To UBound(dia)
If dia(idia) = True Then
' anzahlmonate bestimmen
Set rngg = Worksheets("Datenmatrix").Range("a1:ac7").Find(what:="Monat*", LookIn:=xlValues, LookAt:=xlWhole, _
SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
If rngg Is Nothing Then
MsgBox "In Datenmatrix fehlt die Spalte mit ""Monat"""
Exit Sub
End If
i = 1
Do
i = i + 1
Set rngf = rngg.Offset(i, 0)
Loop Until rngf.Offset(1, 0).Value = rngf.Offset(i, 0).Value
anzahlmonate = i - 1
Select Case idia
Case Is = 1
ereignis "B1_RW_Verbraeuche"
Case Is = 2
ereignis "B2_RW_WBZ"
End Select
End If
Next idia
Viele Grueße,
Knut

Anzeige
AW: Automatisierungsfehler Codename VBE
29.08.2007 15:45:00
Knut
jetzt laeufts wieder nicht - geht nur wenn ich anzahlmonate immer eine feste zahl bei jedem schleifendurchlauf zuweise - also z.B.: anzahlmonate=12
egal wie ichs mit public und local variablen versuche es funktioniert nicht.

AW: Automatisierungsfehler Codename VBE
29.08.2007 17:04:11
Herby
Hallo Knut,
ich habs nochmal probiert und es funktioniert ohne Probleme.
So sieht die Übergabe der Variablen aus:
Select Case idia
Case Is = 1
ereignis "B1_RW", anzahlmonate
Case Is = 2
ereignis "B2_RW", anzahlmonate
End Select
End If
Next idia
....
und so die ereignisprocedure:

Sub ereignis(ByRef blattname1 As String, ByRef anzahlmonate As Integer)
Dim ii As Long, zielname As String
' nur zum debuggen
MsgBox anzahlmonate
If blattname1 = "B2_RW" Then
MsgBox "Schoenen Gruß"
End If
' Worksheets(blattname1).Activate
zielname = Worksheets(blattname1).CodeName
Select Case blattname1
Case Is = "B1_RW"
With ActiveWorkbook.VBProject.VBComponents(zielname).CodeModule
ii = .CreateEventProc("SelectionChange", "worksheet") + 1
.InsertLines ii, "dim rngg as range"
.InsertLines ii + 1, "i = 0"
.InsertLines ii + 2, "For Each rngg In Target: i = i + 1: Next rngg"
.InsertLines ii + 3, "If i  1 Then"
.InsertLines ii + 4, "Exit Sub"
.InsertLines ii + 5, "End If"
.InsertLines ii + 6, "Select Case Target.Column"
.InsertLines ii + 7, "Case 4 To 10, 15 To 21"
.InsertLines ii + 8, "If Target.Row > 4 And Target.Row  0 Then"
.InsertLines ii + 10, "zeiley = Target.row"
.InsertLines ii + 11, "spaltex = Target.column"
.InsertLines ii + 12, "anzahlmonate =" & anzahlmonate
.InsertLines ii + 13, "Mliste.show"
.InsertLines ii + 14, "End If"
.InsertLines ii + 15, "End If"
.InsertLines ii + 16, "End Select"
End With
Case Is = "B2_RW"
With ActiveWorkbook.VBProject.VBComponents(zielname).CodeModule
ii = .CreateEventProc("SelectionChange", "worksheet") + 1
.InsertLines ii, "dim rngg as range"
.InsertLines ii + 1, "i = 0"
.InsertLines ii + 2, "For Each rngg In Target: i = i + 1: Next rngg"
.InsertLines ii + 3, "If i  1 Then"
.InsertLines ii + 4, "Exit Sub"
.InsertLines ii + 5, "End If"
.InsertLines ii + 6, "Select Case Target.Column"
.InsertLines ii + 7, "Case 5 To 13"
.InsertLines ii + 8, "If Target.Row > 6 And Target.Row  0 Then"
.InsertLines ii + 10, "zeiley = Target.row"
.InsertLines ii + 11, "spaltex = Target.column"
.InsertLines ii + 12, "anzahlmonate =" & anzahlmonate
.InsertLines ii + 13, "Mliste.show"
.InsertLines ii + 14, "End If"
.InsertLines ii + 15, "End If"
.InsertLines ii + 16, "End Select"
End With
Case Else
End Select
End Sub


wenns bei dir nicht funktionieren sollte, kannst du den wert in einer Tabelle zwischenspeichern und
über die Ereignisprocedure wieder auslesen ?! (Notlösung)
Viele Grüße
Herby

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige