Hallo alle Damen und Herren zusammen,
ich bin zum ersten mal in einem Forum unterwegs und bitte um Korrektur wenn die Ausführungen ungenügend sind.
Meine VBA-Kenntnisse sind eher geringer Natur das vorweg.
Ich möchte in eine Tabelle, einen oder mehrere Einträge einfügen oder löschen.
Wenn dies geschieht, dann soll eine Prüfung statt finden die erkennet welcher Bereich wurde gerade geändert/ neuer Eintrag.
Abhängig von dem geänderten Bereich soll ein weiteres Makro aufgerufen werde das eine weitere Prüfung durchführt.
Mein Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim a As Integer
Dim b As Integer
a = 18 'steht für die Anfangszeile
b = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row ' letzte Zeile ermittelt
Dim SoUn_ObEin As Range
Dim SoUn_ObGeli As Range
Dim LichMaßIST As Range
Dim RohGeli As Range
Dim RohAng As Range
Dim RREin As Range
Dim tbl As Range
Set SoUn_ObEin = Worksheets("LÜ").Range("AP" & a, "AQ" & b) 'Bereich 1
Set SoUn_ObGeli = Worksheets("LÜ").Range("AI" & a, "AJ" & b) 'Bereich 2
Set LichMaßIST = Worksheets("LÜ").Range("AF" & a, "AF" & b) 'Bereich 3
Set RohGeli = Worksheets("LÜ").Range("K" & a, "K" & b) 'Bereich 4
Set RohAng = Worksheets("LÜ").Range("M" & a, "M" & b) 'Bereich 5
Set RREin = Worksheets("LÜ").Range("O" & a, "O" & b) 'Bereich 6
Set tbl = Worksheets("LÜ").Range("A" & a, "ED" & b)
'erste Ansatz/ Versuch
In dem ersten Ansatz habe ich mir aus dem Netz Codes zusammen gestohlen. Es wird der Bereich 4,5 & 6 nach meinem Verständnis überwacht.
Wenn ich nun eine Änderung/ Eintrag in dem Tabellenballt und Bereich 4 oder 5 oder 6 einfügen wird über das Worksheets_Change Event der Code ausgelöst und Excel geht den Code ohne Fehler durch.
Tatsächlich wäre es wirklich sehr schön wenn Excel wüsste zu unterscheiden wenn in
Bereich 4, 5 oder 6 eine Änderung dann nur diese Pfad gehen (Application.Run "Rohre" ) und
wenn in Bereich 1,2 oder 3 eine Änderung/ Eintrag dann Application.Run "ZelleBeschSoUnEin_SoObEin".
Ziel des ganzen soll sein das je nach (beschriebenen) Bereich nur die entsprechenden Makros "aktiviert werden" und nicht alle existierenden Makros.
Ich hoffe ich habe mich nicht zu kryptisch ausgedrückt.
If Application.Intersect(Target, RohGeli, RohAng, RREin) Is Nothing Then ' Erste IF-Anweisung
Application.Run "Rohre"
End If
If Application.Intersect(Target, SoUn_ObEin, SoUn_ObGeli, LichMaßIST) Is Nothing Then 'Zweite IF-Anweisung
Application.Run "ZelleBeschSoUnEin_SoObEin"
End If
'zweiter Ansatz/ Versuch
Im Zweiten Ansatz dachte ich wäre schlauer geworden, weil ich die Möglichkeiten von Select Case entdeckt habe. Dann habe ich die ganze Tabelle (tbl) unter Überwachung gestellt und Fälle kreiert die die Bereiche darstellen.
Das wenn der Eintrag in dem Bereich liegt dann das weiter Makro aufgerufen wird.
Das zum gedachte Teil was das Makro können sollte kommen wir zu dem was es macht.
Es macht bei einem Eintrag egal in welchem Bereich eine Prüfung des ersten Falles ohne Fehler und beendet dann den Code.
If Application.Intersect(Target, tbl) Is Nothing Then
Exit Sub
Else
Select Case True
Case Application.Intersect(Target, RohGeli, RohAng, RREin) Is Nothing 'Ersten Fall
Application.Run "Rohre"
Case Application.Intersect(Target, SoUn_ObEin, SoUn_ObGeli, LichMaßIST) Is Nothing 'Zweiter Fall
Application.Run "ZelleBeschSoUnEin_SoObEin"
End Select
End If
End Sub
Ich bitte um Hilfe wie der Code umgeschrieben werden muss das je wenn Bereiche beschrieben werden die entsprechende Fallunterscheidung durchgeführt wird.
Vielen Dank im Voraus.