Prüfen ob Tabelle vorhand und vor Schließen in Bereich konvertieren
#1
Moin,

ich finde leider entweder nur Lösungen mit Bezug zu Datenbanken oder einfach keine für meinen Fall passende Alternative.

Mein Problem: Ich habe im Tabellenblatt "Daten1" von G71:O96 Datensätze und von G94:O109 ebenfalls, die ich später als Tabelle formatiere.
Gewisse Tools kann ich leider nicht ausführen, wenn ich diese vorher als Tabelle formatiere. Also mache ich dies per Makro nachdem ich das Tool ausgeführt habe, somit habe ich einmal Tabelle "Liste" und einmal die Tabelle "Luft".

Wenn nun jemand die Datei öffnet und die unformatierten Datensätze per Makro in Tabellen umwandelt, soll dies aber auf gar keinen Fall so abgespeichert werden. Also habe ich folgendes mit eingebaut, das die Tabellen wieder in Bereich konvertieren sollte.. Das funktioniert aber nicht ganz so wie gedacht, deswegen bräuchte ich dort hilfe:

Code:
Sub Workbook_BeforeClose(Cancel As Boolean)
'1. Versuch
    Dim td As DAO.TableDef, log1 As Boolean

    For Each td In CurrentDb.TableDefs
        If td.Name = "Liste" Then
            ActiveSheet.ListObjects("Liste").Unlist
        End If
        If td.Name = "Luft" Then
            ActiveSheet.ListObjects("Luft").Unlist
        End If
   
'2. Versuch
    'Dim tbl As TableDef

    'For Each tbl In CurrentDB.TableDefs
    'If tbl.Name = "Liste" Then
    'ActiveSheet.ListObjects("Liste").Unlist
    'End If
    'If tbl.Name = "Luft" Then
    'ActiveSheet.ListObjects("Luft").Unlist
    'End If
   
    'Sheets("Daten1").Select
    'Range("G71").Select
    'If TableExists("Liste") Then
    'ActiveSheet.ListObjects("Liste").Unlist
    'End If
   
    'Range("G94").Select
    'If TableExists("Luft") Then
    'ActiveSheet.ListObjects("Luft").Unlist
    'End If
End Sub

Ich hatte es anfangs nur mit:
Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    'Sheets("Daten1").Select
    'ActiveSheet.ListObjects("Liste").Unlist
   
    'ActiveSheet.ListObjects("Luft").Unlist
End Sub
probiert.
Hat natürlich Fehlermeldungen gegeben, da die Tabellen ja auch nicht zwingend immer vorhanden waren, wenn der Nutzer das Makro nicht ausgeführt hat, weil er es nicht brauchte. Also wollte ich eine IF Funktion einbauen, die logischerweise nur dann die Liste in Bereiche konvertiert, wenn die Liste mit dem Namen auch vorhanden ist...

Kann mir wer helfen?

Grüße
Zantana
Top
#2
Hallo, :19:

prinzipiell so: :21:

Tabellen - ListObjects vorhanden - prüfen...
Top
#3
Hallo,

Vielen Dank für diese Seite! :100: Ich habe folgenden Code für mich angewandt:

Code:
Sub Main_1()
    ' Wenn die "Tabelle" Table123 im Sheet1 vorhanden ist dann...
    If fncListObjects("Liste", "Daten1") = True Then
        Sheets("Daten1").Select
        Range("G71").Select
        ActiveSheet.ListObjects("Liste").Unlist
    End If
    If fncListObjects("Luft", "Daten1") = True Then
        Sheets("Daten1").Select
        Range("G94").Select
        ActiveSheet.ListObjects("Luft").Unlist
    End If
End Sub

Theoretisch ist nun mein Problem behoben, jedoch verstehe ich nicht, wieso die Tabellen nicht in Bereiche konvertiert werden. Wenn die Tabellen erstellt sind, kann ich das Programm schließen und nach dem erneuten Öffnen, sind diese noch als Tabellen formatiert. Führe ich nun mein Tool aus, gibt dieses keine Fehlermeldung mehr an, obwohl ich Tabellen in der Datei habe. Ich würde das gerne nachvollziehen können. Jemand eine Erklärung dafür?

Grüße
Zantana
Top
#4
Hallo, :19:

vermeide - wenn möglich "ActiveSheet" und "Select/Activate"!

Schreibe es so: :21:

Code:
Option Explicit
Public Sub Main()
    If fncListObjects("Liste", "Daten1") = True Then
        With ThisWorkbook.Worksheets("Daten1").ListObjects("Liste")
            .TableStyle = ""
            .Unlist
        End With
    End If
End Sub

Die Funktionen zum prüfen natürlich noch dazu!

.TableStyle = ""  nimmt erstmal die Farben/Formate weg. :21:
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste