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

Worksheet_Change / Komme nicht weiter.....

Worksheet_Change / Komme nicht weiter.....
04.12.2004 16:19:04
Sonnenpeter
Hallo,
ich habe nach möglichkeiten gesucht bei einer Eingabe in die Zelle D1 ein Mahro auszulössen und bei einer Eintragung in Spalte F eine Formel in Spalte G einzutragen. Mir wurde mit folgendem Code geholfen.

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [D1,F:F]) Is Nothing Then
If Target.Column = 6 Then
Target.Offset(0, 1).Formula = "meineFormel"
Else
meinMakro
End If
End If
End Sub

Als erster Ansatz sehr gut der Code funktioniert einwandfrei.
Jedoch für meine Zwecke nur bedingt.
Als erstes habe ich auf das D1 Makro verzichtet und den Code wie folgt verändert

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [F:F]) Is Nothing Then
If Target.Column = 6 And Target > 0 Then
Target.Offset(0, 1).Formula = "meineFormel"
End If
If Target.Column = 6 And Target = "" Then
Target.Offset(0, 1).Formula = ""
End If
End If
End Sub

Wenn ich nun mehr als eine Zelle in Spalte F markiere und den Inhalt lösche kommt die Fehlermeldung Laufzeitfehler 13.....
und die Zellen in Spalte G behalen "meineFormel" sollten dann jedoch auch auf "" gesetzt werden.
Hm? hoffe ich habe mein Problem gut genug beschrieben.
Vieleicht könnt Ihr mir helfen? Wäre toll wenn ich auch auf das D1 Makro nicht verzichten müsste.
Grüß / Sonnenpeter
PS: VBA GUT ist nicht ganz zutreffend.

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Worksheet_Change / Komme nicht weiter.....
Klaus
Hallo Sonnenpeter,
hier etwas kürzer und übersichtlicher, dies müßte deinen Vorstellungen entsprechen:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim zelle
If Target.Address = "$D$1" Then
MsgBox "Mein Makro"
End If
If Target.Column = 6 Then
For Each zelle In Selection
If zelle = "" Then
zelle.Offset(0, 1).Formula = ""
Else
zelle.Offset(0, 1).Formula = "meine Formel"
End If
Next
End If
End Sub

Deine Lösung funktioniert nur mit einer Zelle. Da du aber beim Löschen/Eingeben mehrere Zellen auswählen willst, hier eine Lösung mit einer For..Each - Schleife, die deine Bedingungen für alle Zellen, die du ausgewählt hast, ausführt.
Gruß Klaus
Anzeige
Danke Klaus / musste jedoch umschreiben
04.12.2004 17:33:17
Sonnenpeter
Danke Klaus,
Ich habe jedoch folgende Ändrungen vorgenommen

Private Sub Worksheet_Change(ByVal Target As Range)
Dim zelle
On Error GoTo ErrorHandler
If Target.Address = "$D$1" Then
MsgBox "Mein Makro"
End If
If Target.Column = 6 Then
For Each zelle In Selection
If zelle = "" Then
zelle.Offset(0, 1).Formula = ""
Else
zelle.Offset(0, 1).Formula = "meine Formel"
End If
Next
End If
If Target.Column = 6 And Target > 0 Then
Target.Offset(0, 1).Formula = "meineFormel"
End If
If Target.Column = 6 And Target = "" Then
Target.Offset(0, 1).Formula = ""
End If
ErrorHandler: Exit Sub
End Sub

Ist das OK so aus Deiner Sicht?
Gruß / Sonnenpeter
Anzeige
AW: Danke Klaus / musste jedoch umschreiben
Klaus
Hallo Sonnenpeter,
du hast recht, mit einer einzelnen Zelle funktioniert meine Lösung gar nicht. Ich hatte zwar zuerst den Target - Code mit drin, hab aber dann gedacht, es geht auch ohne :-))).
Hab dann vergessen, noch mal zu testen.
Hier also noch mal der Code, aber zusätzlich mit der Behandlung einzelner Zellen, ist im Prinzip so, wie du schon eingefügt hast, nur halt ein wenig kürzer:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim zelle
If Target.Address = "$D$1" Then
MsgBox "Mein Makro"
End If
If Target.Column = 6 Then
If Selection.Count = 1 Then
' Wenn nur eine Zelle ( = 1) ausgewählt ist, dann...
If Target > 0 Then
Target.Offset(0, 1).Formula = "meine Formel"
Else
Target.Offset(0, 1).Formula = ""
End If
Else
' Wenn mehrere Zellen ausgewählt sind, dann...
For Each zelle In Selection
If zelle > 0 Then
zelle.Offset(0, 1).Formula = "meine Formel"
Else
zelle.Offset(0, 1).Formula = ""
End If
Next
End If
End If
End Sub

Gruß Klaus
Anzeige
Danke Klaus
04.12.2004 18:43:32
Sonnenpeter
Danke Klaus,
funktioniert jetzt ohne Fehlermeldungen etc.
Du hast mir sehr geholfen!!!
Gruß Sonnenpeter

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige