Hm...
30.08.2017 16:34:37
Michael
Hallo!
Ich mache hier offenbar etwas falsch
Naja. Zum einen hast Du Dein erstes Tabellenblatt umbenannt, da ich nicht davon ausgehe, dass dies wirklich "AUSNAHME" heißt - das ist nicht erforderlich bzw. hast Du mich/meinen Code da falsch verstanden. Es ist egal wie jenes Blatt, das übersprungen werden soll, benannt ist, und an welcher Position es sich in der Mappe befindet; wichtig ist nur, dass im Code (!) klar ist, um welches Blatt es sich handelt. D.h. hieße Dein Blatt, das übersprungen werden soll, bspw. "Lorem", dann muss im Code nur hier entsprechend angepasst werden:
Const AUSNAHME$ = "Lorem"
Was den Rest betrifft ist es so: Ich bin davon ausgegangen, dass Du einen "sauberen" Datenauszug hast - d.h. Tabellenblätter mit Rohdaten gefüllt, ohne Formatierungen oder benannte Bereiche etc. Das ist offenbar nicht der Fall, denn in Deinen relevanten Blättern sind überall benannte Bereiche definiert (Überbleibsel der Datenverbindung) - wenn sich das mit dem (formatierten) Tabellenbereich überschneidet, was hier immer der Fall sein wird, dann klappt das nicht. Dazu müsstest Du diese Bereiche zunächst in jedem relevanten Blatt löschen, bevor die formatierte Tabelle anlegst. Teste daher mal:
Sub b()
Const AUSNAHME$ = "AUSNAHME"
Dim Wb As Workbook: Set Wb = ThisWorkbook
Dim Ws As Worksheet, Qt As QueryTable
For Each Ws In Wb.Worksheets
If Ws.Name AUSNAHME Then
With Ws
For Each Qt In .QueryTables: Qt.Delete: Next Qt
.ListObjects.Add(xlSrcRange, .UsedRange, , xlYes).Name = "t_" & .Name
.ListObjects("t_" & .Name).TableStyle = "TableStyleMedium2"
End With
End If
Next Ws
Set Wb = Nothing: Set Ws = Nothing: Set Qt = Nothing
End Sub
Klappt?
LG
Michael