Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1960to1964
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

Spalte in intelligenter Tabelle hinzufügen!

Spalte in intelligenter Tabelle hinzufügen!
04.02.2024 09:54:30
Stefan
Hallo zusammen,

mal wieder muss ich die VBA Community um Hilfe bemühen.

Ich habe eine intelligente Tabelle mit dem Namen Preistabelle_Rohmaterial. In der ersten Spalte der Tabelle steht das "Preisdatum".
Immer wenn sich der Preis ändert, schreibt man hier das Datum und denn neuen Preis in Spalte 2 oder 3....

Was jetzt passieren soll:
Wenn ich in der Preistabelle_Rohmaterial eine neue Zeile (ein neues Datum) einfüge, dann soll sich automatisch eine andere intelligente Tabelle (Name der Tabelle: "Rohmaterial") um eine Spalte erweitern und das Datum welches in die Tabelle Preistabelle_Rohmaterial eingefügt wurde in die Kopzeile der Spalte eingetragen werden.
Die Spalte soll immer am Ende der Tabelle ("Rohmaterial") hinzugefügt werden. Alle Formeln die sich in den Zellen, der vorhergehenden Spalte befinden, sollten dann automatisch in die neue Spalte übernommen werden.

Sollte nun eine Zeile (ein Datum) aus der Tabelle "Preistabelle_Rohmaterial" gelöscht werden, dann sollte auch die entsprechende Spalte aus der Tabelle "Rohmaterial" entfernt werden.

Gibt es dazu eine Möglichkeit oder eine einfachere Lösung.

Hintergrund ist folgender: in der ersten Tabelle befinden sich reine Einkaufspreise in unterschiedlichen Mengeneinheiten, in der zweiten Tabelle werden die Mengeneinheiten dann in ein einheitliches Format umgewandelt um damit dann weiterzurechnen. Das Datum wird in späteren Rechnungen dazu genutzt um eine Zeitabhängigkeit in der Berechnung dar zu stellen.

Falls es jemanden gibt, der hier Hilfe leisten kann, würde ich mich sehr freuen.

Vielen lieben Dank und einen schönen Sonntag!

Viele Grüße
Stefan



22
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Spalte in intelligenter Tabelle hinzufügen!
04.02.2024 10:28:50
Oberschlumpf
Hi Stefan,

so viel Text, so viel beschriebene Abhängigkeiten - aber leider keine Bsp-Datei mit allem, was erforderlich ist.
Und wie sollen wir nun helfen?

Mit VBA, denk ich, sollte all das kein Problem sein...aber um mit VBA eine Lösung zu erarbeiten, benötigt man Testmaterial...na ja, zumindest ich benötige was zum Testen, da ich es nicht schaffe, einfach auswendig einen VBA-Code zu erstellen.

Nun denn, vllt schafft das ja jemand anderes, oder vielleicht....?

Ciao
Thorsten
AW: Spalte in intelligenter Tabelle hinzufügen!
04.02.2024 11:03:27
Stefan
Hallo Thorsten,

ich hoffe ich hab das richtig gemacht, hab aber hier die Datei hochgeladen, das ist der Link dazu.
https://www.herber.de/bbs/user/166761.xlsx

Das Beispiel ist relativ nahe an der Realität, nur das ein paar viele Zeilen und spalten fehlen :)

Gruß
Stefan
Anzeige
AW: Spalte in intelligenter Tabelle hinzufügen!
04.02.2024 11:28:24
Beverly
Hi Stefan,

verstehe ich das richtig, dass beim Löschen in Tabelle "Preistabelle_Rohmaterial" nur das Datum entfernt und nicht die gesamte Zeile gelöscht wird? Dann könntest du es vielleicht so versuchen:

Option Explicit

Dim lngDate As Long

Private Sub Worksheet_Change(ByVal Target As Range)
Dim intSpalte As Long
Dim varDatum As Variant
If Not Intersect(Target.Cells(1), ActiveSheet.ListObjects("Preistabelle_Rohmaterial").DataBodyRange.Columns(1)) Is Nothing Then
If Target.Cells(1) = "" Then
With ActiveSheet.ListObjects("Rohmaterial")
For intSpalte = .ListColumns.Count To 7 Step -1
If CDate(.HeaderRowRange.Cells(intSpalte)) = CDate(lngDate) Then
.ListColumns(intSpalte).Delete
Exit Sub
End If
Next intSpalte
End With
Else
With ActiveSheet.ListObjects("Rohmaterial")
.ListColumns.Add Position:=.ListColumns.Count + 1
.HeaderRowRange.Cells(.HeaderRowRange.Cells.Count) = Target.Cells(1)
Exit Sub
End With
End If
End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target.Cells(1), ActiveSheet.ListObjects("Preistabelle_Rohmaterial").DataBodyRange.Columns(1)) Is Nothing Then
lngDate = Target.Cells(1)
End If
End Sub


Code gehört ins Codemodul des Tabellenblattes. Beachte auch, des darf immer nur 1 Zelle in Tabelle "Preistabelle_Rohmaterial" geleert werden, nicht mehrere gleichzeitig.

Bis später
Karin

Link zur Homepage: https://excel-inn.de/
Anzeige
AW: Spalte in intelligenter Tabelle hinzufügen!
04.02.2024 12:52:25
Stefan
Hallo Karin,

Vielen, vielen lieben Dank!
Genau in diese Richtung soll es gehen und so funktioniert es tatsächlich auch schon nahezu perfekt.
Drei Probleme habe ich damit noch:

a) Ja es wird das Datum gelöscht, es wäre aber auch schön wenn es auch funktionieren würde sobald die gesamte Zeile gelöscht wird. (ist aber auch nicht schlimm, falls das ein erheblicher Mehraufwand wäre.) Nice to have aber nicht notwendig.

b) Falls es das Datum in der untenstehenden Tabelle schon gibt, soll es kein zweites mal eingefügt werden. In Tabelle Preistabelle_Rohmaterial wird es jedes Datum nur genau einmal geben, dass sollte unten dann auch so sein. - d.h. es sollte irgendwie noch eine Prüfung im Code sein.

c) Was auch noch passieren sollte in der Tabelle Rohmaterial ist, dass die Formeln, die in der vorhergehenden Spalte vorhanden sind auch mit übernommen werden. Aktuell wird die Spalte eingefügt, das Datum in die Kopfzeile geschrieben, aber die Formeln die in den Zeilen der Tabelle sind, nicht mit übernommen.

Ich hoffe ich verwirre dich nicht nur.

Viele Grüße
Stefan
Anzeige
AW: Spalte in intelligenter Tabelle hinzufügen!
04.02.2024 16:18:17
Beverly
Hi Stefan,

zu b) und c) - ändere den Code:

            With ActiveSheet.ListObjects("Rohmaterial")

varDatum = Application.Match(Target.Cells(1), .HeaderRowRange, 0)
If IsError(varDatum) Then
Dim varStart As Variant '== diese Zeile kann an den Anfang der Prozedur verschoben werden
.ListColumns.Add Position:=.ListColumns.Count + 1
.HeaderRowRange.Cells(.HeaderRowRange.Cells.Count) = Target.Cells(1)
varStart = .HeaderRowRange.Cells(.HeaderRowRange.Cells.Count - 1)
.DataBodyRange.Columns(.DataBodyRange.Columns.Count - 1).AutoFill _
Destination:=Range("Rohmaterial[[" & varStart & "]:[" & Target.Cells(1) & "]]"), Type:=xlFillDefault
Exit Sub
End If
End With


Bis später
Karin

Link zur Homepage: https://excel-inn.de/
Anzeige
AW: Spalte in intelligenter Tabelle hinzufügen!
04.02.2024 19:39:29
Stefan
Hi Karin,

du bist meine Rettung das funktioniert echt schonn super.

Ich hätte noch eine Bitte: Ich habe noch eine zusätzliche Tabelle, die "Preis_final" heißt. Diese befindet sich ebenfalls im gleichen Tabellenblatt. Ich möchte diese auch genau nach dem gleichen Schema erweitern. Heißt, wenn die Datumseingabe in Preistabelle_Rohmaterial kommt soll neben der Spalte in der Tabelle Rohmaterial auch eine Spalte in der Tabelle "Preis_final" hinzugefügt werden. (Alle anderen Funktionen identisch, also mit löschen usw.) Es soll quasi exakt das gleiche passieren wie in der Rohmaterialtabelle.

Ich hab schon ein bisschen gedoktert aber ich bin einfach in vba ein nichtsnutz :)

Ich weiß echt nicht wie ich dir danken soll.

Gruß
Stefan
Anzeige
AW: Spalte in intelligenter Tabelle hinzufügen!
04.02.2024 21:42:58
Beverly
Hi Stefan,

du musst im If-Teil den gesamten Code, der mit der Zeile With ActiveSheet.ListObjects("Rohmaterial") beginnt und mit der Zeile End With endet, kopieren und direkt unter End With einfügen, sodass er doppelt vorhanden ist und dann in der Kopie anstelle "Rohmaterial" schreiben "Preis_final". Außerdem musst du bei der Schleife For intSpalte = .ListColumns.Count To 7 Step -1 die 7 durch die Spaltennummer der intelligenten Tabelle "Preis_final" ersetzen, in der das 1. Datum als Überschrift erscheinen darf - aber logischerweise nur dann wenn es nicht Spalte 7 ist. Das selbe wiederholst du für den Else-Teil. Beachte, dass du hierbei Rohmaterial an zwei Stellen ersetzen musst: nämlich 1. in der Zeile With ActiveSheet... als auch 2. in der Zeile .DataBodyRange.Columns(..., und zwar im umgebrochenen Teil der Zeile bei Destination:=Range("Rohmaterial[[" .

Bis später
Karin

Link zur Homepage: https://excel-inn.de/
Anzeige
AW: Spalte in intelligenter Tabelle hinzufügen!
06.02.2024 06:36:09
Stefan
Hallo Karin,

ich habe das jetzt mal wie nachfolgend angepasst. Der Code läuft durch, es gibt auch keine Fehlermeldung. Leider passiert in der Tabelle "Preis_final" nichts.
Kann aber nicht erkennen, an was das liegt. :-(

VG
Stefan

Option Explicit

Dim lngDate As Long

Private Sub Worksheet_Change(ByVal Target As Range)
Dim intSpalte As Long
Dim varDatum As Variant
Dim varStart As Variant
If Not Intersect(Target.Cells(1), ActiveSheet.ListObjects("Preistabelle_Rohmaterial").DataBodyRange.Columns(1)) Is Nothing Then
If Target.Cells(1) = "" Then
With ActiveSheet.ListObjects("Rohmaterial")
For intSpalte = .ListColumns.Count To 7 Step -1
If CDate(.HeaderRowRange.Cells(intSpalte)) = CDate(lngDate) Then
.ListColumns(intSpalte).Delete
Exit Sub
End If
Next intSpalte
End With
With ActiveSheet.ListObjects("Preis_final")
For intSpalte = .ListColumns.Count To 3 Step -1
If CDate(.HeaderRowRange.Cells(intSpalte)) = CDate(lngDate) Then
.ListColumns(intSpalte).Delete
Exit Sub
End If
Next intSpalte
End With
Else
With ActiveSheet.ListObjects("Rohmaterial")
varDatum = Application.Match(Target.Cells(1), .HeaderRowRange, 0)
If IsError(varDatum) Then
.ListColumns.Add Position:=.ListColumns.Count + 1
.HeaderRowRange.Cells(.HeaderRowRange.Cells.Count) = Target.Cells(1)
varStart = .HeaderRowRange.Cells(.HeaderRowRange.Cells.Count - 1)
.DataBodyRange.Columns(.DataBodyRange.Columns.Count - 1).AutoFill _
Destination:=Range("Rohmaterial[[" & varStart & "]:[" & Target.Cells(1) & "]]"), Type:=xlFillDefault
Exit Sub
End If
End With
With ActiveSheet.ListObjects("Preis_final")
varDatum = Application.Match(Target.Cells(1), .HeaderRowRange, 0)
If IsError(varDatum) Then
.ListColumns.Add Position:=.ListColumns.Count + 1
.HeaderRowRange.Cells(.HeaderRowRange.Cells.Count) = Target.Cells(1)
varStart = .HeaderRowRange.Cells(.HeaderRowRange.Cells.Count - 1)
.DataBodyRange.Columns(.DataBodyRange.Columns.Count - 1).AutoFill _
Destination:=Range("Preis_final[[" & varStart & "]:[" & Target.Cells(1) & "]]"), Type:=xlFillDefault
Exit Sub
End If
End With
End If
End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target.Cells(1), ActiveSheet.ListObjects("Preistabelle_Rohmaterial").DataBodyRange.Columns(1)) Is Nothing Then
lngDate = Target.Cells(1)
End If
End Sub
Anzeige
AW: Spalte in intelligenter Tabelle hinzufügen!
06.02.2024 07:22:37
ralf_b
möglicherweise liegt es an Target, welches sicher nicht mehr das Target ist, welches es zu Beginn deines Makros war. Schreibst du im Changemakro etwas in die Tabelle, änderst du somit einen Wert und das Changemakro wird wieder aufgerufen mit einem anderen Target. informiere dich über Application.enableevents = false/true
Oder versuchsweise zu Beginn des Makros das aktuelle Target in einer Variable sichern und diese weiter verwenden.
AW: Spalte in intelligenter Tabelle hinzufügen!
06.02.2024 11:08:12
Beverly
Hi Stefan,

wie sieht denn deine Tabelle "Preis_final" aus?

Bis später
Karin

Link zur Homepage: https://excel-inn.de/
Anzeige
Zusatzfrage
06.02.2024 16:57:22
Beverly
Hi Stefan,

im Code anstelle Exit Sub -> Exit For zu verwenden habe ich auch bereits festgestellt - ich wollte nur auf deine Antwort auf meine vorhergehende Frage warten ehe ich dazu etwas poste. Bei weiteren Tests ist mir nämlich aufgefallen, dass es Probleme gibt, wenn alle Spalten mit einem Datum gelöscht werden sollten, da dann keine Formeln vorhanden sind, die auf die nächste (neue) Spalte übertragen werden können - so wie im bisherigen Code. In diesem Fall müsste man anders vorgehen: entweder fügt man dann in die 1. Spalte mit einem Datum die Formel per VBA ein, oder man löscht die 1. Spalte mit einem Datum nicht, zumindest die Formel nicht sondern nur die Spaltenüberschrift, sodass dann quasi eine Leerspalte stehen bleibt. Für diese Spalte müsste dann beim Eintragen des 1. Datums nur die Spaltenüberschrift geändert werden. Welche Variante wäre für dein Vorhaben die wünschenswertere?

Bis später
Karin

Link zur Homepage: https://excel-inn.de/
Anzeige
AW: Zusatzfrage
06.02.2024 18:46:06
Stefan
Hallo Karin,

sorry für die späte Antwort. Die Tabelle Preis_final sieht recht einfach aus.
-> Ich hab mal ein angepasste Datei rein gestellt. Die Formeln fehlen noch, da hänge ich aktuell auch noch... aber am Ende sollen da Formeln drin sein die etwas berechnen :)

https://www.herber.de/bbs/user/166839.xlsx

Die Tabelle befindet sich dann auch auf dem gleichen Arbeitsblatt, in der gleichen Datei.

Die Variante dass man in der ersten Spalte nur die Überschrift löscht und dann die Formeln beibehalten werden ist die deutlich bessere, weil ich denke auch die sauberste. -> Generell soll es aber eh nicht so sein, dass dort viel gelöscht wird. Die Löschfunktion ist quasi nur im Bedarfsfall.

Um ehrlich zu sein, habe ich mich mit den Fehlern oder Eigenheiten die durch den Code entstehen noch nicht beschäftigt, weil für mich erstmal die generelle Funktion wichtig ist - die Schwächen hätte ich dann angesprochen wenn die Grundfunktion steht.

Ich hab mal die ganzen Exit Sub gegen Exit for getauscht, aber da bekomme ich dann Fehlermeldungen. Ich hab halt echt sehr wenig Verständnis für VBA, ich versteh zwar teilweise was passieren soll, hab aber keinerlei Erfahrung was dann die Lösung sein kann und das macht es echt schwierig, vor allem jetzt bei so einer "komischen" Anforderung.

Ich bedanke mich echt vielmals für deine / eure / Geduld die ihr in dem Forum mit mir aufbringt.

Gruß
Stefan
AW: Zusatzfrage
06.02.2024 22:15:54
Beverly
Hi Stefan,

danke fürs Bereitsellen, allerdings wäre es günstiger gewesen, die Mappe mit allen 3 Tabellen zu sehen... ;-)

Ich habe den Code jetzt so geändert, dass beim Löschen 1 Spalte mit den Formeln übrig bleibt, sodass die tabelle sich entsprechend erweitern lässt. Die Überschrift der Spalte habe ich zu "Datum" festgelegt - wenn du etwas anderes möchtest dann an den 2 entsprechenden Stellen ändern.
Private Sub Worksheet_Change(ByVal Target As Range)

Dim intSpalte As Long
Dim varDatum As Variant
Dim varStart As Variant
If Not Intersect(Target.Cells(1), ActiveSheet.ListObjects("Preistabelle_Rohmaterial").DataBodyRange.Columns(1)) Is Nothing Then
If Target.Cells(1) = "" Then
With ActiveSheet.ListObjects("Rohmaterial")
For intSpalte = .ListColumns.Count To 7 Step -1
If CDate(.HeaderRowRange.Cells(intSpalte)) = CDate(lngDate) Then
If .ListColumns.Count > 7 Then
.ListColumns(intSpalte).Delete
Exit For
Else
.HeaderRowRange.Cells(intSpalte) = "Datum"
End If
End If
Next intSpalte
End With
With ActiveSheet.ListObjects("Preis_final")
For intSpalte = .ListColumns.Count To 2 Step -1
If CDate(.HeaderRowRange.Cells(intSpalte)) = CDate(lngDate) Then
If .ListColumns.Count > 2 Then
.ListColumns(intSpalte).Delete
Exit For
Else
.HeaderRowRange.Cells(intSpalte) = "Datum"
End If
End If
Next intSpalte
End With
Else
If lngDate > Target.Cells(1) Then lngDate = Target.Cells(1)
With ActiveSheet.ListObjects("Rohmaterial")
varDatum = Application.Match(CStr(Target.Cells(1)), .HeaderRowRange, 0)
If IsError(varDatum) Then
If Not IsNumeric(.HeaderRowRange.Cells(.HeaderRowRange.Cells.Count)) Then
.HeaderRowRange.Cells(.HeaderRowRange.Cells.Count) = CDate(lngDate)
Else
.ListColumns.Add Position:=.ListColumns.Count + 1
.HeaderRowRange.Cells(.HeaderRowRange.Cells.Count) = CDate(lngDate)
varStart = .HeaderRowRange.Cells(.HeaderRowRange.Cells.Count - 1)
.DataBodyRange.Columns(.DataBodyRange.Columns.Count - 1).AutoFill _
Destination:=Range("Rohmaterial[[" & varStart & "]:[" & CDate(lngDate) & "]]"), Type:=xlFillDefault
End If
End If
End With
With ActiveSheet.ListObjects("Preis_final")
varDatum = Application.Match(CStr(Target.Cells(1)), .HeaderRowRange, 0)
If IsError(varDatum) Then
If Not IsNumeric(.HeaderRowRange.Cells(.HeaderRowRange.Cells.Count)) Then
.HeaderRowRange.Cells(.HeaderRowRange.Cells.Count) = CDate(lngDate)
Else
.ListColumns.Add Position:=.ListColumns.Count + 1
.HeaderRowRange.Cells(.HeaderRowRange.Cells.Count) = CDate(lngDate)
varStart = .HeaderRowRange.Cells(.HeaderRowRange.Cells.Count - 1)
.DataBodyRange.Columns(.DataBodyRange.Columns.Count - 1).AutoFill _
Destination:=Range("Preis_final[[" & varStart & "]:[" & CDate(lngDate) & "]]"), Type:=xlFillDefault
End If
End If
End With
End If
End If
End Sub

Bis später
Karin

Link zur Homepage: https://excel-inn.de/
Hauptfrage gelöst - Individualität gefragt
07.02.2024 06:38:01
Stefan
Hallo Karin,

also der Code funktioniert nun exakt so wie ich das wollte. Das ist perfekt... Ich hänge noch an zwei Themen, welche ich in der nachfolgenden Datei beschrieben habe.
Für die letzte "finale_Preis" Tabelle bin ich mit der Formel die ich da brauche etwas überfragt und in der Tabelle "Rohmaterial" wird es irgendwann so sein, dass die erste Spalte die ein Datum beinhaltet nicht mehr die 7 ist sondern z.B. die 14 oder dergleichen--- im angehängten Bsp. habe ich eine gelöscht --- das wird aber in der Realität nicht vorkommen. Vielleicht kann man das irgendwie noch absichern, dass man quasi das erste Datum sucht oder das Wort Datum und diese Spalte dann als erste löschbare oder überschreibbare Spalte deklariert.

https://www.herber.de/bbs/user/166844.xlsm

Auch wenn es jetzt zur ursprüglichen Frage etwas abweicht, möchte ich nicht nochmal einen Thread aufmachen. Ich hoffe das passt so.

Ich hab dir für meine Problemchen eine bessere Beschreibung in der Excel mit hinterlegt.

Viele Grüße
Stefan
Formelfrage offen
07.02.2024 11:15:07
Beverly
Hi Stefan,

zu deiner Frage bezüglich der Formel weiß ich zwar vom Prinzip her wie man es lösen könnte, aber ich bin kein Formelexperte. Deshalb lasse ich den Thread offen.

Zum Problem mit der unterschiedlichen Spaltenanzahl in Tabelle "Rohdaten" kann ich dir folgende Lösung anbieten - ändere den Codeteil für das Löschen der Spalten in dieser Tabelle wie folgt:

            Dim intAnzahl As Integer  '== diese Zeile kann nach oben zu den anderen Variablendeklarationen verschoben werden

With ActiveSheet.ListObjects("Rohmaterial")
intAnzahl = Application.CountIf(.HeaderRowRange, "Endmaterial*") 'Anzahl ermitteln wie viele Spalten es für Endmaterial gibt
For intSpalte = .ListColumns.Count To intAnzahl + 4 Step -1
If CDate(.HeaderRowRange.Cells(intSpalte)) = CDate(lngDate) Then
If .ListColumns.Count > intAnzahl + 4 Then
.ListColumns(intSpalte).Delete
Exit For
Else
.HeaderRowRange.Cells(intSpalte) = "Datum"
End If
End If
Next intSpalte
End With


Bis später
Karin

Link zur Homepage: https://excel-inn.de/
AW: Formelfrage offen
07.02.2024 22:32:31
Stefan
Hallo Karin,

vielen Dank, klappt perfekt! Ich weiß nicht wie ich dir danken kann.

Ich hoffe das sich für die Formelfrage noch eine Lösung findet. Das Hauptthema ist aber geklärt.

Gruß
Stefan
AW: Spalte in intelligenter Tabelle hinzufügen!
06.02.2024 16:03:00
Oberschlumpf
Hi Stefan,

du verwendest 2x Exit Sub, für jedes ListObject eines.

Anstelle des oberen Exit Sub schreib da mal Exit FOR rein

Ciao
Thorsten
AW: Spalte in intelligenter Tabelle hinzufügen!
04.02.2024 11:38:38
Oberschlumpf
Hi Stefan,

auch auf die Gefahr, dass du das gleich denken könntest: Aber ich will dich definitiv nicht ärgern!

Ich versteh nur noch immer nicht deine Beschreibung in der Bsp-Datei.

hier...
https://www.herber.de/bbs/user/166762.xlsx

beachte meine Fragen zu den rot markierten Texten.
Und zeig bitte erneut eine Bsp-Datei (die an sich schon gut aussieht), aber bitte mit Antwort und/oder deiner korrigierten, dann auch hofftl für mich besseren Beschreibung.
Und immer noch nein! Ich will keinen ärgern und ich spiel hier auch nich Prinzessin.

Ciao
Thorsten
AW: Spalte in intelligenter Tabelle hinzufügen!
04.02.2024 12:30:43
Stefan
Hi Thorsten,

ich hab die Datei um die Antworten deiner Fragen bezüglich ergänzt.
Du nervst mich nicht, ich bin ja der, der Hilfe sucht also muss ich das auch aushalten können.
https://www.herber.de/bbs/user/166768.xlsx

Gruß
Stefan
AW: Spalte in intelligenter Tabelle hinzufügen!
04.02.2024 14:57:34
Alwin Weisangler
Hallo Stefan,

mein Vorschlag dazu:
ins Modul des Tabellenblattes:


Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, ListObjects("Preistabelle_Rohmaterial").DataBodyRange) Is Nothing Then
Application.EnableEvents = False
With ListObjects("Preistabelle_Rohmaterial")
If .Comment .ListRows.Count Then
Erweitern
.Comment = .ListRows.Count
Else
Entfernen
.Comment = .ListRows.Count
End If
End With
Application.EnableEvents = True
End If
End Sub


in ein allgemeines Modul:


Option Explicit

Sub Erweitern()
With Tabelle1.ListObjects("Preistabelle_Rohmaterial").DataBodyRange
Tabelle1.ListObjects("Rohmaterial").ListColumns.Add.Name = .Cells(.Rows.Count, 1)
End With
With Tabelle1.ListObjects("Rohmaterial").DataBodyRange
.Columns(.Columns.Count - 1).AutoFill Destination:=Range(.Cells(1, .Columns.Count - 1), .Cells(3, .Columns.Count)), Type:=xlFillDefault
End With
End Sub

Sub Entfernen()

End Sub

Gehe in den Namensmanager und trage in "Preistabelle_Rohmaterial" ins Kommentarfeld die Ziffer 8 ein.
Dann wird korrekt erkannt, ob du in dieser Tabelle eine neue Zeile erzeugt hast.

Vorsorglich habe ich schon die Möglichkeit zum Erkennen des Löschens einer Zeile vorbereitet falls es mal erforderlich sein sollte.
Wenn du dich mit den Listobjects Befehlen ein wenig beschäftigst sollte es für dich machbar sein, den dazu erforderlichen Code selbst zu entwickeln.
https://www.herber.de/bbs/user/166774.xlsm
Gruß Uwe


AW: Spalte in intelligenter Tabelle hinzufügen!
04.02.2024 19:58:28
Stefan
Hallo Uwe,

danke für die Lösung, es funktioniert auch ganz gut zumindest das hinzufügen.
Da ich wenig bis keine Ahnung von VBA habe, war ich jetzt mal so schlau und hab deinen Code kopiert und anstatt .add. = .delete. in den Code mit eingefügt.
Das bewirkt dass die Werte / bzw. Formeln in der Tabelle gelöscht werden. Aber um die ganze Spalte zu entfernen... da komme ich nicht weiter.

Schande über mein Haupt.

Gruß
Stefan
AW: Spalte in intelligenter Tabelle hinzufügen!
04.02.2024 21:20:26
Alwin Weisangler
Hallo Stefan,

du willst dann nur in der Zieltabelle eine Spalte entfernen. Das kann doch händisch am einfachsten regeln.

Für den Fall, dass du in der "Preistabelle Rohmaterial" eine Zeile löschen willst, funktioniert das Löschen im Listobjekt nicht, da unter dieser Tabelle die Zieltabelle steht.

Für diesem Fall entfernt man den Fixen Wert Preis / € aus der Zelle der zu löschenden Zeile in der "Preistabelle Rohmaterial"
Dann kann man die Zeilennummer und das Datum der in der Zeile auslesen und in Variablen übergeben.
Somit kann man mit Hilfe der beiden Variablen die gewünschte Zeile löschen und in der Zieltabelle die dazugehörige Spalte.
Damit die Zahl der Zeilen zwischen den beiden Tabellen gleich bleibt erzeugt man eine neue Zeile im Tabellenblatt
Zum Schluss wird die neue Zeilenzahl wieder ins Kommentarfeld des Listobjekts zurückgeschrieben.
Damit kann man dann automatisiert die betreffende Spalte der Zieltabelle finden und löschen.
Zu diesem Zweck hatte ich es vorbereitet.

https://www.herber.de/bbs/user/166783.xlsm

Um ein versehentliches Löschen zu verhindern ist es sinnvoll mit einer MsgBox abzufragen, ob die Zeile wirklich gelöscht werden soll.
Bei nein dann einfach in diese Zelle "Preis / €" zurückgeben.
Aber das solltest du selbst schaffen.

Gruß Uwe

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige