Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Target-Variable übergeben...

Forumthread: Target-Variable übergeben...

Target-Variable übergeben...
30.01.2009 15:03:10
Richard


Hallo liebe Excel-VBA-Fans,
hab da wieder ein Problem, wo ich nicht wirklich weiterkomme. Einer Prozedur mit dem "Worksheet_Change"-Ereignis, wird soweit ich das vestehe eine Variable Names Target in der ArgListe an die Prozedur übergeben, z.B.: Private Sub Worksheet_Change(ByVal Target As Range).
Target ist also immer die Zelle, an der ich eine Veränderung vornehme.
Jetzt binde ich eine Art Plausibilitätsabfrage in Form einer Select-Case-Anweisung in eine solche Prozedur (siehe Beispiel)


Select Case Len(Target.Value)
Case Is = 15
MsgBox "ZU LANG"
Target.Offset(0, 0).Select
Case 11, 13
MsgBox "OK!"
Call Eigene_Prozedur                      '


Diese "Eigene_Prozedur" enthält ca. 125 Codezeilen. Davon wird 26x die Variable "Target" im Zusammenhang mit den Eigenschaften ".Row", ".Value" und ".Offset" verwendet.
Ich könnte den Code einfach 2x kopieren aber dann würde ich nicht Codezeilen sparend programmieren. Ich könnte auch den Code umprogrammieren um an das Ergebnis zu kommen, ist aber verbunden mit viel Arbeit. Leider schrieb ich meinen Code viel früher, wusste bis dahin noch nicht, dass mir diese Select-Case-Anweisung viel Arbeit ersparen könnte.
Und nun seid ihr gefragt: Es muss doch eine ganz simple Lösung geben, wie ich Target in meine Eigene Prozedur mit übernehmen kann!
Ich hoffe, dass ich mich einigermaßen verständlich ausgedrückt habe und mir jemand helfen kann.
Mit freundlichen Grüßen
Richard E.

Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Target-Variable übergeben...
30.01.2009 15:16:00
Tino
Hallo,
übergib doch Target als Rangeobjekt an Deine Eigene_Prozedur.
Beispiel:

Private Sub Worksheet_Change(ByVal Target As Range)
Call Eigene_Prozedur(Target)
End Sub
Sub Eigene_Prozedur(meTarget As Range)
MsgBox meTarget.Address
End Sub


Gruß Tino

Anzeige
AW: Target-Variable übergeben...
30.01.2009 15:27:00
Richard
Genau das habe ich ich gesucht...
Da arbeitet man schon so lange mit VBA und kriegt solche banalen Sachen immer noch nicht hin. Höchstpeinlich!
Aber dir immerhin doch vielen vielen Dank!
Gruß
Richard Esau
;
Anzeige

Infobox / Tutorial

Target-Variable in Excel VBA übergeben


Schritt-für-Schritt-Anleitung

  1. Öffne den VBA-Editor: Drücke ALT + F11, um den VBA-Editor in Excel zu öffnen.

  2. Wähle das entsprechende Arbeitsblatt: Im Projekt-Explorer rechts, wähle das Arbeitsblatt, auf dem du die Worksheet_Change-Ereignisprozedur verwenden möchtest.

  3. Füge die Worksheet_Change-Prozedur hinzu: Schreibe den folgenden Code in das Codefenster:

    Private Sub Worksheet_Change(ByVal Target As Range)
       Call Eigene_Prozedur(Target)
    End Sub
  4. Erstelle die eigene Prozedur: Definiere die Prozedur, in die du die Target-Variable übergeben möchtest:

    Sub Eigene_Prozedur(meTarget As Range)
       MsgBox meTarget.Address
    End Sub
  5. Testen: Ändere eine Zelle im Arbeitsblatt, um zu sehen, ob die Adresse der Zelle in einer MessageBox angezeigt wird.


Häufige Fehler und Lösungen

  • Fehler: „Typkonflikt: Ungültiger Typ für 'Target'“
    Lösung: Stelle sicher, dass du die Target-Variable korrekt als Range übergibst.

  • Fehler: Sub or Function not defined
    Lösung: Überprüfe, ob die Prozedur Eigene_Prozedur im gleichen Modul oder in einem erreichbaren Modul definiert ist.


Alternative Methoden

Eine alternative Möglichkeit, die Target-Variable zu verwenden, ist die Nutzung von Application.Caller, um den Namen der Zelle zu ermitteln, die die Änderung ausgelöst hat. Dies kann in speziellen Fällen nützlich sein, wo die direkte Übergabe nicht gewünscht ist.

Sub Eigene_Prozedur()
    MsgBox Application.Caller
End Sub

Praktische Beispiele

Hier ist ein praktisches Beispiel, das die Target-Variable verwendet, um die Länge des Wertes in der Zelle zu überprüfen:

Private Sub Worksheet_Change(ByVal Target As Range)
    Select Case Len(Target.Value)
        Case Is = 15
            MsgBox "ZU LANG"
            Target.Offset(0, 0).Select
        Case 11, 13
            MsgBox "OK!"
            Call Eigene_Prozedur(Target)
    End Select
End Sub

In diesem Beispiel wird die Target-Variable verwendet, um verschiedene Bedingungen zu überprüfen und entsprechend zu reagieren.


Tipps für Profis

  • Verwende With-Anweisungen: Um den Code lesbarer zu gestalten, kannst du With-Anweisungen verwenden, wenn du mehrmals auf die Target-Variable zugreifen musst.

    With Target
       If Len(.Value) > 10 Then MsgBox "Wert ist zu lang"
    End With
  • Vermeide unnötige Auswahl: Statt Select zu verwenden, arbeite direkt mit der Target-Variable, um die Effizienz deines Codes zu erhöhen.


FAQ: Häufige Fragen

1. Wie kann ich mehrere Zellen in einer Target-Änderung bearbeiten?
Du kannst einfach überprüfen, ob Target.Count > 1 ist, um festzustellen, ob mehrere Zellen geändert wurden, und dann eine Schleife verwenden, um jede Zelle einzeln zu bearbeiten.

2. Was ist der Unterschied zwischen Target und meTarget?
Target ist die standardmäßige Variable, die in der Worksheet_Change-Prozedur bereitgestellt wird, während meTarget eine benutzerdefinierte Variable ist, die du übergibst, um den Code flexibler zu gestalten.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige