Live-Forum - Die aktuellen Beiträge
Datum
Titel
23.04.2024 14:59:21
23.04.2024 14:47:39
23.04.2024 14:23:45
Anzeige
Archiv - Navigation
224to228
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
224to228
224to228
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Worksheet_change

Worksheet_change
02.03.2003 19:27:42
Krisotoff
Hallo Forum,
als relativer Neuling in VBA für Excel habe ich folgendes Problem:

Wenn in der Spalte J "PC" eingegeben wird, soll die benachbarte Zelle aus Spalte K und die darunter liegenden Zellen mit der "Target-Zelle" verbunden werden. Weitere mögliche Einträge für die Spalten J und K sind "PR" und "frei". Bei "PR" und "frei" sollen nur die darunterliegenden Zellen verbunden werden. Das ist soweit noch nicht schwierig.

Das Problem ist, wenn ich in die Zelle mit dem EIntrag "PC" anschließend wieder "frei" eintrage, soll sich der Zellenverbund zwischen Spalte J und K wieder auflösen, und es soll auch in der benachbarten Zelle (also in Spalte K) der Eintrag "frei" stehen.
Dies darf aber nur dann passieren, wenn zuvor die Zellen über die Spalten hinweg verbunden waren. (also über den Eintrag "PC")
Diese Einschränkung ist wichtig, da in anderen Zeilen dieser Spalten auch stehen kann:
J: "frei" und K: "PR" -> würde also jedes "frei" in Spalte J auch ein "frei in Spalte K bedeuten, dann würde der Eintrag "PR" aus obigem Beispiel verlorengehen.

Excel muss sich also sozusagen den alten Eintrag merken, und nur wenn dieser "PC" war, in beide Zellen "frei" schreiben.

WIE GEHT DAS??? (evt über "Worksheet_SelectionChange", da komm ich aber nicht weiter...)


Hier mein bisheriger Code:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)

If Target.Column < 10 Then Exit Sub
If Target.Column > 11 Then Exit Sub
If IsEmpty(Target) Then Exit Sub

If Target.Column = 10 Then
If Target = "PC" Then
Target.UnMerge

Range(Target, Target.Offset(1, 1)).Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.ShrinkToFit = False
End With
Selection.Merge

ElseIf Target = "frei" Or Target = "PR" Then
Target.UnMerge

Range(Target, Target.Offset(1, 0)).Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.ShrinkToFit = False
End With
Selection.Merge
End If
End If

If Target.Column = 11 Then
If Target = "frei" Or Target = "PR" Then
Target.UnMerge

Range(Target, Target.Offset(1, 0)).Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.ShrinkToFit = False
End With
Selection.Merge
End If
End If

End Sub

mit der Hoffnung auf Hilfe und schönen Dank im Voraus
Krisotoff



6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Re: Worksheet_change
02.03.2003 20:10:57
PeterW

Hallo Kristoff,

jeder einigermaßen erfahrene Makroprogrammierer wird darauf verzichten, Zellen zu verbinden; verbundene Zellen sind der Todfeind einer vernünftigen Programmierung.

Erklär doch mal im Klartext, was Du mit der Zellverbindung erreichen möchtest.

Gruß
Peter

Re: Worksheet_change
02.03.2003 20:34:39
Krisotoff

Hallo Peter,
von dem "Todfeind - Zellenverbinden" habe ich schon gehört. Solange ich aber genau darauf achte, in welcher Zelle die Ausgangswerte stehen, bin ich selbst mit jenem "Todfeind" noch nicht in Konflikt geraten.

In diesem konkreten Fall geht es um übersichtliche Darstellung.

Es handelt dich um Tabellen mit X bedingten Formatierungen, eingebetteten Funktionen, etc. Und beim Eintrag "PC" sollen eben zwei Spalten miteinander verbunden werden. Und wenn ich den Eintrag "PC" durch "frei" ersetze, soll in beiden Spalten wieder "frei" stehen, so dass bei der nächsten Änderung in beiden Spalten wieder einzelne Einträge erfolgen können.

Der von mit gesendete Code funktioniert so auch, bis auf jenen Punkt, dass wenn nach "PC" "frei" eingetragen wird, jenes "frei" nur in Spalte J steht. (und eben nicht auch in Spalte K)

Anzeige
Re: Worksheet_change
02.03.2003 20:54:57
PeterW

Hallo Kristoff,

bereinige doch mal den Code. Was soll die Abfrage:
If Target.Column = 11 Then
If Target = "frei" Or Target = "PR" Then
Target.UnMerge
wenn Du schon am Anfang des Codes die Bearbeitung abbrichst, sofern Target.Column <> 11 ist?

Target= "PR" oder Target="frei" fragst Du im Code einmal als Else If und dann nochmal (also IMMER) ab.

Versteh mich nicht falsch, den richtigen Code kann ich aufgrund Deines Ausgangscodes nicht liefern.

Gruß
Peter

Re: Worksheet_change
02.03.2003 21:20:54
Krisotoff

Hallo Peter,
so ganz bin ich mit dir nicht "eins". Aber wie gesagt, ich steh noch ziemlich am Anfang, was VBA angeht.

ich beschränke den Code auf Zeile 10 und 11:

If Target.Column < 10 Then Exit Sub
If Target.Column > 11 Then Exit Sub
If IsEmpty(Target) Then Exit Sub

(und nicht wie schreibst: If Target.Colum <> 11)

, wobei in Zeile 10 was anderes passiert, als in Zeile 11:


dies leite ich jeweils mit:

If Target.Column = 10 Then ...
bzw.
If Target.Column = 11 Then ...
ein.

Vielleicht gibt es ja elegantere Lösungen, ich kenne aber keine

Für Spalte 10 unterscheide ich ob es um den Eintrag "PC" geht, oder (also ElseIf) um "PR" bzw. "frei"

Für Spalte 11 gibt es nur die Anweisungen für die Einträge "PR" bzw. "frei"

Wenn du von bereinigen sprichst - klar diese "With-Anweisungen" kann man weglassen - das ist hier nicht wichtig.

Gruß
Krisotoff


Anzeige
Re: Worksheet_change
02.03.2003 21:27:06
PeterW

Hallo Kristoff,

sorry, da hab ich nicht genau genug gelesen.

Sofern es aufgrund der Daten möglich ist schick mir mal eine Beispieltabelle. Bin zu faul, Deine Struktur nachzubauen. :-)

Gruß
Peter


Re: Worksheet_change
02.03.2003 21:40:39
Krisotoff

Mail ist unterwegs

vielleicht findest du ja `nen Weg

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige