Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Name intelligente Tabelle

Name intelligente Tabelle
08.11.2022 10:34:10
Steve
Guten Morgen,
nach einigen Jahren Pause in VBA versuche ich mich mal wieder an einer neuen Aufgabe.
Ich habe das meiste, wenn auch nicht sehr elegant, umgesetzt bekommen, stocke aber bei einem Problem.
Im wesentlichen möchte ich, unabhängig seiner Position eine intelligente Tabelle finden, den Namen auslesen in einer Variablen merken und im Anschluss weiterverwenden.
(Ziel soll sein, das der Benutzer das Tabellenblatt kopieren und die intelligente Tabelle umbennenen oder verschieben kann und das Makro dennoch funktioniert.)
Ich habe einen Codeschnipsel gefunden, der in der Lage ist die Tabelle in dem Worksheet zu finden und den Namen auszugeben.
Aber ich schaffe es nicht den Namen für die weitere Verwendung zu speichern. Ich sende den Schnipsel mal mit:

For Each objekt In Sheets(Blatt).ListObjects
MsgBox objekt.Name
Next
Tatsächlich existiert in dem Worksheet auch immer nur eine einzelne intelligente Tabelle. Aber leider habe ich keine Ahnung wie ich das umsetzen muss, das er diese einzelne Tabelle sucht und den Namen findet. Wenn ich den Code nämlich richtig verstehe, würde er so lange suchen, bis er alle Tabellen gefunden hat.
Kann mir da Bitte jemand bei helfen?
Liebe Grüße
Steve
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Name intelligente Tabelle
08.11.2022 10:54:17
Beverly
Hi Steve,
wenn tatsächlich nur 1 einzige Tabelle vorhanden ist, dann kannst du sie generell über den Index ansprechen ohne den Namen zu kennen:

Worksheets("TAbelle").ListObjects(1)
Bis später
Karin

Anzeige
AW: Name intelligente Tabelle
08.11.2022 11:34:57
Steve
Hallo Karin,
ich danke dir für deine schnelle Lösung. Habe das soweit hinbekommen und es scheint zu funktionieren.
Allerdings kam mir eben noch ein Gedanke den ich nicht umgesetzt bekomme.
Zu der intelligenten Tabelle gehört auch eine PIVOT. Wenn ich das Sheet nun kopiere müsste die Quelle der PIVOT geändert werden.
Ich dachte ich könnte das ebenfalls per VBA machen. Aber das scheint nicht zu funktionieren.

Sub Abgleich()
Dim Blatt As String
Dim Tabelle As String
'Application.ScreenUpdating = False
Sheets("MUSTER").Visible = True
Blatt = ActiveSheet.Name
Tabelle = Worksheets(Blatt).ListObjects(1)
Sheets("Muster").Select
Range("B4:L4").Select
Selection.Copy
Sheets(Blatt).Select
Range(Tabelle).Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Range("A3").Select
ActiveSheet.PivotTables("PivotTable2").PivotCache.Refresh
ActiveSheet.PivotTableWizard SourceType:=xlDatabase, SourceData:="Blatt''Tabelle"
ActiveWorkbook.Worksheets(Blatt).Activate
Sheets("Muster").Visible = False
Application.ScreenUpdating = True
End Sub
Kannst du mir sagen voran das liegen könnte?
Liebe Grüße
Steve
Anzeige
Teillösung, aber noch nicht ganz
08.11.2022 13:47:08
Steve
Hallo Karin,
ich habe, so glaube ich eine Teillösung erhalten.
Hab mal ein Makro aufgezeichnet, bei dem ich die Pivotquelle umbenenne, also eine andere Quelle zuweise.
Das ist dabei herausgekommen:

    ActiveSheet.PivotTables("PivotTable2").ChangePivotCache ( _
"GES Unter dem Regenbogen!PivotTable2")
Im Prinzip könnte ich das ja nehmen um zu Beginn des Makros die Verknüpfung herzustellen. Damit habe ich direkt sicher gestellt, das die Verknüpfung wirklich zur richtigen Tabelle geht.
Im Kontext deiner Lösung wäre dann
"GES Unter dem Regenbogen" meine intelligente Tabelle.
Nur das ich es nicht schaffe das "GES Unter dem Regenbogen" durch die Variable "Tabelle" auszutauschen.
Habe mal die betreffende Stelle dick gemacht
Sub Abgleich()
Dim Blatt As String
Dim Tabelle As String
'
'Application.ScreenUpdating = False
Sheets("MUSTER").Visible = True
Blatt = ActiveSheet.Name
Tabelle = Worksheets(Blatt).ListObjects(1)
ActiveSheet.PivotTables("PivotTable2").ChangePivotCache ( _
"(Tabelle)!PivotTable2")

Sheets("Muster").Select
Range("B4:L4").Select
Selection.Copy
Sheets(Blatt).Select
Range(Tabelle).Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
ActiveSheet.PivotTables("PivotTable2").PivotCache.Refresh
ActiveWorkbook.Worksheets(Blatt).Activate
Sheets("MUSTER").Visible = False
Application.ScreenUpdating = True
End Sub
Kannst du mir sagen, was ich da falsch mache?
Ich Danke dir.
Liebe Grüße
Steve
Anzeige
AW: Teillösung, aber noch nicht ganz
08.11.2022 15:26:42
Beverly
Hi Steve,
du kannst das neue Tabellenblatt nicht einfach mit "(Tabelle)!PivotTable2" ansprechen - so würde es bedeuten, dass die Tabelle eben (Tabelle) heißt, obwohl das deine Variable sein soll. Versuche es mal so (ungetestet, da ich mich mit Pivot nicht auskenne):

ActiveSheet.PivotTables("PivotTable2").ChangePivotCache ( _
Tabelle & "!PivotTable2")
Bis später
Karin

Anzeige
AW: Teillösung, aber noch nicht ganz
11.11.2022 14:25:53
Steve
Hallo Karin,
Sorry das ich jetzt erst antworte. War ein paar Tage nicht im Büro
Ich habe es ausprobiert aber irgendwie scheint das nicht zu funktionieren.
Da ich aber eine weitere Aufgabe reinbekommen habe, musste ich das Problem leider zurückstellen.
Ich danke dir für deine bisherige Hilfe. Für den wichtigsten Teil der Tabelle war sie genau das was ich brauchte.
Liebe Grüße und ein schönes Wochenende
Steve
Anzeige
AW: Name intelligente Tabelle
08.11.2022 11:01:19
Oberschlumpf
Hi Steve,
dein mini-Codeschnipsel "sagt" mir, dass um das For/Each noch mindestens 1 For/Next drumrumgebaut sein muss.
Denn bei Blatt in Sheets(Blatt) handelt es sich um eine Variable, die wohl mit...

For Blatt = 1 To letztesBlatt
For Each...
Next
Next
...hochgezählt wird
Und daraus ergibt sich dann für mich, dass in der gesamten Datei - jedes - (Tabellen)Blatt geprüft wird, ob intelligente Tabellen vorhanden sind.
Wenn ja, wird der jeweilige Name mit MsgBox angegeben.
Und was genau möchtest jetzt du erreichen?
nur 1 Blatt enthält eine intelligente Tabelle?
dann...

MsgBox Sheets("DeinBlatt").ListObjects.Name
...anstelle von "DeinBlatt" musst du - den - Blattnamen eingeben, in dem sich die gesuchte, intell. Tab. befindet.
Hilfts?
Ciao
Thorsten
Anzeige
AW: Name intelligente Tabelle
08.11.2022 11:38:44
Steve
Hallo Thorsten.
ich habe mir den Schnipsel woanders rausgeholt, weil er mein einziger Anhaltspunkt war. Eigentlich dachte ich, das ich so von dem "MsgBox" zu einer Variablen finden kann. Aber leider hab ich das nicht hinbekommen.
Tatsächlich brauche ich die MsgBox nicht. Ich brauche nur den Namen der Tabelle als Variable um sie im späteren Verlauf ansprechen zu können.
Hab lange gegoogelt. Aber leider habe ich nicht so viel gefunden das sich mit dem Namen einer intelligenten Tabelle beschäftigt.
Liebe Grüße
Steve
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Namen intelligenter Tabellen in Excel VBA verwalten


Schritt-für-Schritt-Anleitung

Um eine intelligente Tabelle in Excel VBA anzusprechen und ihren Namen zu speichern, folge diesen Schritten:

  1. Erstelle ein neues Modul in deinem VBA-Editor.

  2. Verwende den folgenden Code, um die intelligente Tabelle zu finden und ihren Namen zu speichern:

    Sub TabelleNamenSpeichern()
        Dim Blatt As String
        Dim Tabelle As String
    
        Blatt = ActiveSheet.Name
        Tabelle = Worksheets(Blatt).ListObjects(1).Name ' Angenommen, es gibt nur eine intelligente Tabelle
    
        MsgBox "Der Name der intelligenten Tabelle ist: " & Tabelle
    End Sub
  3. Führe das Makro aus und du solltest den Namen der intelligenten Tabelle in einer MsgBox sehen.


Häufige Fehler und Lösungen

  • Problem: Application.ScreenUpdating = False funktioniert nicht

    • Lösung: Stelle sicher, dass du den Befehl an der richtigen Stelle in deinem Code setzt. Oft sollte dieser Befehl am Anfang deines Makros stehen, um die Bildschirmaktualisierung zu verhindern.
  • Problem: Der Name der intelligenten Tabelle wird nicht korrekt angezeigt.

    • Lösung: Überprüfe, ob tatsächlich eine intelligente Tabelle im aktiven Blatt vorhanden ist. Möglicherweise gibt es mehrere Blätter ohne intelligente Tabellen.

Alternative Methoden

Falls du eine intelligente Tabelle in einem bestimmten Blatt suchen möchtest, kannst du die folgende Methode verwenden:

Sub IntelligenteTabelleSuchen()
    Dim ws As Worksheet
    Dim tbl As ListObject
    Dim gefunden As Boolean

    For Each ws In ThisWorkbook.Worksheets
        For Each tbl In ws.ListObjects
            MsgBox "Intelligente Tabelle gefunden in Blatt: " & ws.Name & " mit Namen: " & tbl.Name
            gefunden = True
            Exit For
        Next tbl
        If gefunden Then Exit For
    Next ws
End Sub

Diese Methode durchläuft alle Blätter und sucht nach intelligenten Tabellen.


Praktische Beispiele

Ein Beispiel, wie du die letzte Zeile einer intelligenten Tabelle ermitteln kannst:

Sub LetzteZeileErmitteln()
    Dim Tabelle As ListObject
    Dim letzteZeile As Long

    Set Tabelle = ActiveSheet.ListObjects(1) ' Angenommen, es gibt nur eine intelligente Tabelle
    letzteZeile = Tabelle.ListRows.Count ' Anzahl der Zeilen in der Tabelle

    MsgBox "Die letzte Zeile der intelligenten Tabelle ist: " & letzteZeile
End Sub

Hier wird die Anzahl der Zeilen in der intelligenten Tabelle ausgegeben.


Tipps für Profis

  • Nutze Excel Shortcuts, um schneller zwischen den Blättern und Tabellen zu navigieren.
  • Wenn du mit mehreren intelligenten Tabellen arbeitest, ist es sinnvoll, die Tabellennamen klar und eindeutig zu wählen, um Verwirrung zu vermeiden.
  • Verwende Fehlerbehandlungsroutinen, um dein VBA-Skript robuster zu machen. Dies ist besonders wichtig, wenn du mit verschiedenen Arbeitsmappen arbeitest.

FAQ: Häufige Fragen

1. Wie kann ich alle intelligenten Tabellen in einer Arbeitsmappe auflisten?
Du kannst eine Schleife über alle Blätter und deren ListObjects verwenden, um jede intelligente Tabelle aufzulisten.

2. Kann ich den Namen einer intelligenten Tabelle ändern?
Ja, du kannst den Namen einer intelligenten Tabelle direkt über den Name-Eigenschaft ändern:

Worksheets("DeinBlatt").ListObjects(1).Name = "NeuerName"

3. Was ist der Unterschied zwischen einer normalen Tabelle und einer intelligenten Tabelle?
Eine intelligente Tabelle in Excel bietet erweiterte Funktionen wie automatische Filter, Sortierung und die Möglichkeit, Daten dynamisch zu referenzieren.

4. Wie kann ich auf die letzte Zeile einer intelligenten Tabelle zugreifen?
Verwende die ListRows.Count-Eigenschaft, um die Anzahl der Zeilen in der Tabelle zu ermitteln.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige