Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: mit VBA intelligente Tabelle ansprechen

mit VBA intelligente Tabelle ansprechen
29.08.2016 14:38:54
Enno
Hallo Forumler,
ich beginne gerade mir ein paar VBA-Kenntnisse anzueignen, um mir das Leben mit Excel zu vereinfachen. Ein paar Dinge klappen auch schon, wobei mir sicherlich auch Grundlagenwissen fehlt.
Problem:
Ich habe eine intelligente Tabelle erstellt und möchte diese per VBA ansprechen und in ein neues Tabellenblatt kopieren.
Die Ausgangstabelle heißt "Wg_Umlauf" und befindet sich in einem eigenen Tabellenblatt. Die Überschrift steht in der Zeile 11, es werden die Spalten A bis AV benötigt. In dieser Tabelle werden Daten aus einer Datenbank eingelesen (wird schon per Makro ausgeführt :-)) - daher ändert sich auch die Anzahl der Zeilen innerhalb dieser Tabelle.
Im Internet, aber auch in einem Excelbuch finde ich leider nur Hinweise, wie man ein ganzes Tabellenblatt kopieren kann, aber nichts wie ich eine solche Tabelle ansprechen kann. Ich möchte auch gern per VBA alle Daten in bestimmten Spalten löschen (Spalte "Korrektur Datum" und "Werkstattzeit").
Könnt Ihr mir bitte helfen?
Vielen Dank schon mal im Voraus
Dort leider weiß ich nicht, wie ich diese Tabelle ansprechen kann
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: mit VBA intelligente Tabelle ansprechen
30.08.2016 00:55:06
fcs
Hallo Enno,
das kopieren der Tabelle / des ListObjects kannst du wie folgt umsetzen.
Gruß
Franz
Sub prcGet_Data_from_Text_File()
Dim wksZiel As Worksheet
Dim varText, wkbText As Workbook, wksText As Worksheet
varText = Application.GetOpenFilename("Textfile (*.txt),*.txt", _
Title:="Bitte zu importierende Textdatei auswählen", _
MultiSelect:=False)
If varText = False Then Exit Sub
Set wksZiel = ActiveSheet
Application.ScreenUpdating = False
Application.Workbooks.OpenText Filename:=varText, _
Startrow:=1, _
DataType:=xlDelimited, _
Tab:=False, Semicolon:=True, Comma:=False, Space:=False, Other:=False, _
local:=True
Set wkbText = Application.Workbooks(Mid(varText, InStrRev(varText, "\") + 1))
Set wksText = wkbText.Sheets(1)
wksZiel.Range("A3:AD100").ClearContents
With wksText
.Range(.Cells(1, 1), .Cells(.UsedRange.Row + .UsedRange.Rows.Count - 1, 30)).Copy
End With
wksZiel.Range("A3").PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
wkbText.Close savechanges:=False
Range("A3").Select
Application.ScreenUpdating = True
End Sub
Sub prcCopy_ListObject()
Dim objList As ListObject
Dim wksNeu As Worksheet, rngZiel As Range
'ListObject setzen und neues Tabellenblatt anlegen
With ActiveWorkbook
Set objList = .Worksheets(2).ListObjects(1)
'oder auch
Set objList = .Worksheets("Tabelle2").ListObjects("Wg_Umlauf")
Set wksNeu = .Worksheets.Add(After:=objList.Parent)
Set rngZiel = wksNeu.Range("A3") 'Zelle ab der Tabelle/ListObject eingefügt werden soll
End With
'Datenbereich des ListObjects koperen
With objList.Range
.Copy
rngZiel.PasteSpecial Paste:=xlPasteColumnWidths
.Application.CutCopyMode = False
.Copy Destination:=rngZiel
.Application.CutCopyMode = False
End With
'Blatt umbenennen und ListObject neu setzen
With wksNeu
.Name = "Copy WgUmlauf"
Set objList = .ListObjects(1)
objList.Name = "WgUmlauf_Neu"
End With
'Einzelne Spalten löschen
Set rngZiel = objList.Range.Rows(1).Find(what:="Korrektur Datum", LookIn:=xlValues, _
lookat:=xlWhole)
If Not rngZiel Is Nothing Then
rngZiel.EntireColumn.Delete
End If
Set rngZiel = objList.Range.Rows(1).Find(what:="Werkstattzeit", LookIn:=xlValues, _
lookat:=xlWhole)
If Not rngZiel Is Nothing Then
rngZiel.EntireColumn.Delete
End If
End Sub

Anzeige
Korrektur-mit VBA intelligente Tabelle ansprechen
30.08.2016 00:59:25
fcs
Hallo Enno,
da ist mir versehentlich ein 2. Makro in die 1. Antwort gerutscht.
Gruß
Franz
Sub prcCopy_ListObject()
Dim objList As ListObject
Dim wksNeu As Worksheet, rngZiel As Range
'ListObject setzen und neues Tabellenblatt anlegen
With ActiveWorkbook
Set objList = .Worksheets(2).ListObjects(1)
'oder auch
Set objList = .Worksheets("Tabelle2").ListObjects("Wg_Umlauf")
Set wksNeu = .Worksheets.Add(After:=objList.Parent)
Set rngZiel = wksNeu.Range("A3") 'Zelle ab der Tabelle/ListObject eingefügt werden soll
End With
'Datenbereich des ListObjects koperen
With objList.Range
.Copy
rngZiel.PasteSpecial Paste:=xlPasteColumnWidths
.Application.CutCopyMode = False
.Copy Destination:=rngZiel
.Application.CutCopyMode = False
End With
'Blatt umbenennen und ListObject neu setzen
With wksNeu
.Name = "Copy WgUmlauf"
Set objList = .ListObjects(1)
objList.Name = "WgUmlauf_Neu"
End With
'Einzelne Spalten löschen
Set rngZiel = objList.Range.Rows(1).Find(what:="Korrektur Datum", LookIn:=xlValues, _
lookat:=xlWhole)
If Not rngZiel Is Nothing Then
rngZiel.EntireColumn.Delete
End If
Set rngZiel = objList.Range.Rows(1).Find(what:="Werkstattzeit", LookIn:=xlValues, _
lookat:=xlWhole)
If Not rngZiel Is Nothing Then
rngZiel.EntireColumn.Delete
End If
End Sub

Anzeige
AW: Korrektur-mit VBA intelligente Tabelle ansprechen
30.08.2016 11:10:01
Enno
Hallo Franz,
vielen Dank für die tolle Hilfe. Das Kopieren der Tabelle klappt einwandfrei. Ich habe noch ein paar Dinge angepasst und das neue Tabellenblatt wird als letztes Blatt eingefügt, etc.
Das Löschen der Spalten funktioniert auch, leider habe ich mich da etwas falsch ausgedrückt. Es sollen nur eventuell eingetragene Werte gelöscht werden, die Spalten ansich müssen erhalten bleiben. Kannst Du mir da noch einmal helfen?
Vielen Dank
Enno
Anzeige
AW: Korrektur-mit VBA intelligente Tabelle ansprechen
30.08.2016 18:42:05
fcs
Hallo Enno,
wenn nur die Daten in den betreffenden Spalten gelöscht werden sollen, dann ändert sich das Makro wie folgt.
Gruß
Frant
Sub prcCopy_ListObject()
Dim objList As ListObject
Dim wksNeu As Worksheet, rngZiel As Range
'ListObject setzen und neues Tabellenblatt anlegen
With ActiveWorkbook
Set objList = .Worksheets(2).ListObjects(1)
'oder auch
Set objList = .Worksheets("Tabelle2").ListObjects("Wg_Umlauf")
Set wksNeu = .Worksheets.Add(after:=.Sheets(.Sheets.Count))
Set rngZiel = wksNeu.Range("A3") 'Zelle ab der Tabelle/ListObject eingefügt werden soll
End With
'Datenbereich des ListObjects koperen
With objList.Range
.Copy
rngZiel.PasteSpecial Paste:=xlPasteColumnWidths
.Application.CutCopyMode = False
.Copy Destination:=rngZiel
.Application.CutCopyMode = False
End With
'Blatt umbenennen und ListObject neu setzen
With wksNeu
.Name = "Copy WgUmlauf"
Set objList = .ListObjects(1)
objList.Name = "WgUmlauf_Neu"
End With
'Inhalt einzelner Spalten der Tabelle löschen
'Spaltentitel suchen
Set rngZiel = objList.Range.Rows(1).Find(what:="Korrektur Datum", LookIn:=xlValues, _
lookat:=xlWhole)
'Daten in Spalte löschen
If Not rngZiel Is Nothing Then
wksNeu.Range(objList.Name & "[Korrektur Datum]").ClearContents
End If
Set rngZiel = objList.Range.Rows(1).Find(what:="Werkstattzeit", LookIn:=xlValues, _
lookat:=xlWhole)
If Not rngZiel Is Nothing Then
wksNeu.Range(objList.Name & "[Werkstattzeit]").ClearContents
End If
End Sub

Anzeige
AW: Korrektur-mit VBA intelligente Tabelle ansprechen
02.09.2016 13:25:40
Enno
Hallo Franz,
leider komme ich erst heute dazu, an meinem Projekt weiterzuarbeiten. Ich habe Deine Änderungen übernommen und das Makro liefert das gewünschte Resultat. Vielen Dank für die Unterstützung.
Mit freundlichen Grüßen
Enno
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Mit VBA intelligente Tabellen in Excel ansprechen


Schritt-für-Schritt-Anleitung

  1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Modul einfügen: Gehe zu Einfügen > Modul, um ein neues Modul zu erstellen.
  3. Makro eingeben: Kopiere den folgenden Code in das Modul, um eine intelligente Tabelle anzusprechen:
Sub prcCopy_ListObject()
    Dim objList As ListObject
    Dim wksNeu As Worksheet, rngZiel As Range

    ' ListObject setzen und neues Tabellenblatt anlegen
    With ActiveWorkbook
        Set objList = .Worksheets("Tabelle2").ListObjects("Wg_Umlauf")
        Set wksNeu = .Worksheets.Add(After:=objList.Parent)
        Set rngZiel = wksNeu.Range("A3") ' Zelle ab der Tabelle/ListObject eingefügt werden soll
    End With

    ' Datenbereich des ListObjects kopieren
    With objList.Range
        .Copy
        rngZiel.PasteSpecial Paste:=xlPasteColumnWidths
        .Copy Destination:=rngZiel
    End With

    ' Blatt umbenennen
    With wksNeu
        .Name = "Copy WgUmlauf"
    End With

    ' Inhalte in bestimmten Spalten löschen
    wksNeu.Range(objList.Name & "[Korrektur Datum]").ClearContents
    wksNeu.Range(objList.Name & "[Werkstattzeit]").ClearContents
End Sub
  1. Makro ausführen: Schließe den VBA-Editor und führe das Makro über Entwicklertools > Makros aus.

Häufige Fehler und Lösungen

  • Fehler: "Run-time error 9 - Subscript out of range"

    • Lösung: Stelle sicher, dass der Tabellenblattname ("Tabelle2") korrekt ist und die intelligente Tabelle ("Wg_Umlauf") existiert.
  • Fehler: "Method 'Range' of object 'Worksheet' failed"

    • Lösung: Überprüfe, ob die Spaltenüberschriften "Korrektur Datum" und "Werkstattzeit" exakt mit den im Code angegebenen übereinstimmen.

Alternative Methoden

Wenn Du eine intelligente Tabelle nicht direkt ansprechen möchtest, kannst Du auch die gesamte Tabelle kopieren und anschließend die Daten in den Zellen löschen:

Sub CopyAndClear()
    Dim sourceSheet As Worksheet
    Dim destSheet As Worksheet

    Set sourceSheet = ThisWorkbook.Sheets("Tabelle2")
    Set destSheet = ThisWorkbook.Sheets.Add

    sourceSheet.ListObjects("Wg_Umlauf").Range.Copy destSheet.Range("A1")

    ' Daten in bestimmten Spalten löschen
    destSheet.Range("Korrektur Datum").ClearContents
    destSheet.Range("Werkstattzeit").ClearContents
End Sub

Praktische Beispiele

  1. Intelligente Tabelle ansprechen und kopieren: Mit dem oben genannten Code kannst Du Daten aus einer intelligenten Tabelle in ein neues Blatt kopieren.
  2. Spalteninhalte löschen: Anpassen des Codes, um nur die Inhalte in den Spalten "Korrektur Datum" und "Werkstattzeit" zu löschen, während die Spalten selbst erhalten bleiben.

Tipps für Profis

  • Verwende benannte Bereiche: Nutze Range("Name"), um auf bestimmte Zellen zuzugreifen. Dies kann die Lesbarkeit und Wartbarkeit des Codes erhöhen.
  • Dynamische Tabellen: Wenn die Anzahl der Zeilen in der intelligenten Tabelle variiert, kannst Du die UsedRange-Eigenschaft verwenden, um den Bereich dynamisch anzupassen.
  • Fehlerbehandlung: Implementiere eine Fehlerbehandlung mit On Error Resume Next, um unerwartete Fehler elegant zu handhaben.

FAQ: Häufige Fragen

1. Wie kann ich eine intelligente Tabelle in Excel VBA erstellen?
Du kannst eine intelligente Tabelle mit folgendem Code erstellen:

Sub CreateIntelligentTable()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets.Add
    ws.ListObjects.Add(xlSrcRange, ws.Range("A1:D10"), , xlYes).Name = "NeueTabelle"
End Sub

2. Wie lösche ich eine intelligente Tabelle in Excel?
Verwende den folgenden Code, um eine intelligente Tabelle zu löschen:

Sub DeleteIntelligentTable()
    ThisWorkbook.Worksheets("Tabelle2").ListObjects("Wg_Umlauf").Delete
End Sub

Durch die Verwendung dieser Techniken kannst Du die intelligente Tabelle in Excel effektiv ansprechen und verwalten.

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