Anzeige
Archiv - Navigation
1900to1904
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 neue Sheet übertragen

Worksheet_Change neue Sheet übertragen
12.10.2022 16:43:29
Elias
Hallo,
Ich bin leider gerade erst am Anfang meiner VBA Erfahrung. Ich hab diese Formel logisch weise über YouTube rausgesucht, was auch funktioniert jedoch möchte ich nun diese Sortierungsautomatisierung auf weiteren Tabellen anwenden welches mich jedoch vor ungeahnte Herausforderungen stellt. Aktuell habe ich die unten stehende Formel auf Sheet 6 (DEV) angewendet und möchte nun diese Automatisierung auf Sheet 5 (Sales) anwenden. Ich habe die schritte wiederholt die ich für die erste Tabelle vorgenommen hatte. Doch ich bekomme dann einen Fehler 1004 mit : If Not Intersect(Target, Range("DevVehicleData[No]")) Is Nothing Then mein erster Gedanke war das Private Sub Worksheet_Change(ByVal Target As Range) ja irgendwie adressiert werden muss da es ja offensichtlich nicht weis welche Tabelle er nehmen soll. Die frag ist einfach wie kann ich die Funktion auf weitere Tabellen anwenden was muss ich dafür wo ändern?

Private Sub Worksheet_Change(ByVal Target As Range)
'Prüfen, ob eine Zelle veränder wurde
If Target.Count > 1 Then Exit Sub
'Prüfen ob Bestand veränder wurde
If Not Intersect(Target, Range("DevVehicleData[No]")) Is Nothing Then
'Variable dimensionieren
Dim No As String
'Bestand merken
No = Target.Value
'Sortieren
Range("DevVehicleData").Sort Key1:=Range("DevVehicleData[No]"), Order1:=xlDescending, Header:=xlYes
'Bestand suchen
Range("A:A").Find(what:=No).Activate
End If
End Sub
DevVehicleData ist logischerweise die Tabelle im Sheet6 (DEV)
Frage 2: Muss ich für jede Tabelle/sheet ein neues Modul machen ? denn ich frage mich dann auch wie soll die Formel wissen welches Modul es nutzen soll ?
Ihr seid meine letzte Hoffnung, ich bin für jede Hilfe dankbar !

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

Betreff
Datum
Anwender
Anzeige
AW: Worksheet_Change neue Sheet übertragen
12.10.2022 18:32:18
onur
Wenn der Bereich immer der gleiche ist (gleicher Anfang und Ende - gleich groß) , kannst du statt des Bereichnamens die Range-Adresse eingeben und statt Worksheet_Change Workbook_SheetChange im Codemodul der Arbeitsmappe nehmen, dann funktioniert der Code in ALLEN Blättern.
AW: Worksheet_Change neue Sheet übertragen
13.10.2022 12:21:42
Yal
Hallo Elias,
es handelt sich hier nicht um eine "Formel" sondern um VBA-Code. Es ist ein Detail, aber es verwirrt.
Ergänzend zu Onurs Beschreibung: Du hast 4 Art von Codepane:
_ DieseArbeitsmappe: der Ereignis-Code dort reagiert auf Ereignis auf alle Blätter (VBA: Worksheet), daher kommt die Sub so:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Mit Sh wird übergeben, um welche Worksheet es sich handelt.
_ TabelleX: der Ereignis wird hier nur den gegebenen Worksheet abgefangen
_ Module: hier kann kein Ereignis abgefangen werden.
_ Klassenmodul: sehen wir später.
Schwierigkeit ist, dass Du mit "aktive Tabelle" (VBA: ListObject) arbeitest. Diese haben im ganzen Arbeitsmappe (VBA: Workbook) einen eindeutigen Namen, was die Wiederverwendbarkeit des Codes erschwert. Workaround: wir gehen davon aus, dass pro Arbeitsblatt immer nur eine aktive Tabelle vorliegt (was im Allg. zu empfehlen ist), und sprechen dann die erste Tabelle im Blatt an.
Wichtig: in allen aktiven Tabellen gibt es eine Spalte die "No" heisst.
Dein Code sieht dann so aus (in "DieseArbeitsmappe" ablegen):

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'Variable dimensionieren
Dim No As String
If Target.Count > 1 Then Exit Sub 'Prüfen, ob nur eine Zelle verändert wurde (bei mehrere raus)
If Sh.ListObjects.Count = 0 Then Exit Sub 'keine aktive Tabelle in diesem Blatt
With Sh.ListObjects(1) 'wir gehen davon aus, dass es immer nur eine "aktive Tabelle"(VBA: ListObject) pro Blatt gibt
'Prüfen ob Bestand veränder wurde
If Not Intersect(Target, .ListColumns("No").DataBodyRange) Is Nothing Then
'Bestand merken
No = Target.Value
'Sortieren
.DataBodyRange.Sort Key1:=.ListColumns("No"), Order1:=xlDescending, Header:=xlYes
'Bestand suchen
.DataBodyRange.Find(what:=No).Activate
End If
End With
End Sub
VG
Yal
Anzeige
AW: Worksheet_Change neue Sheet übertragen
13.10.2022 14:05:18
Elias
Vielen Danke für die schnelle Antwort an Onurs und Yal.
An Yal: Danke für ausführliche Antwort und für die Klarstellung. Ich hab das nun eingefügt in "ThisWorkbook" (bei mir ist es auf Englisch) Ich habe

Sub Sortieren()
.DataBodyRange.Sort Key1:=.ListColumns("No"), Order1:=xlDescending, Header:=xlYes
End Sub
in das Modul eingefügt ist das richtig ? denn ich habe versucht ThisWorkbook auszuführen doch da hat ihm das Modul gefehlt. Doch jetzt bekomme ich die Fehlermeldung es währe nicht ausreichen definiert: .ListColumns("No").
Also was setzt ich am geschicktesten als Modul ein ?
Und in jeder Tabelle gibt es ein "No". Werde auf deine Anweisung auch pro Seite eine Tabelle automatisieren.
Danke für die Hilfe !
Anzeige
AW: Worksheet_Change neue Sheet übertragen
13.10.2022 15:08:28
Yal
Hallo Elias,
der Punkt bedeutet eine Verkettung der Parent-Objekt zu Child-Objekt

Worksheets(1).Range("A1")
wird auf Deutsch "auf dem ersten Arbeitsblatt, die Zelle "A1" nehmen"
(den Code auf Deutsch zu lesen und sogar laut zu sprechen, als ob man es jemanden vorlesen und erklären würde, ist ein Beschleuniger, um den Inhalt zu verstehen. Ok, laut lesen ist im Büro ein no-go, aber zu Hause: machen)
Wenn viele Child-Element sich auf demselben Parent beziehen, kann man diesen mit "With" als Überschrift nehmen:

With Sh.ListObjects(1)
.DataBodyRange.Sort Key1:=.ListColumns("No"), Order1:=xlDescending, Header:=xlYes
End With
(hier sogar zwei Child-Element: .DataBodyRange und .ListColumns)
Wenn Du dann die mittlere Zeile (die mit den Punkt-Präfix) irgendwo ablagerst, musst Du den "With" und "End With" auch mitnehmen.
VG
Yal
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige