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

Forumthread: VBA Zeile einfügen + Formeln kopieren (intelligente Tabelle)

VBA Zeile einfügen + Formeln kopieren (intelligente Tabelle)
25.08.2023 23:59:04
Laubfrosch
Liebe Community,
vielen Dank erst einmal dafür, dass es euch gibt! Ihr habt mir schon oft geholfen!
Dieses Mal komme ich leider mit meinen Kompetenzen und der Recherche im Forum nicht zu einer Lösung und bitte um Hilfe.

In meiner Excel-Arbeitsmappe möchte ich über ein Makro Zeilen in eine intelligente Tabelle einfügen - soweit so gut. Das Makro funktionierte auch soweit, aber Excel übernimmt nicht alle Formeln der darüber stehenden Zeile (auch nicht wenn ich per rechte Mausklick oder Zeile markieren und Strg + eine Zeile einfüge). Ich habe unter Optionen-> Dokumentenprüfung -> AutoKorrektur-Optionen->AutoFormat während der Eingabe -> „Formeln in Tabellen füllen, um berechnete Spalten zu erstellen“ angehackt. Es ist definitiv im Bereich der intelligente Tabelle. Und x male gespeichert und neu geöffnet habe ich auch schon. Ich checke nicht was das Problem ist.

Nun will ich das „einfach“ über VBA lösen. Da ich eh einen Button habe, der eine Zeile einfügt, möchte ich dort programmieren, dass die eingefügte Zeile die Formeln und auch Formate (Dropdown-Liste) der ersten Zeile der Tabelle übernimmt. Ich bekomme die richtige Zeile raus und neue Zeile einfügen klappt auch, aber das Kopieren und Einfügen will nicht klappen. Ich komme mit der Syntax/Typen von Range nicht klar, beide Varianten klappen nicht.
Ich verzweifelte daran leider, hier meine Versuche:

Public Sub ZeileEinfügenGrundmischungen()
Dim FstObj As ListObject
Dim HeaderRow As Integer, LetzteZ As Integer
Dim FstRange As Range
'ActiveSheet.Protect "Passwort", UserInterfaceOnly = True 'Makros funktionieren trotz Blattschutz
Set FstObj = ActiveSheet.ListObjects("BGrundmischungen")
HeaderRow = FstObj.Range.Cells(2, 1).Row 'absolute Zeile mit den ersten Einträgen der o.g. Tabelle
MsgBox HeaderRow 'zum Testen: klappt
'FstRange="A"&HeaderRow&:&"G"&HeaderRow 'Syntax falsch
FstObj.Range(Cells(HeaderRow, 1), Cells(HeaderRow, 7)).Copy 'Typen unverträglich
FstObj.ListRows.Add 'Zeile in o.g. Tabelle einfügen
LetzteZ = FstObj.Range.Rows.Count - 2 'absolute Zeile der neuen Zeile (Überschrifts- und Summenzeile müssen abgezogen werden)
MsgBox LetzteZ 'Zum testen: klappt, wenn fehlerhafte Zeile oben raus ist
FstObj.Range(Cells(LetzteZ, 1), Cells(LetzteZ, 7)).Paste 'geht nicht

End Sub

Was mache ich falsch?

Ich kann nicht mit festen Bezügen arbeiten, da auf der Seite drei int. Tabellen sind, die ggf. alle neue Zeilen benötigen.
Den Blattschutz habe ich noch nicht getestet, aber da ca. 20. Leute die Arbeitsmappe nutzen sollen, soll die Arbeitsmappe unbedingt einen Schutz bekommen.

Meine VBA Kenntnisse sind rudimentär, da 15 Jahre nicht programmiert. Sprich Syntax gleich null, Methodik/Logik wie Schleifen sollten noch vorhanden sein.

Würde mich sehr über Hilfe freuen!

Viele Grüße
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Zeile einfügen + Formeln kopieren (intelligente Tabelle)
26.08.2023 08:34:18
Ulf


Public Sub ZeileEinfügenGrundmischungen()
Dim lObj As ListObject
Dim strAdr As String
Dim strAdr2 As String
Set lObj = ThisWorkbook.Worksheets(1).ListObjects(1)
strAdr = lObj.ListRows(1).Range.Address
lObj.ListRows.Add
strAdr2 = lObj.ListRows(lObj.ListRows.Count).Range.Address
ThisWorkbook.Worksheets(1).Range(strAdr2).Value = ThisWorkbook.Worksheets(1).Range(strAdr).Value
End Sub
hth
Ulf
Anzeige
AW: VBA Zeile einfügen + Formeln kopieren (intelligente Tabelle)
26.08.2023 21:54:52
Laubfrosch
Vielen Dank Ulf!
Mit String und Address hat es geklappt! Allerdings hat Excel wieder in der einen Tabelle in zwei Spalten die Formeln nicht übernommen und in einer anderen Tabelle in einer Spalte einen falsche Formel übernommen(das finde ich unheimlich). Ich habe die Tabellen nun nochmal in Bereiche konvertiert und dann wieder als Tabellen formatiert und nun funktioniert es mit deinem Code! Der Tabellenbereich ist exakt der wie vorher. Komisch.
Falls jemand einen Tipp hat, wie man das Verhalten von Excel (2019) vermeiden kann, gerne! (Cache leeren? habe ich noch nie gehört bei Excel und wüsste nicht wo).

UserInterfaceOnly kennt mein Excel nicht, sagt immer Variable nicht definiert. Aber das ist nochmal ein eigenes Thema und ich habe nun erst mal unprotect und protect verwendet und hoffe das der Code nicht abschmiert und nun läuft alles erstmal wunderbar....

Besten Dank und viele Grüße!
Anzeige
AW: VBA Zeile einfügen + Formeln kopieren (intelligente Tabelle)
27.08.2023 00:54:45
Ulf
Hi,
du kannst auch statt


ThisWorkbook.Worksheets(1).Range(strAdr2).Value = ThisWorkbook.Worksheets(1).Range(strAdr).Value



ThisWorkbook.Worksheets(1).Range(strAdr2).Formula = ThisWorkbook.Worksheets(1).Range(strAdr).Formula

oder


ThisWorkbook.Worksheets(1).Range(strAdr2).Value2 = ThisWorkbook.Worksheets(1).Range(strAdr).Value2

testweise verwenden
Vlt will Excel auch Kontinuierliches:


lObj.ListRows.Add
'letzte bisherige zeile
strAdr = lObj.ListRows(lObj.ListRows.Count-1).Range.Address
strAdr2 = lObj.ListRows(lObj.ListRows.Count).Range.Address
ThisWorkbook.Worksheets(1).Range(strAdr2).Value = ThisWorkbook.Worksheets(1).Range(strAdr).Value

...
hth
Ulf
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Zeilen in eine intelligente Tabelle mit VBA einfügen und Formeln kopieren


Schritt-für-Schritt-Anleitung

  1. Makro erstellen: Öffne den VBA-Editor in Excel (ALT + F11) und erstelle ein neues Modul.

  2. Code einfügen: Füge folgenden Code ein, um eine Zeile in deiner intelligenten Tabelle hinzuzufügen und die Formeln zu kopieren:

    Public Sub ZeileEinfügenGrundmischungen()
       Dim lObj As ListObject
       Dim strAdr As String
       Dim strAdr2 As String
       Set lObj = ThisWorkbook.Worksheets(1).ListObjects(1)
       strAdr = lObj.ListRows(1).Range.Address
       lObj.ListRows.Add
       strAdr2 = lObj.ListRows(lObj.ListRows.Count).Range.Address
       ThisWorkbook.Worksheets(1).Range(strAdr2).Formula = ThisWorkbook.Worksheets(1).Range(strAdr).Formula
    End Sub
  3. Makro ausführen: Führe das Makro aus, um eine neue Zeile einzufügen.

  4. Überprüfen: Stelle sicher, dass die Formeln in der neuen Zeile korrekt übernommen wurden.


Häufige Fehler und Lösungen

  • Fehler: Excel VBA Fehler in der Zwischenablage
    Wenn du diese Fehlermeldung erhältst, versuche, die Zwischenablage zu leeren, bevor du das Makro ausführst.

  • Fehler: Formeln werden nicht übernommen
    Überprüfe, ob die Tabelle als intelligente Tabelle formatiert ist. Du kannst die Tabelle löschen und sie erneut erstellen, um sicherzustellen, dass alle Funktionen korrekt arbeiten.

  • Fehler: Absolute Bezugstypen
    Achte darauf, dass du in deinem Code nicht mit festen Bezügen arbeitest, sondern die Struktur der intelligenten Tabelle berücksichtigst.


Alternative Methoden

  • Manuelles Einfügen: Du kannst auch manuell eine Zeile vor der Tabelle einfügen, indem du die Zeile markierst und mit der rechten Maustaste "Zeile einfügen" wählst. Allerdings werden dabei nicht immer die Formeln übernommen.

  • Dropdown-Listen: Wenn du Dropdown-Listen in deiner intelligenten Tabelle benötigst, kannst du diese über die Datenvalidierung einrichten. Stelle sicher, dass die Formatierungen der Zellen übernommen werden.


Praktische Beispiele

  • Beispiel für das Kopieren von Formeln: Wenn du eine Formel aus der ersten Zeile einer intelligenten Tabelle in die neu hinzugefügte Zeile kopieren möchtest, nutze den oben genannten Code und passe die Zeilenindizes entsprechend an.

  • Dropdown in intelligenter Tabelle: Um ein Dropdown in einer intelligenten Tabelle zu erstellen, gehe zu "Daten" -> "Datenvalidierung" und wähle "Liste". Lege den Bereich fest, aus dem die Dropdown-Werte stammen.


Tipps für Profis

  • VBA optimieren: Versuche, deinen VBA-Code so zu strukturieren, dass er flexibel ist. Verwende Variablen und Funktionen, um die Wiederverwendbarkeit zu erhöhen.

  • Blattschutz: Um den Blattschutz zu verwenden, ohne dass der VBA-Code unterbrochen wird, kannst du UserInterfaceOnly setzen, wenn du den Schutz aktivierst. Bei Excel 2019 kann dies jedoch eine Herausforderung darstellen, da die Variable möglicherweise nicht erkannt wird.

  • Abstand Zellenrand: Achte darauf, dass der Abstand der Zellenränder in der intelligenten Tabelle korrekt eingestellt ist, um ein ansprechendes Layout zu gewährleisten.


FAQ: Häufige Fragen

1. Wie kann ich eine Zeile über VBA in die intelligente Tabelle einfügen?
Verwende den im Tutorial beschriebenen Code, um eine neue Zeile einzufügen und die Formeln zu kopieren.

2. Warum werden meine Formeln nicht korrekt übernommen?
Es kann an der Formatierung der Tabelle oder an einem Fehler im VBA-Code liegen. Stelle sicher, dass die Tabelle als intelligente Tabelle formatiert ist und überprüfe deinen Code auf mögliche Fehler.

3. Was ist der Unterschied zwischen Value und Formula in VBA?
Value kopiert den aktuellen Wert, während Formula die Formel selbst kopiert, was wichtig ist, wenn du Berechnungen in der intelligenten Tabelle beibehalten möchtest.

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