Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1872to1876
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 Tabellen auflisten

Intelligente Tabellen auflisten
08.03.2022 13:50:36
erichm
Hallo,
ich habe mittlerweile mehrere intelligente Tabellen angelegt. Eine Übersicht findet sich im Namensmanager.
Jetzt versuche ich verzweifelt, mir davon eine Liste ausdrucken bzw. in einem Tabellenblatt anzeigen zu lassen. Wenn ich die Liste vom Namensmanager anzeigen lasse, kommen aber immer nur die vergebenen Namen und nicht die intelligenten Tabellen.
Geht das generell nicht oder gibt es einen Trick?
Besten Dank für eine Hilfe.
mfg

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Intelligente Tabellen auflisten
08.03.2022 13:59:56
ChrisL
Hi
Geht es um die Filter-Optionen im Namensmanager?
cu
Chris
Userbild
AW: Intelligente Tabellen auflisten
08.03.2022 14:07:51
erichm
Hallo Chris,
die Filter-Option ist mir bekannt; insofern könnte ich hier auch einen Screenshot ausdrucken lassen.
Da die Tabellennamen aber immer mehr weden und sich teilweise auch ändern, wäre eine Auflistung in einem EXCEL-Arbeitsblatt komfortabler.
mfg
AW: Intelligente Tabellen auflisten
08.03.2022 16:16:32
ChrisL
Hi
Mit dem Vorschlag von Nepumuk bist du bereits bestens bedient. Einfach weil es interessant ist, habe ich noch versucht die Aufgabe in Power-Query zu lösen:
https://www.herber.de/bbs/user/151634.xlsx
Bei Interesse kannst du gerne nachfragen, aber wahrscheinlich würde ich hierfür selber auch die VBA-Lösung wählen.
Eine echte Unterscheidung zwischen Bereichsnamen und definiertem Tabellennamen kennt auch PQ nicht. Bereichsnamen haben aber keinen Spaltentitel, weshalb diese mit "Column" bezeichnet werden. Geht man davon aus, dass keine der Spalten in den Tabellen so heisst, kann man es als Filterkriterium verwenden.

let
Quelle = Excel.CurrentWorkbook(),
#"Hinzugefügte benutzerdefinierte Spalte" = Table.AddColumn(Quelle, "Schema", each List.Contains(List.Transform(Table.Schema([Content])[Name], each Text.Start(_, 6)),"Column")),
#"Gefilterte Zeilen" = Table.SelectRows(#"Hinzugefügte benutzerdefinierte Spalte", each ([Schema] = false) and ([Name]  "Abfrage1")),
#"Entfernte Spalten" = Table.RemoveColumns(#"Gefilterte Zeilen",{"Content", "Schema"})
in
#"Entfernte Spalten"
cu
Chris
Anzeige
AW: Intelligente Tabellen auflisten
08.03.2022 19:02:47
erichm
Hallo Chris,
danke für die Alternative. Da ich seit einigen Wochen auch mit PQ "arbeite" und derzeit lerne, ist das eine willkommene Gelegenheit, mein Wissen zu erweitern.
Die Code-Empfehlungen bei "let" / "in" sind mir momentan noch nicht ganz klar, da muss ich noch üben. Zudem habe ich beim erstellen einer leeren Abfrage einen Fehlerhinweis bekommen, den ich noch nicht beseitigen konnte.
Ich werde mich wohl nochmals melden müssen.
mfg
AW: Intelligente Tabellen auflisten
09.03.2022 08:11:43
ChrisL
Hi
Danke für die Rückmeldung.
Die benutzerdefinierte Spalte lässt sich noch etwas vereinfachen:

=List.Contains(Table.Schema([Content])[Name],"Column1")
Aus der Tabelle "Content" wird das Schema (Spaltentitel, Datentypen etc.) entnommen und daraus eine Tabelle erzeugt. Aus dieser Tabelle wird die Spalte "Name" entnommen und daraus eine Liste generiert. Die Liste wird geprüft, ob der Wert Column1 enthalten ist und als Ergebnis True/False eingesetzt.
Ursprünglich hatte ich sinngemäss geprüft:
=LINKS(]Name];6)="Content"
neu
=[Name]="Content1"
cu
Chris
Anzeige
AW: nachgefragt ...
09.03.2022 13:46:42
neopa
Hallo Chris
... mit Deinem vereinfachten Code gibt es bei mir Probleme, dessen Ursache ich momentan nicht erkenne. Kannst Du bitte den gesamten M-Code mit dieser Codezeile bereitstellen?
Gruß Werner
.. , - ...
AW: nachgefragt ...
09.03.2022 14:02:09
ChrisL
Hi Werner
Klar doch...
https://www.herber.de/bbs/user/151651.xlsx

let
Quelle = Excel.CurrentWorkbook(),
#"Hinzugefügte benutzerdefinierte Spalte" = Table.AddColumn(Quelle, "Schema", each List.Contains(Table.Schema([Content])[Name],"Column1")),
#"Gefilterte Zeilen" = Table.SelectRows(#"Hinzugefügte benutzerdefinierte Spalte", each ([Schema] = false) and ([Name]  "Abfrage1")),
#"Entfernte Spalten" = Table.RemoveColumns(#"Gefilterte Zeilen",{"Content", "Schema"})
in
#"Entfernte Spalten"
cu
Chris
Anzeige
AW: danke, nun alles klar ...
09.03.2022 17:52:48
neopa
Hallo Chris,
... hatte dummerweise übersehen, dass in meiner Testdatei Spaltenüberschrift mit "Column1" bezeichnet waren und Du in Deiner vereinfachten Codezeile "Column1" definiert hattest, was natürlich zu einem Ergebnisunterschied führen musste.
Danke.
Gruß Werner
.. , - ...
AW: danke, nun alles klar ...
09.03.2022 18:06:54
ChrisL
@ Werner: Kein Problem, danke für die Rückmeldung
In meiner beispielhaften Erklärung hatte ich übrigens noch einen verwirrenden Vertipper. Ich meinte natürlich die Spaltentitel "Column" und nicht "Content"
Ursprünglich hatte ich sinngemäss geprüft:
=LINKS(]Name];6)="Column"
neu
=[Name]="Column1"

Anzeige
...noch eine Frage
09.03.2022 20:15:41
erichm
Hallo Chris,
danke für die Ergänzungen / Klarstellungen. Jetzt funktioniert es soweit.
Da ich mittlerweile mehrere Intelligente Tabellen habe, wäre es noch hilfreich, wenn man zu der Übersicht der Tabellennamen noch ergänzen könnte, in welcher Tabelle sich diese intelligente Tabellen befinden.
Geht sowas?
mfg
AW: ...noch eine Frage
09.03.2022 21:22:10
Yal
Hallo Eric,
leider nicht mit der Lösung von Chris. Da muss man auf Nepumuks Vorschlag zurückgreifen und leicht anpassen.
Ich habe natürlich mit den Anpassungen übertrieben...
Du bekommst den Namen des Arbeitsblatts, Namen der ListObject, Range des LO und Header-Liste. In eine separaten Worksheet.

Public Sub ListObject_auflisten()
Dim ws As Worksheet
Dim LO As ListObject
Dim F As Range
Dim Headers As String
With WähleOderHerstelle("ListObjectListe", "Arbeitsblatt", "Tabelle", "Bereich", "Felder")
For Each ws In ThisWorkbook.Worksheets
For Each LO In ws.ListObjects
Headers = ""
For Each F In LO.HeaderRowRange.Cells
Headers = Headers & ", " & F.Value
Next
.Range("A9999").End(xlUp).Range("A2:D2") = Array(ws.Name, LO.Name, LO.DataBodyRange.Address(0, 0), Mid(Headers, 3))
Next
Next
End With
End Sub
Private Function WähleOderHerstelle(Blattname, ParamArray Headers()) As Worksheet
Dim ws As Worksheet
On Error Resume Next
Set ws = ThisWorkbook.Worksheets(Blattname)
If ws Is Nothing Then
Set ws = ThisWorkbook.Worksheets.Add
ws.Name = Blattname
Else
ws.Cells.ClearContents
End If
ws.Range("A1").Resize(1, UBound(Headers) + 1) = Headers
Set WähleOderHerstelle = ws
End Function
VG
Yal
Anzeige
AW: ...noch eine Frage
09.03.2022 22:22:08
erichm
Hallo Yal,
danke für die schnelle Rückmeldung - habs mal schnell probiert und es klappt!!
Werde mir das morgen noch näher anschauen; vielleicht gibts noch eine Frage.
mfg
was muss ich ändern?
10.03.2022 10:04:06
erichm
Hallo Yal,
also der Code funktioniert sehr gut und das Ergebnis ist optimal.
Da ich den Code für mehrere Dateien benötige, speichere ich diesen in der PERSONL.xla ab. Wenn ich EXCEL öffne, erhalte ich immer eine Übersicht angezeigt, bei der ich diese Makros aufrufen kann. Das ist sehr komfortabel. Wenn ich jedoch diesen Code dort abspeichere und aufrufen will, dann klappt das nicht. Ich vermute, dass ich eine oder zwei bestimmte Stellen im Code ändern müsste - aber da reichen meine Kenntnisse leider nicht.
Mein Code beim öffnen von EXCEL und Anzeige der Liste der Makros (ich habe hier als Beispiel nur den Auszug für
Druckvorschau / Vorschau
IntTabellen = Dein Code mit ListObject_auflisten
angezeigt)
Option Explicit

Private Sub Workbook_Open()
Dim i%
i = Application.CommandBars(1).Controls.Count
With Application.CommandBars("Worksheet Menu Bar").Controls.Add(Type:= _
msoControlButton, Before:=i + 1, Temporary:=True)
.Caption = "&IV zurück"
.OnAction = "IV_zurück"
.Style = msoButtonIconAndCaption
End With
With Application.CommandBars("Worksheet Menu Bar").Controls.Add(Type:= _
msoControlPopup, Before:=i + 1, Temporary:=True)
.Caption = "&Personl.xls"
With .Controls.Add(Type:=msoControlPopup, Temporary:=True)
.Caption = "&Druckvorschau"
With .Controls.Add(Type:=msoControlButton, Temporary:=True)
.Caption = "&Bestand"
.OnAction = "Vorschau"
.Style = msoButtonIconAndCaption
End With
With .Controls.Add(Type:=msoControlButton, Temporary:=True)
.Caption = "&IntTabellen"
.OnAction = "IntTabellen"
.Style = msoButtonIconAndCaption
End With
End With
End Sub

Public Sub IntTabellen()
Dim ws As Worksheet
Dim LO As ListObject
Dim F As Range
Dim Headers As String
With WähleOderHerstelle("ListObjectListe", "Arbeitsblatt", "Tabelle", "Bereich", "Felder")
For Each ws In ThisWorkbook.Worksheets
For Each LO In ws.ListObjects
Headers = ""
For Each F In LO.HeaderRowRange.Cells
Headers = Headers & ", " & F.Value
Next
.Range("A9999").End(xlUp).Range("A2:D2") = Array(ws.Name, LO.Name, LO.DataBodyRange.Address(0, 0), Mid(Headers, 3))
Next
Next
End With
End Sub


Private Function WähleOderHerstelle(Blattname, ParamArray Headers()) As Worksheet
Dim ws As Worksheet
On Error Resume Next
Set ws = ThisWorkbook.Worksheets(Blattname)
If ws Is Nothing Then
Set ws = ThisWorkbook.Worksheets.Add
ws.Name = Blattname
Else
ws.Cells.ClearContents
End If
ws.Range("A1").Resize(1, UBound(Headers) + 1) = Headers
Set WähleOderHerstelle = ws
End Function
Der Änderungsbedarf liegt evtl. bei ThisWorkbook?
Nochmals besten Dank für eine Hilfe.
mfg
Anzeige
AW: was muss ich ändern?
10.03.2022 11:22:39
Yal
... weil in den beiden Code "ThisWorkbook" steht.
Wenn die Makro jetzt in Personl.xla stehen, wird versucht dorthin ListObject zu finden.
Es müsste überall in ActiveWorkbook geändert werden.
VG
Yal
AW: Intelligente Tabellen auflisten
09.03.2022 09:01:48
Yal
Hallo Eric,
"let" und "in" sind in Power Query erst sichtbar, wenn man den "erweiterten Editor" öffnet. Daraus hat man genau den Text, den Chris geliefert hat.
VG
Yal
AW: Intelligente Tabellen auflisten
08.03.2022 14:11:03
Nepumuk
Hallo Erich,
so?

Option Explicit
Public Sub Beispiel()
Dim objWorksheet As Worksheet
Dim objListObject As ListObject
For Each objWorksheet In ThisWorkbook.Worksheets
For Each objListObject In objWorksheet.ListObjects
Debug.Print objListObject.Name
Next
Next
End Sub
Gruß
Nepumuk
Anzeige
DANKE Nepumuk - mfg owT
08.03.2022 18:55:30
erichm
...

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige