Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1960to1964
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

Intelligente Tabelle dynamisch erweitern und formatieren

Intelligente Tabelle dynamisch erweitern und formatieren
29.01.2024 13:46:12
FranziskusV
Guten Tag,

Ich wende mich einmal vertrauensvoll an das Forum.
Meine VBA-Kenntnisse reichen nämlich nicht aus um selbst zu schaffen was ich vorhabe. Ich habe im Archiv nicht wirklich gefunden was ich suche....obwohl es bestimmt keine neues "Problem" ist.

Ich habe eine Exceldatei mit einem Tabellenblatt auf dem mehrere intelligente Tabellen enthalten sind. Diese befinden sich in verschiedenen Bereichen des Tabellenblattes, untereinander, mit einigen Zeilen Abstand dazwischen. Aufgrund von Änderungen der Zeilenzahl on den intelligenten Tabellen oder auch durch Einfügen von Blattzeilen in den Zwischenbereichen kann sich die Position der intelligenten Tabellen ständig verändern verändern. Die intelligenten Tabellen haben Ergebniszeile unten. Sie sind jeweils mit einer orangen Zeilenbänderung formatiert.

Das Tabellenblatt auf dem sich die intelligenten Tabellen befinden wird per Code variabel benannt. In Zukunft möchte ich dieses Musterblatt auch duplizieren.

Das Tabellenblatt hat einen Blattschutz der vor und nach den Ausführungen von Code aufgehoben bzw wieder gesetzt wird.

Das ist der Kontext.

Meine Fragen habe ich für mehrere dieser intelligenten Tabellen, aber natûrlich kann ich den Code selbst anpassen wenn ich für eine intelligente Tabelle weiss wie ich vorgehen muss.


Was soll jetzt passieren :
1) Ich möchte die Erweiterung der betreffenden intelligenten Tabelle durch das Einfügen einer Blattzeile erreichen (Private Sub CommandButton1_Click() ). Die Blattzeile soll so eingefügt werden, dass sich die betreffende intelligente Tabelle um jeweils eine Zeile (nach unten aber oberhalb der Ergebniszeile) erweitert. So verlängert sich dann die betreffende intelligente Tabelle (und übernimmt alle Formate und passt die Ergebniszeile an) und alles was tiefer auf dem Tabellenblatt steht wird nach unten verschoben. Ein Einfügen einer neuen Zeile nur in der intelligenten Tabelle funktioniert nicht. Denn dann verspringen nur die bertreffenden Zeilen darunter und es entsteht ein Versprung mit den Bereichen die die intelligenten Tabellen umgeben. Wie kann ich per VBA den Code so schreiben um diese Blattzeile am Ende jeder Tabelle einfügen an der richtigen Stelle einzufügen ?

2) Ich habe in den intelligenten Tabellen in der letzten Spalte für jeden Datensatz eine Validierung durch 'Ja'. Wenn der Nutzer diese Validierung auf "Ja" (setzt sollten die Zellen in der intelligenten Tabelle gesperrt werden und die Farbe der betreffenden Zeile in der intelligenten Tabelle sollte auf eine grüne Bänderung springen. Also ein helles Grün wo vorher ein helles Orange war, und eine dunkleres Grün wo ein dunkleres Orange war. Ich weiss dass ich dazu das Change Ereignis des Tabellenblattes abfangen muss (Private Sub Worksheet_Change(ByVal Target As Range)) um den Code auszuführen.

Ich habe eine Musterdatei hochgeladen.
https://www.herber.de/bbs/user/166600.xlsm

Ich freue mich über jede Hilfe.

LG, FransikusV

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Intelligente Tabelle dynamisch erweitern und formatieren
29.01.2024 16:38:58
FranziskusV
Die erste Frage konnte ich mit Hilfe von ChatGPT lösen.
Mit folgenden Code :
Private Sub CommandButton1_Click()

'Blattzeile einfügen nach letzter Zeile der intelligenten Tabelle um diese um eine Zeile zu erweitern.

Dim ws As Worksheet
Dim meineTabelle As ListObject
Dim letzteZeile As Long
Dim blattZeilennummer As Long

' Annahme: Die Tabelle ist auf dem Arbeitsblatt "Tabelle1" und hat den Namen "Tabelle1"
Set ws = Me
Set meineTabelle = ws.ListObjects("")

' Ermittle die letzte Zeile in der Tabelle
letzteZeile = meineTabelle.ListRows.Count

' Überprüfe, ob die Tabelle Zeilen hat
If letzteZeile > 0 Then
' Ermittle die Blattzeilennummer der letzten Zeile
blattZeilennummer = meineTabelle.ListRows(letzteZeile).Range.Row

' Springe eine Zeile tiefer und füge eine neue Zeile ein
ws.Rows(blattZeilennummer + 1).Insert Shift:=xlDown

' Jetzt kannst du mit der neu eingefügten Zeile arbeiten
MsgBox "Eine Zeile wurde nach der letzten Zeile eingefügt. Neue Blattzeilennummer: " & (blattZeilennummer + 1)
Else
MsgBox "Die Tabelle hat keine Zeilen."
End If
End Sub


Der zweite Teil mit dem Einfärben und Sperren der Zellen ist noch nicht gelöst.
https://www.herber.de/bbs/user/166610.xlsm

Ich würde mich sehr über Hilfe freuen


LG FranziskusV
Anzeige
AW: Intelligente Tabelle dynamisch erweitern und formatieren
30.01.2024 01:12:16
FranziskusV
Das ist mein aktueller Code-Versuch um Frage 2 zu lösen.

Private Sub Worksheet_Change(ByVal Target As Range)

' Überwache Änderungen in der letzten Spalte des Bodybereichs der intelligenten Tabelle

Dim tbl As ListObject
Set tbl = Me.ListObjects("TbUebernahmen")

Dim lastColumn As ListColumn
Dim changedCells As Range
Dim cell As Range

' Ermittle die letzte Spalte
Set lastColumn = tbl.ListColumns(tbl.ListColumns.Count)

' Überprüfe, ob die Änderungen in der letzten Spalte des Bodybereichs der intelligenten Tabelle stattfinden
Set changedCells = Intersect(Target, tbl.ListColumns(lastColumn.Index).DataBodyRange)

If Not changedCells Is Nothing Then
Application.EnableEvents = False

' Durchlaufe jede geänderte Zelle in der letzten Spalte
For Each cell In changedCells
' Überprüfe, ob die Zelle in der letzten Spalte den Wert "Ja" hat
If UCase(cell.Value) = "JA" Then
' Optional: Hervorhebung durch bedingte Formatierung in der Zeile der geänderten Zelle
cell.Resize(, tbl.ListColumns.Count).Interior.Color = RGB(211, 236, 185)
' Sperre den Bereich in der Zeile der geänderten Zelle
cell.Resize(, tbl.ListColumns.Count).Locked = True
End If
Next cell

Me.Protect Password:="" ' Du kannst ein Passwort hinzufügen, wenn gewünscht
MsgBox "Blattschutz angewendet"

Application.EnableEvents = True
End If
End Sub



Aber der Code funktioniert noch nicht. Hat jemand eine Idee ?
LG; FranziskusV
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige