Microsoft Excel

Herbers Excel/VBA-Archiv

Korrektes Change-Ereignis

Betrifft: Korrektes Change-Ereignis
von: Björn
Geschrieben am: 20.04.2003 - 11:50:51

Huhu zusammen,

kann mir jemand sagen, wie ich per VBA sauber die Auswahl einer Zelle nach Eingabe in einer anderen auslösen kann.
Ich weiß, daß es etwa so möglich ist:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Row = 48 And Target.Column = 10 Then
ActiveSheet.Cells(48, 18).Select
End If
End Sub

Das scheint mir aber kein ganz sauberer VBA-Code zu sein. Kann mir jemand sagen, weshalb etwa:

Sub Auswählen()
If Target.Address = Range("J48") Then
ActiveSheet.Cells(48, 18).Select
End If
End Sub

nicht funktioniert??? Irgendeine Möglichkeit muß es doch geben, die Celle direkt anzuprechen anstatt über Row = x and Column = y ! - ?

Danke!

Viele Grüße

Björn


  

Re: Korrektes Change-Ereignis
von: Ramses
Geschrieben am: 20.04.2003 - 12:03:15

Hallo Björn,

die erste Variante ist der sauberste VBA-Code :-))

Zu deinem Problem:

Die Rückgabe des "Target" - Objectes existiert nur in in den Klassenmodulen der Tabelle oder des Workbooks.
Deshalb kannst du es in einem normalen Makro nicht verwenden.

Dein Vergleich kann darüber hinaus funktionieren, weil die Rückgabe

Target.Address

als Ergebnis, in deinem Beispiel $J$48 zurückliefert. Der Vergleich müsste also lauten

If Target.Address = "$J$48" Then

Ausserdem kannst du eine Zelle direkt ansprechen:

Range("J48").Select

führt zum gleichen Ergebnis.

Gruss Rainer

  

Re: Korrektes Change-Ereignis
von: Björn
Geschrieben am: 20.04.2003 - 12:15:20

Huhu Ramses,

Hallo Björn,
die erste Variante ist der sauberste VBA-Code :-))

ausnahmsweise mal auf Anhieb getroffen scheinbar :-)

Zu deinem Problem:

Die Rückgabe des "Target" - Objectes existiert nur in in den Klassenmodulen der Tabelle oder des Workbooks.
Deshalb kannst du es in einem normalen Makro nicht verwenden.

Ich habe es in einem wks.

Dein Vergleich kann darüber hinaus funktionieren, weil die Rückgabe

Target.Address

als Ergebnis, in deinem Beispiel $J$48 zurückliefert. Der Vergleich müsste also lauten

If Target.Address = "$J$48" Then

Ja, genau genommen sogar wegen verbundener Zellen: "$J$48:$L$48" :-(

(...)

Wie könnte ich denn nun auf rationelle Weise folgende Wirkung erreichen:

Bei Änderung der Zellen in der Spalte 10, aber nur im Bereich der Zeilen 48 bis 69 gehe jeweils zur Spalte 18 in der gleichen Zeile?

Natürlich könnte man jetzt für jedes Change-Ereignis eine eigene Prämisse definieren. Das ist aber nicht gerade besonders rationell. Spätestens wenn jemand ein Paar 100 Zeilen hätte, wäre es ein Problem. Kommt man da mit Intersect weiter? *grübel*

Vielen Dank!

Viele Grüße

Björn


  

Re: Korrektes Change-Ereignis
von: Ramses
Geschrieben am: 20.04.2003 - 12:47:31

Hallo Björn,

mal so geschüttelt, nicht gerührt ( heisst nicht getestet )

If Target.Column = 10 And Target.Row > 47 Or Target.Row < 70 Then
Cells(target.row,18).Select
End If

Gruss Rainer


  

Re: Korrektes Change-Ereignis
von: Björn
Geschrieben am: 20.04.2003 - 13:03:11

Huhu Ramses,

Klasse :-) Dankeschön! Klappt bestens. Lediglich aus dem Or habe ich für meinen Zweck noch ein And gemacht.

Viele Grüße und noch einen wunderschönen Tag!

Björn

 

Beiträge aus den Excel-Beispielen zum Thema "Korrektes Change-Ereignis"