Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA formatierte Tabellen ansprechen

VBA formatierte Tabellen ansprechen
14.02.2021 23:52:47
Arno
Hallo zusammen,
ich habe folgendes Problem:
Ich habe eine formatierte Tabelle mit dem Namen "TestTable" in einem Tabellenblatt.
Über den folgenden kleinen VBA Code kann ich die Größe dieser Tabelle abhängig von einer eingetragenen Zahl in der Zelle C4 anpassen:

Sub TableResize()
Dim blockno As Byte
blockno = Range("C4").Value
ActiveSheet.ListObjects("TestTable").Resize Range(Cells(6, 16), Cells(blockno + 6, 20))
End Sub

Jetzt muss ich allerdings dieses Tabellenblatt mehrfach kopieren und dann funktioniert dieser VBA Code bei den neuen Tabellenblättern nicht mehr (Laufzeitfehler '9': Index außerhalb des gültigen Bereichs).
Der Grund ist mir klar. Die formatierte Tabelle in dem kopierten Tabellenblatt heißt nicht mehr "TestTable" sondern wurde automatisch von Excel zu "TestTable1" / "TestTable2",... umbenannt.
Wie kann ich den VBA Code so anpassen, dass er auch bei allen kopierten Tabellenblättern funktioniert unabhängig von der Nummerierung des formatierten Tabellennamens (also "TestTable1" / "TestTable2",...)?
Folgende Ideen hatte ich, weiß jedoch nicht, wie ich sie umsetzen kann:
1) Formatierte Tabelle im Code über Teil des Tabellennamens auswählen. "TestTable" ist immer im Tabellennamen enthalten und nur die automatisch ergänzte Nummerierung von Excel macht meinen Code unbrauchbar.
2) (einzige) formatierte Tabelle in diesem Tabellenblatt auswählen unabhängig vom Namen. Anmerkung: es gibt in diesen Tabellenblättern jeweils nur eine formatierte Tabelle.
Vielen Dank schon mal im Voraus für eure Hilfe!
Arno
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: VBA formatierte Tabellen ansprechen
15.02.2021 10:42:28
Arno
Vielen Dank für deine schnelle Antwort!
Es funktioniert jetzt genau so, wie gewollt.
An der Professionalität meines Resize Befehls werde ich noch arbeiten :D
Grüße
Arno
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

VBA formatierte Tabellen ansprechen


Schritt-für-Schritt-Anleitung

Um eine formatierte Tabelle in Excel VBA anzusprechen und dynamisch anzupassen, kannst du den folgenden VBA-Code verwenden. Dieser Code ermöglicht es dir, die Größe einer Tabelle basierend auf einem Wert in einer bestimmten Zelle anzupassen. Hier ist ein einfaches Beispiel:

Sub TableResize()
    Dim blockno As Byte
    blockno = Range("C4").Value
    ActiveSheet.ListObjects(1).Resize Range(Cells(6, 16), Cells(blockno + 6, 20))
End Sub

In diesem Beispiel wird die erste formatierte Tabelle in dem aktiven Tabellenblatt angesprochen. Das bedeutet, dass du unabhängig vom Namen der Tabelle mit ListObjects(1) die erste Tabelle auswählen kannst.


Häufige Fehler und Lösungen

Laufzeitfehler '9': Index außerhalb des gültigen Bereichs

Dieser Fehler tritt auf, wenn der angegebene Tabellenname nicht existiert. Um dies zu vermeiden, kannst du die Tabelle über den Index ansprechen, wie im obigen Beispiel gezeigt. Dadurch wird der Fehler vermieden, selbst wenn die Tabelle umbenannt wurde.


Alternative Methoden

Eine weitere Möglichkeit, eine Tabelle anzusprechen, besteht darin, die Tabelle über ihren Namen zu identifizieren. Wenn du beispielsweise sicherstellen möchtest, dass nur die Tabelle mit einem bestimmten Namensbestandteil ausgewählt wird, kannst du Folgendes verwenden:

Sub SelectTableByNamePart()
    Dim tbl As ListObject
    For Each tbl In ActiveSheet.ListObjects
        If InStr(tbl.Name, "TestTable") > 0 Then
            tbl.Resize Range(Cells(6, 16), Cells(7, 20)) ' Beispiel für das Anpassen
            Exit For
        End If
    Next tbl
End Sub

Diese Methode ist besonders nützlich, wenn du mit mehreren Tabellen arbeitest und nur eine spezifische ansprechen möchtest.


Praktische Beispiele

Hier sind ein paar praktische Beispiele, wie du eine Excel-Tabelle ansprechen und anpassen kannst:

  1. Intelligente Tabelle ansprechen und Zelle ändern:
Sub ChangeCellInIntelligentTable()
    Dim tbl As ListObject
    Set tbl = ActiveSheet.ListObjects(1) ' Erste intelligente Tabelle
    tbl.ListColumns(1).DataBodyRange.Cells(1, 1).Value = "Neuer Wert"
End Sub
  1. Tabelle mit Namen ansprechen:
Sub ResizeNamedTable()
    Dim tbl As ListObject
    Set tbl = ActiveSheet.ListObjects("TestTable") ' Benannte Tabelle
    tbl.Resize Range(Cells(1, 1), Cells(10, 5))
End Sub

Tipps für Profis

  • Verwende ListObjects.Count, um die Anzahl der Tabellen im aktiven Blatt zu überprüfen, bevor du auf sie zugreifst.
  • Mit ListObjects("Name").DataBodyRange kannst du auf die Daten der Tabelle zugreifen und diese bearbeiten.
  • Experimentiere mit ListObject.Resize, um dynamische Größenanpassungen vorzunehmen, abhängig von den Daten in deinem Arbeitsblatt.

FAQ: Häufige Fragen

1. Wie spreche ich eine intelligente Tabelle in Excel VBA an?
Du kannst eine intelligente Tabelle ansprechen, indem du ActiveSheet.ListObjects("Tabellenname") verwendest oder einfach mit ActiveSheet.ListObjects(Index) arbeitest, um die Tabelle anhand ihres Index auszuwählen.

2. Was mache ich, wenn ich mehrere Tabellen mit ähnlichen Namen habe?
In diesem Fall kannst du eine Schleife verwenden, um durch alle ListObjects zu iterieren und die Tabelle zu finden, die den gewünschten Namensbestandteil enthält, wie im Beispiel "SelectTableByNamePart" gezeigt.

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