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

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

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

33 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige