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

Abfrage ob Tabellenobjekt besteht

Forumthread: Abfrage ob Tabellenobjekt besteht

Abfrage ob Tabellenobjekt besteht
23.03.2016 13:28:13
Marcel
Mahlzeit :)
Habe ein Makro das voll funktioniert.
Es ermittelt die Tabelle und legt eine Tabelle an.
Problem, Dateien die bereits eine Tabelle enthalten wirft er mir als Fehler aus und bricht ab...Wie kann ich hier eine Plausibilität einbauen, sodass er bei bereits bestehenden Tabellen zur nächsten Datei weiter geht?
Vielen Dank.

Sub MWMultiDateiUpdateTEST()
Dim oSourceBook As Object
Dim strPfad As String
Dim strDatei As String
Dim lngLetzteZeile As Long
Dim lngLetzteSpalte As Long
Dim BrowseDir As Variant
Dim AppShell As Object
Dim ws As Worksheet
Dim lstList As ListObject
Application.ScreenUpdating = False 'Das "Flackern" ausstellen
MsgBox "Bitte wählen Sie den Ordner aus, in dem sich die Excel-Dateien befinden."
'Schritt 1: Schleife über alle Excel Dateien in einem Verzeichnis
Set AppShell = CreateObject("Shell.Application")
Set BrowseDir = AppShell.BrowseForFolder(0, "Ordner auswählen", &H1000, 17)
On Error Resume Next
strPfad = BrowseDir.items().Item().Path
If strPfad = "" Then Exit Sub
On Error GoTo 0
strDatei = Dir(strPfad & "\*.xl*") 'Alle Excel Dateien
Do While strDatei  ""
'Schritt 2: öffnen der Datei und Datenübertragung
Set oSourceBook = Workbooks.Open(strPfad & "\" & strDatei, False, False) 'nur
lesend öffnen
'Set oSourceBook = Workbooks.Open(strPfad & strDatei)
'Änderungen durchführen
'Ermittle erste Zeile und letzte Spalte
lngLetzteZeile = Sheets(1).UsedRange.SpecialCells(xlCellTypeLastCell).Row
lngLetzteSpalte = Sheets(1).UsedRange.SpecialCells(xlCellTypeLastCell).Column
'Bereich markieren
Sheets(1).UsedRange.Select
'Schleife für Plausibilität einbauen - funktioniert NICHT
    Set ws = ActiveSheet
For Each lstList In ws.ListObjects
If lstList.Name = "Tabelle1" Then
Exit For
End If
If lstList  "Tabelle1" Then
MsgBox "Es gibt keine Liste"
Set lstList = Sheets(1).ListObjects.Add(xlSrcRange, Sheets
(1).UsedRange, , xlYes). _
Name = _
"Tabelle1"
Exit For
End If
Next
'Ab hier geht der Code wieder.

'Kommando um Tabelle aufzulösen
'Set Sheets(1).UsedRange.Select = Sheets(1).ListObjects("Tabelle1").Unlist
'Tabelle erstellen
'Set Sheets(1).UsedRange.Select = Sheets(1).ListObjects.Add(xlSrcRange, Sheets(1).UsedRange, _
_
, xlYes).Name = _
"Tabelle1"
'Unternehmensorange auf Tabelle anwenden
'Sheets(1).ListObjects("Tabelle1").TableStyle = "TableStyleMedium3"
'Spalten markieren und an Inhalt anpassen
Columns("A:A").Select
Range(Selection, Selection.End(xlToRight)).Select
Columns.EntireColumn.AutoFit
'Schritt 3: Datei speichern und wieder zu machen und nächste Schleifenrunde
Application.DisplayAlerts = False
oSourceBook.Close True 'speichern
Application.DisplayAlerts = True
'Nächste Datei
strDatei = Dir()
Loop
Application.ScreenUpdating = True 'Das Bildschirm-Aktualisieren wieder
einschalten
'Variablen aufräumen
Set oSourceBook = Nothing
MsgBox "Alle Dateien wurden erfolgreich bearbeitet."
End Sub

Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Abfrage ob Tabellenobjekt besteht
23.03.2016 14:30:57
fcs
Hallo Marcel,
man kann "einfach" prüfen ob die Anzahl der Listobjekte = 0 ist.
Select-Anweisungen kann man meist vermeiden - sie fördern auch das Bildschirmflackern und erhöhen die Makro-Laufzeit.
Eine Fehlerbehandlung sollte so aufgebaut sein, dass man Fehlerhinweise bekommt und nicht einfach Fehler ignorieren.
Gruß
Franz
https://www.herber.de/bbs/user/104563.txt
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Abfrage ob Tabellenobjekt besteht


Schritt-für-Schritt-Anleitung

  1. Makro öffnen: Öffne deine Excel-Datei und öffne den VBA-Editor (Alt + F11).

  2. Neues Modul erstellen: Klicke mit der rechten Maustaste auf "VBAProject (deine Datei)" und wähle "Einfügen" > "Modul".

  3. Code einfügen: Kopiere den folgenden VBA-Code in das neue Modul:

    Sub MWMultiDateiUpdateTEST()
        Dim oSourceBook As Object
        Dim strPfad As String
        Dim strDatei As String
        Dim lngLetzteZeile As Long
        Dim lngLetzteSpalte As Long
        Dim BrowseDir As Variant
        Dim AppShell As Object
        Dim ws As Worksheet
        Dim lstList As ListObject
        Application.ScreenUpdating = False
    
        MsgBox "Bitte wählen Sie den Ordner aus, in dem sich die Excel-Dateien befinden."
    
        Set AppShell = CreateObject("Shell.Application")
        Set BrowseDir = AppShell.BrowseForFolder(0, "Ordner auswählen", &H1000, 17)
        strPfad = BrowseDir.items().Item().Path
        If strPfad = "" Then Exit Sub
    
        strDatei = Dir(strPfad & "\*.xl*")
    
        Do While strDatei <> ""
            Set oSourceBook = Workbooks.Open(strPfad & "\" & strDatei, False, False)
            Set ws = oSourceBook.Sheets(1)
    
            ' Plausibilitätsprüfung
            If ws.ListObjects.Count = 0 Then
                Set lstList = ws.ListObjects.Add(xlSrcRange, ws.UsedRange, , xlYes)
                lstList.Name = "Tabelle1"
            End If
    
            oSourceBook.Close True
            strDatei = Dir()
        Loop
    
        Application.ScreenUpdating = True
        MsgBox "Alle Dateien wurden erfolgreich bearbeitet."
    End Sub
  4. Code anpassen: Stelle sicher, dass der Code an deine Bedürfnisse angepasst wird, insbesondere den Namen der Tabelle.

  5. Makro ausführen: Führe das Makro aus, um die Abfrage zu starten.


Häufige Fehler und Lösungen

  • Fehler: "Komponente kann nicht gefunden werden": Stelle sicher, dass alle Referenzen im VBA-Editor aktiv sind. Überprüfe die "Extras" > "Referenzen".

  • Fehler: "Liste kann nicht erstellt werden": Dieser Fehler tritt auf, wenn bereits eine Liste mit dem gleichen Namen existiert. Verwende die Plausibilitätsprüfung, um dies zu vermeiden.


Alternative Methoden

Eine alternative Methode zur Überprüfung, ob eine Tabelle existiert, ist die Verwendung von Excel-Formeln. Du kannst die Formel =ISTFEHLER(SVERWEIS("Tabelle1"; Tabelle1[#Alle]; 1; FALSCH)) verwenden, um zu prüfen, ob eine Tabelle existiert, bevor du ein Makro ausführst.


Praktische Beispiele

Hier ist ein einfaches Beispiel, wie du das Makro nutzen kannst:

  1. Erstelle einen Ordner mit mehreren Excel-Dateien, von denen einige bereits eine Tabelle namens "Tabelle1" enthalten.
  2. Starte das Makro und beobachte, wie es die vorhandenen Tabellen erkennt und nur neue Tabellen erstellt, wenn keine vorhanden sind.

Tipps für Profis

  • Vermeide Select und Activate: Diese Befehle können die Laufzeit deines Makros erheblich verlangsamen. Arbeite direkt mit Objekten.
  • Fehlerbehandlung: Implementiere eine Fehlerbehandlungsroutine, um klare Rückmeldungen über aufgetretene Fehler zu erhalten.

FAQ: Häufige Fragen

1. Wie kann ich mein Makro schneller machen?
Vermeide die Verwendung von Select und arbeite direkt mit Objekten, um die Ausführung zu beschleunigen.

2. Was tun, wenn ich mehrere Tabellen habe?
Passe den Code an, um die Namen der Tabellen dynamisch zu ändern oder verwende eine Schleife, um alle vorhandenen Tabellen zu überprüfen.

3. Kann ich das Makro für andere Excel-Versionen verwenden?
Ja, das Makro sollte in den meisten Versionen von Excel ab 2010 funktionieren, solange die VBA-Umgebung verfügbar ist.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige