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

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

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

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

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

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige