Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA - Formelupdate intelligente Tabelle

VBA - Formelupdate intelligente Tabelle
16.03.2018 13:57:20
Basti
Hallo Forum,
ich habe den u.a. Code.
Dieser soll ab Zeile 2 jede Zeile in einer intelligenten Tabelle durchlaufen und in Spalte 7 & 10 eine Formel schreiben. Die Formelwerte stehen in Spalte 5 & 4 (Dateipfad & Dateiname).
Ziel ist es, wenn sich Dateiname oder Dateipfad ändern die Formel zu aktualisieren. Leider ändert sich nichts, wenn das Marko durchgelaufen ist.
Habt ihr evtl. Ideen?
Gruß
Basti
Public Sub FormulaUpdate()
Dim Formula As Object
Dim x As Long
Dim tbl As ListObject
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
.EnableEvents = False
End With
Set tbl = ActiveSheet.ListObjects("Table1")
For x = 2 To tbl.ListRows.Count
Cells(x, 7).FormulaLocal = "='" & Cells(x, 5) & "[" & Cells(x, 4) & "]" & "hier Suchzelle1"
Cells(x, 10).FormulaLocal = "='" & Cells(x, 5) & "[" & Cells(x, 4) & "]" & "hier Suchzelle2" _
Next x
With Application
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic
.EnableEvents = True
End With
End Sub

Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA - Formelupdate intelligente Tabelle
16.03.2018 14:46:00
Luschi
Hallo Basti,
diese formatierten Tabellen werden im Excel-Volksmund auch intelligente Tabellen; und diese Intelligenz gilt es auszunutzen.
Ändert man in der 1. Zeile einer Spalte diese Objektes die Formel, dann sorgt die
Intell... dafür, daß alle Zellen dieser Spalte die Formel angepaßt bekommen, da braucht man keine Schleife.
So sieht das dann bei mir aus:

Sub MachMal()
Dim lstObj As ListObject, rg As Range
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
.EnableEvents = False
End With
'formatierte Tabele als Objektvariable
Set lstObj = Worksheets("Tabelle2").ListObjects("myTab")
'in der 1. Datenzeile der formatierten Tabelle die 7. Zelle definieren
Set rg = lstObj.DataBodyRange.Rows(1).Cells(1, 7)
'zur Sicherheit beim Testen
Debug.Print rg.Address
rg3.Formula = "=...."
'in der 1. Datenzeile der formatierten Tabelle die 10 .Zelle (7+3)
rg3.Offset(0, 3).Formula = "=...."
Set rg3 = Nothing
Set lstObj = Nothing
With Application
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic
.EnableEvents = True
End With
lstObj.Parent.Parent.Save
End Sub
Gruß von Luschi
aus klein-Paris
Anzeige
AW: kleine Korrektur
16.03.2018 14:53:20
Luschi
Hallo Basti
mache aus jedem rg3 ein rg
Hatte ein bischen zu viel herumgespielt und die Änderungen nicht rückgängig gemacht vor dem posten.
Gruß von Luschi
aus klein-Paris
AW: kleine Korrektur
16.03.2018 15:40:00
Basti
Hallo Luschi,
danke für deine Rückmeldung.
Hab das mal so umgesetzt. Leider funktioniert es nicht wirklich. Es warden zwar die richtigen Zellen angesprochen, aber die Formel wird nicht richtig umgesetzt, sodass die Verlinkung auf die externe Datei nicht erfolgt.
Außerdem bekomme ich den Fehler "Run-time error 91: Object variable or With block variable not set" für
lstObj.Parent.Parent.Save
Wird damit die Formel in die anderen Zeilen weitergegeben?
Gruß Basti
Sub MachMal()
Dim lstObj As ListObject, rg As Range
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
.EnableEvents = False
End With
'formatierte Tabele als Objektvariable
Set lstObj = Worksheets("MasterList").ListObjects("Table1")
'in der 1. Datenzeile der formatierten Tabelle die 7. Zelle definieren
Set rg = lstObj.DataBodyRange.Rows(1).Cells(1, 7)
'zur Sicherheit beim Testen
Debug.Print rg.Address
rg.Formula = "='" & Cells(1, 5) & "[" & Cells(1, 4) & "]" & "SheetName'!$J$3"
'in der 1. Datenzeile der formatierten Tabelle die 10 .Zelle (7+3)
rg.Offset(0, 3).Formula = "='" & Cells(1, 5) & Cells(1, 4) & "SheetName'!$A$22"
Set rg = Nothing
Set lstObj = Nothing
With Application
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic
.EnableEvents = True
End With
lstObj.Parent.Parent.Save
End Sub

Anzeige
AW: kleine Korrektur
16.03.2018 15:59:29
Luschi
Hallo Bastew,
da ich nicht weiß, was in Cells(1, 5).Value und Cells(1, 4).Value steht (sicher Dateipfad und Excel-Dateiname) kann ich erst mal nicht aviel dazu sagen. Vielleicht fehlt ein '\' im Verkettungsstring.
und der Tabellenname in zu verknüpfenden Arbeitsmappe wird ja wohl nicht 'SheetName' heißen.
Schreibe diesen Befehl dazu:
Debug.Print Cells(1, 5) & "[" & Cells(1, 4) & "]" & "SheetName'!$J$3"
und schau Dir das Cells(1, 5) & "[" & Cells(1, 4) & "]" & "SheetName'!$J$3"
Ergebnis im Vba-Direktfenster (Strg+G) an.
Gruß von Luschi
aus klein-Paris
Anzeige
AW: kleine Korrektur
16.03.2018 16:23:25
Basti
Hallo Luschi,
laut Debug.Print, passt der Dateiname incl. Pfad. Allerdings wird die flasche Syntax für eine externe Verlinkung in die Zelle geschreibt.
Außerdem bleibt auch noch der Runtime Error, sodas die Formel auch nicht nach unten kopiert wird.
Gruß
Basti
AW: kleine Korrektur
16.03.2018 17:45:18
Luschi
Hallo Basti,
bei solchen Formeln mache ich das immer so:
- Formel per Hand in die Zelle schreiben
- wenn das richtige Ergebnis ausgespuckt wird
- diese Formelzelle markieren
- im Vba-Direktfenster Folgendes eintippen und Entertaste drücken
- ?activecell.formula oder
- ?activecell.formulalocal
- dann siehst Du das Ergebnis, welcher Formelstring erwartet wird
- dabei beachten, daß noch Korrekturen erforderlich sind bei
- der Verdoppelung der Anführungsstriche oder Verwendung von Chr(34) stattdessen
- Verwendung von & bei Zerstückelung des Gesamtstrings
- usw.
Gruß von Luschi
aus klein-Paris
PS: bei solchen Puzzle-Arbeiten ist es immer von Vorteil, wenn man 2 Monitore am Rechner angeschlossen hat - einfach praktisch
- 1. Monitor Excel-Oberfläche
- 2. Monitor Vba-Fenster
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

VBA-Formelupdate für intelligente Tabellen in Excel


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und erstelle eine intelligente Tabelle: Du kannst eine intelligente Tabelle erstellen, indem du in einem Datenbereich auf „Einfügen“ und dann auf „Tabelle“ klickst. Stelle sicher, dass der Haken bei „Meine Tabelle hat Überschriften“ gesetzt ist.

  2. Öffne den VBA-Editor: Drücke ALT + F11, um den VBA-Editor zu öffnen. Füge ein neues Modul hinzu, indem du mit der rechten Maustaste auf „VBAProject (dein Arbeitsblattname)“ klickst und „Einfügen“ > „Modul“ wählst.

  3. Füge den VBA-Code ein: Verwende den folgenden Code, um die Formeln in die intelligente Tabelle zu schreiben:

    Public Sub FormulaUpdate()
       Dim x As Long
       Dim tbl As ListObject
       With Application
           .ScreenUpdating = False
           .Calculation = xlCalculationManual
           .EnableEvents = False
       End With
    
       Set tbl = ActiveSheet.ListObjects("Table1")
       For x = 2 To tbl.ListRows.Count
           Cells(x, 7).FormulaLocal = "='" & Cells(x, 5) & "[" & Cells(x, 4) & "]" & "HierSuchzelle1"
           Cells(x, 10).FormulaLocal = "='" & Cells(x, 5) & "[" & Cells(x, 4) & "]" & "HierSuchzelle2"
       Next x
    
       With Application
           .ScreenUpdating = True
           .Calculation = xlCalculationAutomatic
           .EnableEvents = True
       End With
    End Sub
  4. Führe das Makro aus: Drücke F5 im VBA-Editor, um das Makro auszuführen.


Häufige Fehler und Lösungen

  • Error 91: Object variable or With block variable not set: Dieser Fehler tritt häufig auf, wenn die intelligente Tabelle nicht gefunden werden kann. Stelle sicher, dass der Tabellenname korrekt ist und die Tabelle existiert.

  • Formeln werden nicht aktualisiert: Wenn die Formeln nicht aktualisiert werden, überprüfe die Zellenreferenzen. Es kann hilfreich sein, die Formeln einmal manuell in die Zellen einzugeben, um zu sehen, ob sie korrekt sind.

  • Formeln werden nicht in andere Zeilen kopiert: Stelle sicher, dass du die richtige Range für die Schleife verwendest. Die Loop sollte alle Zeilen der intelligenten Tabelle durchlaufen.


Alternative Methoden

  • Direkte Bearbeitung der Formel: Anstatt VBA zu verwenden, kannst du die Formeln manuell in die Zellen der intelligenten Tabelle schreiben. Wenn du die Formel in der ersten Zeile änderst, wird sie automatisch auf die anderen Zeilen angewendet.

  • Verwenden von Offset: Wenn du eine Formel in einer Zelle hast und sie in benachbarte Zellen kopieren möchtest, kannst du den Offset-Befehl nutzen.


Praktische Beispiele

Hier ist ein Beispiel, wie du die Formel für eine intelligente Tabelle in Excel setzen kannst:

Sub MachMal()
    Dim lstObj As ListObject
    Dim rg As Range

    Set lstObj = Worksheets("Tabelle2").ListObjects("myTab")
    Set rg = lstObj.DataBodyRange.Rows(1).Cells(1, 7)

    rg.Formula = "='C:\MeinPfad\[MeineDatei.xlsx]'!$J$3"
    rg.Offset(0, 3).Formula = "='C:\MeinPfad\[MeineDatei.xlsx]'!$A$22"

    lstObj.Parent.Parent.Save
End Sub

Tipps für Profis

  • Verwende Debugging: Nutze Debug.Print, um sicherzustellen, dass die Werte der Zellen wie gewünscht sind, und um mögliche Fehlerquellen zu identifizieren.

  • Zwei Monitore nutzen: Wenn du an komplexen VBA-Projekten arbeitest, kann es hilfreich sein, einen zweiten Monitor für den VBA-Editor zu verwenden, während du auf dem anderen Monitor an deiner Excel-Datei arbeitest.

  • Vermeide Hardcodierung: Anstatt feste Zellreferenzen zu verwenden, kannst du Variablen für dynamische Zellenreferenzen erstellen. So bleibt dein Code flexibler.


FAQ: Häufige Fragen

1. Wie spreche ich eine intelligente Tabelle in Excel VBA an?
Du kannst dies mit dem Befehl Set tbl = ActiveSheet.ListObjects("DeinTabellenname") tun.

2. Was bedeutet der Fehler „Run-time error 91“?
Dieser Fehler tritt auf, wenn du versuchst, auf ein Objekt zuzugreifen, das nicht initialisiert wurde, oft weil die Tabelle oder das Arbeitsblatt nicht existiert.

3. Wie kann ich eine intelligente Tabelle in Excel erstellen?
Du kannst eine intelligente Tabelle erstellen, indem du einen Datenbereich auswählst und auf „Einfügen“ > „Tabelle“ klickst.

4. Wie kann ich eine Zelle in einer intelligenten Tabelle ansprechen?
Verwende tbl.ListRows(x).Cells(y) um auf spezifische Zellen in der intelligenten Tabelle zuzugreifen.

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