Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Automatisierte Namens Abfrage eines ListObjects

Betrifft: Automatisierte Namens Abfrage eines ListObjects von: Sebastian
Geschrieben am: 14.10.2014 16:15:27

Hallo zusammen!

Meine Forensuche war leider recht erfolglos, darum hoffe ich nun hier auf kompetente Hilfe.

Zu meinem Problem: Ich habe ein Makro geschrieben welches innerhalb der Arbeitsmappe ein _ Arbeitsblatt kopiert und dieses anschließend bearbeiten soll. Die Tabelle, wie sie auf dem Ausgangs-Arbeitsblatt bereits formatiert ist soll um 3 Spalten erweitert werden. Hierzu bietet sich nach meiner Recherche folgender Code an:


Worksheets("Test").ListObjects("Tabelle123").Resize Range("$B$3:$M$231")

Allerdings scheitert es aktuell an dem Name des ListObjects (Tabelle123). Bei jeder Aktualisierung des Arbeitsblattes (löschen des vorhandenen und erneut kopieren) wird der Name geändert.

Zur Frage: Gibt es eine möglichkeit automatisiert den Namen entweder:
-abzufragen (es gibt lediglich ein LostObject)
-beim Kopieren festzulegen oder
-das Problem eleganter zu lösen?

Beste Grüße und vorab shconmal vielen Dank!
Sebastian

  

Betrifft: AW: Automatisierte Namens Abfrage eines ListObjects von: Luschi
Geschrieben am: 14.10.2014 18:46:46

Hallo Sebastian

mach es so:


Sub testListObjekt()
    Dim lstObj As ListObject
    
    On Error Resume Next
       Set lstObj = Worksheets("Test").ListObjects(1)
    On Error GoTo 0
    
    If lstObj Is Nothing Then
       MsgBox "kein ListObjekt gefunden!", 16
       Exit Sub
    End If
    
    MsgBox "juchhu - Name des ListObjekts: " & lstObj.Name, 48
    'usw.
End Sub
Gruß von Luschi
aus klein-Paris


  

Betrifft: AW: Automatisierte Namens Abfrage eines ListObjects von: Sebastian
Geschrieben am: 15.10.2014 09:57:27

Servus Luschi,

es funktioniert, vielen Dank!

Jedoch hätte ich noch eine kleine Frage:
Was wird in dem folgenden Block gemacht?

On Error Resume Next
       Set lstObj = Worksheets("Test").ListObjects(1)
    On Error GoTo 0
Hier wird salop formuliert doch nichts anderes genacht als eine Schleife mit aufsteigender ID des ListObjects bis das erste "fehlerfreie" - sprich existende gefunden wird, oder?

Ach und welche Funktion haben die Zahlen 16 und 48 am Ende der MsgBox?

Beste Grüße,
Sebastian


  

Betrifft: AW: Automatisierte Namens Abfrage eines ListObjects von: Luschi
Geschrieben am: 15.10.2014 15:40:12

Hallo Sebastian,

mit dem Befehl 'Set lstObj = Worksheets("Test").ListObjects(1)' wird das erste existierende/erzeugte ListObject einer Objekt-Variablen zugewiesen. Das klappt aber nur, wenn es auch wirklich mindestens 1 Listobjekt gibt. Gibt es keins, dann würde dieser Befehl einen Vba-Fehler erzeugen.
Um das zu verhindert, verwendet man den darüberliegenden Befehl 'On Error Resume Next'. Dann verweist die Variable aber nicht auf das vorhandene Listobjekt, sondern besitzt den undefinierten Zustand 'Nothing', was man übersetzen könnte mit 'Leider nicht vorhanden'.
Gibt es mehr als 1 Listobjekt, dann werden diese durch Vba intern durchnummeriert durch einen Index entsprechend der Entstehungsreihenfolge beginnend bei 1. Andere Auflistungen können auch bei 0 anfangen.

Gruß von Luschi
aus klein-Paris


  

Betrifft: AW: Automatisierte Namens Abfrage eines ListObjects von: Sebastian
Geschrieben am: 15.10.2014 16:36:45

Hallo Luschi,

danke für diese ausführliche und aufklärende Antwort! Damit kann ich arbeiten.

Besten Gruß,
Sebsatian


 

Beiträge aus den Excel-Beispielen zum Thema "Automatisierte Namens Abfrage eines ListObjects"