Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1392to1396
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

Case Select endet nicht bzw. endet im Laufzeitfehl

Case Select endet nicht bzw. endet im Laufzeitfehl
23.11.2014 00:59:32
Robert
Hallo zusammen,
ich habe in der Zelle Q56 ein Dropdown erstellt und daran einen Case Select gekoppelt. Wenn Case 1 selektiert wird sollen die Zellen "L58:N59" und "L59:N59" selektiert, gemerged und jeweils mit einem Text versehen werden. Es gehschieht zwar was ich mir vorstelle nur hört das Ganze nicht auf sich zu wiederholen und endet in einem Laufzeitfehler. Durch den Debugger sehe ich das die Zellen wie gewünscht selektiert und zusammengefügt werden sowie die Texte hinzugefügt werden, nur springt er dann vom End Sub wieder zum Ende Select und wieder zum End Sub dann zum Private Sub und dann zum ersten Range und durchläuft diesen immer wieder. Hier meine Frage: Warum?
Ich habe derzeit wenig Ahnung von VBA und wäre nett wenn mir einer eben helfen könnte da ich meines Wissens nach keine Schleife oder ähnliches eingebaut habe :o(

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Select Case Range("Q56")
Case "1"
Range("L58:N58").Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With
Selection.Merge
ActiveCell.FormulaR1C1 = "Test 1"
Range("L59:N59").Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With
Selection.Merge
ActiveCell.FormulaR1C1 = "Test 2"
End Select
End Sub

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

Betreff
Datum
Anwender
Anzeige
AW: Case Select endet nicht bzw. endet im Laufzeitfehl
23.11.2014 07:25:07
fcs
Hallo Robert,
du musst im Makro die Ereignismakros vorübergehend deaktivieren, damit durch das Eintragen des Formeltextes das Ereignismakro nicht erneut gestartet wird und so in eine Endlosschleife gerät.
Zusätzlich kann man das Makro etwas kompakter gestalten und auf die Zellselektion verzichten.
Gruß
Franz
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Select Case Range("Q56")
Case "1"
Application.EnableEvents = False
With Range("L58:N58")
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.Merge
.Range("A1").FormulaR1C1 = "Test 1"
End With
With Range("L59:N59")
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.Merge
.Range("A1").FormulaR1C1 = "Test 2"
End With
Application.EnableEvents = True
End Select
End Sub

Anzeige
AW: Case Select endet nicht bzw. endet im Laufzeitfehl
23.11.2014 07:28:21
Crazy
Hallo Robert
so wie dein Code geschrieben ist läuft es selbstverständlich in eine Endlosschleife
weil das Sheetchange bei jeder Änderung im Tabellenblatt reagiert
in meinem Test habe ich die Änderung auf Zelle Q56 beschränkt
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Target.Address = "$Q$56" Then
Select Case Range("Q56")
Case "1"
Range("L58:N58").Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With
Selection.Merge
ActiveCell.FormulaR1C1 = "Test 1"
Range("L59:N59").Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With
Selection.Merge
ActiveCell.FormulaR1C1 = "Test 2"
End Select
End If
End Sub

MfG Tom

Anzeige
AW: Case Select endet nicht bzw. endet im Laufzeitfehl
23.11.2014 07:38:18
Tino
Hallo,
weil sich der Code durchs schreiben der Formel selbst immer wieder aufruft.
In Target sind die geänderten Zellen enthalten, also müsstest Du dies auch abfragen.
Zudem mit Application.EnableEvents = False/True die Events abstellen,
damit der Code nicht erneut aufgerufen wird.
Mit Select muss man auch so gut wie nie arbeiten,
macht den Code langsam und das gehüpfe in der Tabelle ist auch nicht schön.
Der Code steht in DieserArbeitsmappe und da wird er auf jeder Tabelle aufgerufen.
Wenn dies nicht gewollt ist, gibt es auf der Tabelle auch ein Worksheet_Change.
z.Bsp. so.
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Intersect(Range("Q56"), Target) Is Nothing Then Exit Sub
Application.EnableEvents = False
Select Case Range("Q56")
Case "1"
With Range("L58:N58")
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.Merge
.Cells(1, 1).FormulaR1C1 = "Test 1"
End With
With Range("L59:N59")
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.Merge
.Cells(1, 1).FormulaR1C1 = "Test 2"
End With
End Select
Application.EnableEvents = True
End Sub
Gruß Tino

Anzeige
Fazit aller Verbesserungsversuche
23.11.2014 13:09:57
Luc:-?
Mahlzeit, Leute!
1. Die PrimärVerbesserungen sind im Prinzip Ok.
2. Adressen und andere Werte, die angepasst wdn müssen oder sich ändern können, legt man zum Zwecke leichterer Aktualisierbarkeit als Konstanten oder noch besser über Namen (definierte Bereichsnamen oder Konstanten) fest.
3. Warum wurde der Eintrag eines Trivial-Textes als (Z1S1-)Fml belassen? Das geht zwar, ist aber Quatsch, wenn es sich dabei nicht um eine Fml (in US-Original-Z1S1-Notation) handelt! Da der FrageSteller nur über bescheidene VBA-Kenntnisse verfügt, wird er so doch versucht sein, diese Schreibung (mit Makro-Recorder-Bezug) immer zu verwenden.
Gruß + schöSo, Luc :-?

Anzeige
zu 3. "Test" wird wohl nicht stehen bleiben...
23.11.2014 14:39:11
Tino
Hallo,
aber durch was könnte es ersetzt werden?
Vieleicht eine Formel oder auch ein anderer Text der mit dem Rekorder aufgezeichnet wird.
Der Rekorder zeichnet nach meinem Wissensstand im Z1S1 (R1C1) Bezug auf und
damit ist man mit FormulaR1C1 auf der sicheren Seite egal was rein kommt.
Gruß Tino

Das wdn wir wohl NIE erfahren! :-| Gruß owT
24.11.2014 17:52:46
Luc:-?
:-?

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige