Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Frage zu Worksheet_Change | Herbers Excel-Forum


Betrifft: Frage zu Worksheet_Change von: Peter
Geschrieben am: 16.11.2009 10:25:13

Guten Tag

Bei nachstehendem Worksheet_Chance Ereignis erhalte ich eine Fehlermeldung "Typen unverträglich"
(auf Zeile If Target = Range("rID") Then)
wenn ich zwei oder mehrere kopierte Zellen in der Tabelle, in dem der Code hinterlegt ist, einfügen will (und das ausserhalb des Ranges "rID" (bezieht sich aktuell auf die Zelle C3).
In C3 ist ein Wert (und nicht eine Formel) eingetragen; wenn ich jetzt in C104 und C105 etwas einfüge, sollte dieser Ereignisprotokoll nichts machen.

Wo mache ich einen Überlegungsfehler?

Gruss, Peter

Private Sub Worksheet_Change(ByVal Target As Range)
  If Target = Range("rID") Then
    Me.Cells.AutoFilter field:=1
    Me.Cells.AutoFilter field:=1, Criteria1:="="
  Else
  End If
  Call  .....
  Call  ....

End Sub

  

Betrifft: AW: Frage zu Worksheet_Change von: JogyB
Geschrieben am: 16.11.2009 11:21:13

Hi.

Exakte Übereinstimmung der Bereiche:
If Target.Address = Range("rID").Address Then ...

Bereiche müssen sich überschneiden:
If Not Intersect(Target, Range("rID")) Is Nothing Then ...

Gruss, Jogy


  

Betrifft: AW: Frage zu Worksheet_Change von: IngGi
Geschrieben am: 16.11.2009 11:21:50

Hallo Peter,

mit

If Target = Range("rID") Then
prüfst du nicht, ob Target und Range("rID") dieselben Zellen sind, sondern ob der Inhalt der beiden Zellen gleich ist, das ist dir doch klar? Diese Prüfung geht schief, sobald entweder Target oder Range("rID") nicht nur aus einer, sondern aus mehreren Zellen besteht. In diesem Fall musst du die Zellen einzeln in einer Schleife prüfen.

Gruß Ingolf


  

Betrifft: AW: Frage zu Worksheet_Change von: Peter
Geschrieben am: 16.11.2009 11:56:33

Hallo Ingolf
Irgendwie habe ich die Funktion mit "Target" noch nicht begriffen.

Folgendes ist meine Zielvorstellung:
Wenn in Range("rID") eine Eingabe erfolgt, sollen die beiden Autofiltercodes
Me.Cells.AutoFilter field:=1
Me.Cells.AutoFilter field:=1, Criteria1:="="
durchlaufen werden.
Zurzeit ist Range("rID") die Zelle C3. Der Code sollte jedoch auch laufen, falls der benannte Bereich später einer anderen Zelle zugeordnet ist.

Wenn ich in der Tabelle irgend eine andere Änderung vornehme, solle nichts passieren.

Was muss ich ändern?

Gruss, Peter


  

Betrifft: AW: Frage zu Worksheet_Change von: fcs
Geschrieben am: 16.11.2009 12:19:36

Hallo Peter,

Target bezieht sich in Tabellenblättern immer auf eine Zelle bzw. einen Zellbereich

Deshalb muss eine Überprüfung von Target meistens eine Prüfung der Eigenschaften wie Adresse, Zeile, Spalte oder Überschneidung mit einem Bereich (Intersect) beinhalten. Die Prüfung des Target-Wertes erfolgt dann meist in einem 2. Schritt.

Deshalb muss du die If-Bedingung anders gestalten, um später den Namen rID einer beliebigen Zelle zuweisen zu können bzw. die Zelle auf dem Blatt zu verschieben.

Gruß
Franz

Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Address = Range("rID").Address Then
    MsgBox "Zelle mit Name ""rID"" wurde geändert."
  End If
End Sub



  

Betrifft: AW: Frage zu Worksheet_Change von: Peter
Geschrieben am: 16.11.2009 13:36:14

Hallo Franz
Vielen Dank für die Erläuterung!
So klappts.
Gruss, Peter