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

Laufzeitfehler 5 beim Aufsplitten des TargetValues

Laufzeitfehler 5 beim Aufsplitten des TargetValues
03.04.2008 19:17:00
Andreas
Hallo Herber Fans,
ich habe mit Hilfe des Forums bisher leider erfolglos versucht, in einem ziemlich übersichtlichen Code den Laufzeitfehler 5 „Ungültiger Prozeduraufruf“ abzufangen.
In einem Worksheet löst das Makro beim Change Ereignis aus und soll im Target, welches durch Gültigkeitsdropdown gewählt wurde, seinerseits dann den gewählten Wert aufsplitten. Das passiert zwar, aber immer mit Laufzeitfehler. Ich hatte diesen Fehler noch nie und kenne deshalb keinen möglichen Grund für dessen Erscheinen.
Wie lautet Euer Tip, um diesen Fehler in dem ja doch simplen Makro zu umgehen?
https://www.herber.de/bbs/user/51251.xls
Vielen Dank und Grüße, Andreas

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Laufzeitfehler 5 beim Aufsplitten des TargetValues
03.04.2008 19:48:09
stormy_weathers
Andreas,
mit deinem Proggy änderst du den Inhalt der Zelle ab. Dadurch wird (nach dem Ändern) das Programm wieder aktiv und versucht aus einem 1stelligen Wert einen Teil auszulesen.
Das müsstest du mit einer Längenabfrage oder so abfangen. Wenn die Länge 1 ist dann exit sub oder so...
Gruß
stormy

AW: Laufzeitfehler 5 beim Aufsplitten des TargetVa
03.04.2008 19:56:00
Erich
Hallo Andreas,
da gab es mehrere Stellen zum Reparieren:

Option Explicit
Dim Fundstelle As Integer, ID As Long
Private Sub Worksheet_Change(ByVal Target As Range)
Fundstelle = InStr(1, Target, "_")
MsgBox "Fundstelle: " & Fundstelle
If Fundstelle > 0 Then
ID = Left(Target, Fundstelle - 1)
MsgBox "ID: " & ID
Application.EnableEvents = False
Target.Offset(0, 1) = Right(Target, Len(Target) - Fundstelle)
Target.Value = ID
Application.EnableEvents = True
End If
End Sub

Darauf, dass sich die Prozedur selbst aufruft, weil sie im Tabellenblatt ändert,
hat dich stormy ja schon aufmerkasm gemacht.
Du kannst das auch durch "Application.EnableEvents = False" verhindern.
Dein anderes Problem war, dass du zuerst "Target.Value = ID" gesetzt hast (ist einstellig!),
danach aber die rechten Stellen davon in die Nachbarzelle schreiben wolltest.
Da habe ich die Reihenfolge umgekehrt - Right() arbeitet dann mit dem "alten" Target.Value.
Wenn man es ordentlich haben will, müsste man noch prüfen, ob Fundstelle kleiner als Len(Target) ist,
sonst kann Right() schiefgehen.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: Laufzeitfehler 5 beim Aufsplitten des TargetVa
03.04.2008 20:18:00
Andreas
Hallo Erich, hallo Stormy,
Das sind ja gleich mehrere Groschen die gerade gefallen sind… Das sich die Prozedur selbst aufruft habe ich fast schon vermutet. Während der Post im Forum war habe ich das über eine IF Abfrage auch umgehen können, aber die größere Erkenntnis überhaupt ist, daß ich nun – durch Deine Anmerkung, Erich – zum ersten Mal verstanden habe, was „Application.EnableEvents“ in Makros bewirkt. Ich hatte es bisher im großen Stil im Einsatz in der irrigen Annahmen, es würde die Laufzeit von Makros verbessern, weil ich das irgendwo einmal flüchtig in einem Thread sah. Aber was ich dort sah, war vermutlich „Application.ScreenUpdating = False/ True“. Also werde ich das in meinen Codes auch noch beheben. Und sie werden dadurch hoffentlich schneller.
Deinen Hinweis mit der Targetlänge habe ich aufgenommen und umgesetzt. Ich poste ihn hier noch einmal, um der Funktion des Forums als Wissenspool gerecht zu werden.
Option Explicit
Dim Fundstelle As Integer, ID, Targetlaenge As Long

Private Sub Worksheet_Change(ByVal Target As Range)
Targetlaenge = Len(Target)
MsgBox Targetlaenge
Fundstelle = InStr(1, Target, "_")
MsgBox "Fundstelle: " & Fundstelle
If Fundstelle > 0 And Fundstelle 


Vielen Dank Euch beiden, für diese Anstöße zu grundlegendem Erkenntnisgewinn in Sachen VBA.
Habt noch einen schönen Abend.
Grüße, Andreas

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige