Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1608to1612
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

Änderung in Zellbereich Adressen Zellen speichern

Änderung in Zellbereich Adressen Zellen speichern
12.02.2018 12:11:31
Tobias.
Hallo,
villeicht weis einer von euch den Trick der mnir ehlt um mein Problem zu lösen.
Ich habe einen Bereich von 4 Zellen (B12:B15)in dem jede änderung zu einer Aktion führen soll.
Allerdings soll diese Änderung separate für jeden Bereich neben der jerweiligen zellen erfolgen also C12:O12, C13:O13, C14:O14, C15:O15.
Wenn sich also zwei der Zellen ändern möchte ich in den nebenstehenden Bereichen eine Aktion ausführen.
Im Moment habe ich im Modul diese Variable öffentlich definiert:
----------------------------------------------------
Public ChangeAddress As Range
Folgende Funktion überwacht den Bereich:
Private Sub Worksheet_Change(ByVal Target As Range)
If Application.Intersect(Target, Range("B12:B15")) _
Is Nothing Then
Exit Sub
Else
Set ChangeAddress = Target.Address
Call WriteComissionValues
End If
End Sub

----------------------------------------------------
Das ist die Aktion die folgen soll:
----------------------------------------------------
Sub WriteComissionValues()
Dim SearchWord As String
Dim RightCell As Range
Dim A As Integer
Application.ScreenUpdating = False
Range("A22:A194").EntireRow.Hidden = False
If Cells(ChangeAddress).Value = "" Then
ActiveSheet.Range(ChangeAddress).Value = ""
Else
SearchWord = Cells(ChangeAddress) 'Set the "SearchWord" to the same text/value as it is written in the cell of the B
Set RightCell = ActiveSheet.Range("B24:B193").Find(What:=SearchWord, LookAt:=xlWhole, LookIn:=xlValues, _
SearchOrder:=xlByRows) 'Write the adress of the cell what matches with the "SearchWord" in the Varible "RightCell"
If Not RightCell Is Nothing Then 'If a cell matches...
A = RightCell.Row 'Write the Row number into the Variable "A"
ActiveSheet.Range(Cells(ChangeAddress, ChangeAddress.Row + 1) & ":" & Cells(ChangeAddress, ChangeAddress.Row + 13)).Value = ""
ActiveSheet.Range(Cells(ChangeAddress, ChangeAddress.Row + 1) & ":" & Cells(ChangeAddress, ChangeAddress.Row + 13)).Value = ActiveSheet.Range("C" & A & ":N" & A).Value 'Copy the whole range from the Comissions list to the 1 line of the comission chart
Else
MsgBox "There was no matching word found!"
End If
End If
Range("A22:A194").EntireRow.Hidden = True
Application.ScreenUpdating = True
End Sub
--------------------------------------------------
Das suchen der Werte und eintragen in den Beerich funktioniert sehr gut, aber nur wenn ich den gesamten Bereich anspreche und die Aktion stur für jede zeile nacheinander ablaufen lasse (For Schleife).
Ich will aber das ich z.B. die dritte Zelle ändern kann und auch nur der Bereich neben dieser Zelle aktulaisiert wird. Der rest soll in dem fall nciht geändert werden.
Da ich schon Kopfschmerzen bekomme und alles zig mal verschlimmbessert habe bitte ich euch um ein paar zusätzliche Gehirnwindungen...
Danke :-)

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Änderung in Zellbereich
12.02.2018 14:36:04
mmat
Da kann ich Iboprofen nur empfehlen :-)
Ansonsten hast du offensichtlich eine globale Variable gesetzt um die Adresse des Ereignisses festzuhaltzen. In dem Sub "WriteCommission" versuchst du den Inhalt über eine Tabellenzelle mit dem gleichen Namen auszulesen ... ("If Cells(ChangeAddress).Value ..." bzw. "SearchWord = Cells(ChangeAddress)").
Das kann nicht funktionieren.
Hilft das schon weiter ?
AW: Änderung in Zellbereich Adressen Zellen speich
12.02.2018 14:58:03
Tobias.
Hallo noch mal,
nicht sehr elegnat aber so geht es.
Sollte jemand noch tips haben immer her damit.
Private Sub Worksheet_Change(ByVal Target As Range)
Set Bereich1 = Range("B12:B12")
Set Bereich2 = Range("B13:B13")
Set Bereich3 = Range("B14:B14")
Set Bereich4 = Range("B15:B15")
If Not Intersect(Target, Bereich1) Is Nothing Then
Call WriteComissionValues1
ElseIf Not Intersect(Target, Bereich2) Is Nothing Then
Call WriteComissionValues2
ElseIf Not Intersect(Target, Bereich3) Is Nothing Then
Call WriteComissionValues3
ElseIf Not Intersect(Target, Bereich4) Is Nothing Then
Call WriteComissionValues4
End If
End Sub

Anzeige
AW: Änderung in Zellbereich Adressen Zellen speichern
12.02.2018 17:02:30
fcs
Hallo Tobias,
ich musste deinen an einigen Stellen doch recht komplizierten Code erst einmal genau verstehen.
Man kann da einiges vereinfachen, indem man die optimlen Methoden/Eigenschaften für Zellen verwendet.
Die geänderte Zelle in B12:B15 kann man direkt als Parameter an das Makro mit den Aktionen übergeben ohne den Umweg über eine Public-Variable.
Außerdem sollte man während der Ausführung von Makros meistens die Ereigns-Makros (falls vorhanden) vorübergehend deaktivieren, damit es nicht zu unerwünschten Rückkopplungen bzw. unnötig langer Ausführung von Ereignismakros kommt.
Gruß
Franz

Private Sub Worksheet_Change(ByVal Target As Range)
If Application.Intersect(Target, Range("B12:B15")) Is Nothing Then
Exit Sub
Else
If Target.Cells.Count = 1 Then
Call WriteComissionValues(ChangeAddress:=Target)
End If
End If
End Sub
'Das ist die Aktion die folgen soll:
Sub WriteComissionValues(ChangeAddress As Range)
Dim SearchWord As String
Dim RightCell As Range
Dim A As Integer
Dim wks As Worksheet
Set wks = ActiveSheet
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
wks.Range("A22:A194").EntireRow.Hidden = False
SearchWord = ChangeAddress.Value 'Set the "SearchWord" to the same text/value as _
it is written in the cell of the B
If SearchWord  "" Then
Set RightCell = wks.Range("B24:B193").Find(What:=SearchWord, LookAt:=xlWhole, _
LookIn:=xlValues, SearchOrder:=xlByRows) 'Write the adress of the cell what _
matches with the "SearchWord" in the Varible "RightCell"
If Not RightCell Is Nothing Then 'If a cell matches...
ChangeAddress.Offset(0, 1).Resize(1, 13) = 0
ChangeAddress.Offset(0, 1).Resize(1, 13).Value _
= RightCell.Offset(0, 1).Resize(1, 13).Value 'Copy the _
whole range from the Comissions list to the 1 line of the comission chart
Else
MsgBox "There was no matching word found!"
End If
End If
wks.Range("A22:A194").EntireRow.Hidden = True
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
End Sub

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige