Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1124to1128
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
Inhaltsverzeichnis

worksheet change 2 Subs zusammenführen

worksheet change 2 Subs zusammenführen
Jan
Liebe Excelianer,
ich habe hier diesen hübschen Code in zwei Subs, den ich wohl in eine zusammenfügen muss, da die Worksheet_change funktion scheinbar nur einmal verwendet werden kann. Eigentlich müsste ich die Funktion viermal anwenden, da ich vier Spalten "behandeln" möchte. Alle meine Versuche und Basteleien waren bisher von Misserfolg gekrönt - Kann mir jemand einen Tipp hinsichtlich Deklaration und Umsetzung geben?
Zu Erläuterung: Die Funktion schreibt den Wert aus Spalte x in Spalte y, wenn Eintrag x erfolgt. Falls x wieder gelöscht wird, wird wieder eine Formel eingesetzt.
Besten Gruß,
Jan

Private Sub Worksheet_Change1(ByVal Target As Range)
If Target.Column  13 Then Exit Sub
If Cells(Target.Row, 13) > 0 Then
Cells(Target.Row, 11) = Target
End If
If Cells(Target.Row, 13) = 0 Then
Cells(Target.Row, 11).FormulaR1C1 = "=RC[-4] * RC[-5]"
End If
End Sub
Private Sub Worksheet_Change2(ByVal Target As Range)
If Target.Column  24 Then Exit Sub
If Cells(Target.Row, 22) > 0 Then
Cells(Target.Row, 22) = Target
End If
If Cells(Target.Row, 24) = 0 Then
Cells(Target.Row, 22).FormulaR1C1 = "=RC[-4] * RC[-5]"
End If
End Sub

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: worksheet change 2 Subs zusammenführen
16.12.2009 14:27:04
Jens
Hallo Jan
ungetestet:
Private Sub Worksheet_Change1(ByVal Target As Range)
Select Case Target.Column
Case Is = 13
If Cells(Target.Row, 13) > 0 Then
Cells(Target.Row, 11) = Target
End If
If Cells(Target.Row, 13) = 0 Then
Cells(Target.Row, 11).FormulaR1C1 = "=RC[-4] * RC[-5]"
End If
Case Is = 24
If Cells(Target.Row, 22) > 0 Then
Cells(Target.Row, 22) = Target
End If
If Cells(Target.Row, 24) = 0 Then
Cells(Target.Row, 22).FormulaR1C1 = "=RC[-4] * RC[-5]"
End If
Case Else
Exit Sub
End Select
End Sub
Gruß Jens
PS: Die Case-Anweisung kannst Du beliebig erweitern.
Anzeige
Falsche syntax
16.12.2009 15:13:28
F1
Private Sub Worksheet_Change1(ByVal Target As Range)
gibt es so nicht!
Er hat auch den anderen Fehler mit übernommen...
16.12.2009 15:21:15
Luc:-?
...- wäre mir auch beinahe passiert... ;-)
Gruß Luc :-?
Stimmt natürlich...
16.12.2009 15:43:15
Jens
Hi
Hab ich glatt übersehen. Muss natürlich
Private Sub Worksheet_Change(ByVal Target As Range)
heißen (ohne die 1).
Danke für den Hinweis.
Gruß Jens
Da es sich hier quasi um analoge Prozz...
16.12.2009 14:51:36
Luc:-?
...handelt, Jan,
lassen die sich leicht wie folgt zusammenführen (abgesehen mal davon, dass ich das eigentl Pgm in eine „normale“ Proz auslagern und die Ereignisproz nur als Verteiler benutzen würde — bereitet weniger Probleme bei Erweiterungen!)...
Private Sub Worksheet_Change(ByVal Target As Range)
Const AZielSpVg As String = "13 24 ...", _
EZielSpVg As String = "11 22 ..."    '... durch die and Spp ersetzen!
Dim i As Integer, ZielSp As Long, AZielSpp, EZielSpp As Variant
On Error Resume Next
AZielSpp = Split(AZielSpVg, " "): EZielSpp = Split(EZielSpVg, " ")
If IsError(WorksheetFunction.Match(CStr(Target.Column), AZielSpp, 0)) Then _
Exit Sub
For Each ZielSp In AZielSpp
If Cells(Target.Row, ZielSp) 

...vorausgesetzt, die 22 in Proz2 If Cells(Target.Row, 22) > 0 Then ist nur ein Schreibfehler (machte sonst ja auch keinen Sinn).
Wären es grdverschiedene Prozz würde ich auf die Sekundär-Proz-Möglichkeit beim Workbook (ggf auch Tertiär-Möglichkeit bei der Application — mehr ist dann wirklich nicht!) verweisen oder hätte mehr Arbeit gehabt... ;-)
Apropos Arbeit! Unter gewissen Voraussetzungen (Existenz einer entsprechenden udFkt) kann man den For Each-Zyklus auch wie folgt schreiben...
    For Each ZielSp In Pair(AZielSpp, EZielSpp)
If Cells(Target.Row, ZielSp(0)) 

Die Variable i wird dann hier nicht benötigt.
Gruß Luc :-?
Anzeige
PS: Seelect Case reicht natürlich völlig,...
16.12.2009 14:55:33
Luc:-?
...Jan & Jens,
sonst rödelt das nur unnötig alles durch, obwohl es ja immer nur eine geben kann... ;-)
Aber viell nutzt dir das anderweitig was...
Gruß Luc :-?
...bzw ein ': Exit For' nach jd Zellfüllaktion owT
16.12.2009 15:23:59
Luc:-?
:-?
sieht gut aus
16.12.2009 15:27:59
Jan
Hey Jungs, das sieht schon richtig gut aus. Komme heute leider nicht mehr zum ausprobieren. Das muss bis morgen warten. Ich melde mich hier wieder,
beste Grüße und herzlichen Dank, Jan

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige