Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1508to1512
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

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

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
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

67 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige