Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Problem bei Spaltenerweiterung einer Tabelle
26.10.2017 10:20:11
Thorsten
Hallo liebe Forumsmitglieder,
ich hoffe ihr könnt mir bei folgendem Problem helfen.
In einem Arbeitsblatt ist ein bestimmter Bereich als Tabelle formatiert. Diese wird per VBS aus SAP befüllt und anschließend per VBA in der letzten Tabellenspalte um eine Wertangabe ergänzt. Immer bis zu der Zelle bis zu der die Tabelle vorab per VBS befüllt wurde.
Das Ganze geschieht mehrmals hintereinander. Die letzte Spalte ist also immer nur bis zu einer bestimmten Zelle befüllt, während der vorangehende Tabellenbereich schon weiter gefüllt wurde.
Momentan verwende ich für die letzte Tabellenspalte folgenden Code um die letzte Zelle zu ermitteln und den darin enthaltenen Wert bis zur letzten Zeile zu erweitern:
Range("G3").Select
Cells(Range("G3").End(xlDown).Row, 7).Select
Selection.Copy
Range(Selection, Selection.End(xlDown)).Select
ActiveSheet.Paste
Application.CutCopyMode = False
PROBLEM: Sobald das VBS die Tabelle nur um eine Zelle erweitert, erweitert der Code den Wert bis zur letzten Zeile des Arbeitsblattes, d.h. G1048576
FRAGE: Wie kann ich die letzte Tabellenspalte (G) nur bis zur der Zeile befüllen wie auch die vorangehenden Spalten gefüllt sind? D.h. wie kann der Code quasi erkennen, dass die Tabelle nur um eine Zeile erweitert wurde?
Danke für euren Input :)
Viele Grüße
Thorsten

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

Betreff
Datum
Anwender
Anzeige
AW: Problem bei Spaltenerweiterung einer Tabelle
26.10.2017 10:41:27
Luschi
Hallo Thorsten,
das geht so:

Sub TesteMal()
Dim lstObj As ListObject, sAdr As String, nCol As Long
Set lstObj = ThisWorkbook.Worksheets("Tabelle2").ListObjects("Ansetzungen")
sAdr = Split(lstObj.HeaderRowRange.Address(0, 0), ":", -1, vbTextCompare)(1)
nCol = Range(sAdr).Column
MsgBox nCol
End Sub
Wenn der Name der formatierten Tabelle (ListObject) nicht bekannt ist, dann melde Dich nochmal.
Gruß von Luschi
aus klein-Paris
AW: Problem bei Spaltenerweiterung einer Tabelle
26.10.2017 10:55:12
Thorsten
Hallo Luschi,
danke für die schnelle Antwort. Ich habe die Bezeichnung des Arbeitsblattes "Tabelle" sowie der Tabelle "Ansetzungen" in deinem Code durch meine Bezeichnungen ersetzt.
Außer der Messagebox, die mir die Spaltenangabe ausgespuckt hat habe ich aber keine Veränderung feststellen können.
Viele Grüße
Thorsten
Anzeige
AW: Problem bei Spaltenerweiterung einer Tabelle
26.10.2017 12:35:35
Luschi
Hallo Thorsten,
statt:
Cells(Range("G3").End(xlDown).Row, 7).Select
Selection.Copy
Range(Selection, Selection.End(xlDown)).Select
so:
Cells(Range("G3").End(xlDown).Row, nCol).Select
Selection.Copy
Range(Selection, nCol).Select
Denn deshalb wurde ja nCol berechnet, um den Spaltenwert festzulegen.
Gruß von Luschi
aus klein-Paris
AW: Problem bei Spaltenerweiterung einer Tabelle
26.10.2017 13:16:49
Thorsten
Hallo nochmal,
also entweder stehe ich auf dem Schlauch oder ich finde meinen Fehler nicht.
Ich verwende den Code wie von dir beschrieben, aber er springt mir immer wieder an der markierten Stelle in den Debugger.
Range("G3").Select
Cells(Range("G3").End(xlDown).Row + 1, 7).Select
Formel = "=""DE02"""
ActiveCell.FormulaLocal = Formel
Dim lstObj As ListObject, sAdr As String, nCol As Long
Set lstObj = ThisWorkbook.Worksheets("Shortage 52783218").ListObjects("Wochen52783218")
sAdr = Split(lstObj.HeaderRowRange.Address(0, 0), ":", -1, vbTextCompare)(1)
nCol = Range(sAdr).Column
MsgBox nCol
Range("G3").Select
Cells(Range("G3").End(xlDown).Row, nCol).Select
Selection.Copy
Range(Selection, nCol).Select
ActiveSheet.Paste
Application.CutCopyMode = False
Viele Grüße
Thorsten
Anzeige
AW: Problem bei Spaltenerweiterung einer Tabelle
27.10.2017 00:03:41
Luschi
Hallo Thorsten,
hier noch mal mein ganzes Makro, so wie es bei mir läuft mit ein paar Bemerkungen:

Sub test1()
Dim rg As Range, lstObj As ListObject, _
sAdr As String, Formel As String, nCol As Long
Formel = "=""DE02"""
'Set lstObj = ThisWorkbook.Worksheets("Shortage 52783218"). _
ListObjects("Wochen52783218")
Set lstObj = ThisWorkbook.Worksheets("Tabelle1"). _
ListObjects("Tabelle1")
'letzte Zelladresse als String in der Überschriften-Zeile der formatierten Tabelle
sAdr = Split(lstObj.HeaderRowRange.Address(0, 0), ":", -1, vbTextCompare)(1)
'Spaltennummer
nCol = Range(sAdr).Column
'erste leere Zelle in der letzten Spalte des Listobjects festlegen
Set rg = Cells(3, nCol).End(xlDown).Offset(1, 0)
'alle noch leeren Zellen in letzter Spalte im Listobject
'gibt es noch leere Zellen, dann erweitert der nachfolgende Teilbefehl
'Range(rg, rg.End(xlDown)) auf alle noch leere Zellen in der letzten Spalte
'des ListObjects
'gibt es keine leeren Zellen mehr, dann wird der Bereich erweitert mit zum totalen
'Spaltenende ausgeweitet
' deshalb diese nachfolgende Sicherheitsüberprüfung mit If - Then
If Range(rg, rg.End(xlDown)).Cells.Count 
Gruß von Luschi
aus klein-Paris
Anzeige

308 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige