Excelformel per VBA einfügen

Hallo Experten,

beim öffnen einer Excel-Tabelle öffnet sich automatisch ein Formular. In dieses Formular gebe ich eine mittels eine Combobox (cboAnzahl) ein, wie viele Tabellenblätter erstellt werden sollen. Dann habe ich ein Tabellenblatt „Gesamt“, auf diesem steht eine Zusammenfassung aller anderen Tabellenblätter.

Nun möchte ich in bestimmte Zellen auf dem Tabellenblatt „Gesamt“ Formeln per VBA einfügen - je nach Anzahl der Tabellenblätter.

Hier der Code dazu:

Zeile = 6 + cboAnzahl \* 2

For j = 1 To cboAnzahl - 1
 Sheets("Tabelle1").Copy Before:=Sheets(2)
 Sheets("Tabelle1 (2)").Select
 Sheets("Tabelle1 (2)").Name = "Tabelle" & cboAnzahl - j + 1
 With Worksheets("Gesamt")
 .Cells(Zeile, 2) = "=Tabelle" & cboAnzahl - j + 1 & "!A53)"
 .Cells(Zeile, 3) = ":"
 .Cells(Zeile, 4) = "=Tabelle" & cboAnzahl - j + 1 & "!B54)"
 .Cells(Zeile, 5) = "bundles (s) - Area"
 .Cells(Zeile, 6) = "-"
 .Cells(Zeile, 7) = "=Tabelle" & cboAnzahl - j + 1 & "!D54)"
 .Cells(Zeile, 8) = "-"
 .Cells(Zeile, 9) = "=Tabelle" & cboAnzahl - j + 1 & "!F54)"
 End With
 Zeile = Zeile - 2
Next j

Wenn ich das so laufen lasse, bekomme ich die Fehlermeldung: „Anwendungs- oder Objektorientierter Fehler!“.

Lasse ich das = vor Tabelle weg, klappt das einfügen problemlos, nur das dann halt keine Formel da steht, sondern Text.

Wer kann helfen?

Kerstin

Hallo Experten,

Nun möchte ich in bestimmte Zellen auf dem Tabellenblatt
„Gesamt“ Formeln per VBA einfügen - je nach Anzahl der
Tabellenblätter.

Hier der Code dazu:

Zeile = 6 + cboAnzahl * 2

For j = 1 To cboAnzahl - 1
Sheets(„Tabelle1“).Copy Before:=Sheets(2)
Sheets(„Tabelle1 (2)“).Select
Sheets(„Tabelle1 (2)“).Name = „Tabelle“ & cboAnzahl - j +
1
With Worksheets(„Gesamt“)
.Cells(Zeile, 2) = „=Tabelle“ & cboAnzahl - j + 1 &
„!A53)“
.Cells(Zeile, 3) = „:“
.Cells(Zeile, 4) = „=Tabelle“ & cboAnzahl - j + 1 &
„!B54)“
.Cells(Zeile, 5) = „bundles (s) - Area“
.Cells(Zeile, 6) = „-“
.Cells(Zeile, 7) = „=Tabelle“ & cboAnzahl - j + 1 &
„!D54)“
.Cells(Zeile, 8) = „-“
.Cells(Zeile, 9) = „=Tabelle“ & cboAnzahl - j + 1 &
„!F54)“
End With
Zeile = Zeile - 2
Next j

Wenn ich das so laufen lasse, bekomme ich die Fehlermeldung:
„Anwendungs- oder Objektorientierter Fehler!“.

Lasse ich das = vor Tabelle weg, klappt das einfügen
problemlos, nur das dann halt keine Formel da steht, sondern
Text.

Wer kann helfen?

Kerstin

Hallo kerstin,

passe dein Makro in der With … End With Anweisung wie folgt an, dann sollten die Formeln korrekt erzeugt werden, wobei die Formeln mit absoluten Bezügen geschrieben werden. Falls Du die Formeln mit relativen Bezügen schreiben möchtest, dann muß Du die die Zeilen- bzw. Spaltennummer in eckige Klammern schreiben z.B. [R10]C[8] oder nachträglich die $-Zeichen mit Suchen/Ersetzen entfernen. Macht aber bei Deiner Anwendung wahrscheinlich keinen Sinn.

 With Worksheets("Gesamt") 
 .Cells(Zeile, 2).FormulaR1C1 = "=Tabelle" & cboAnzahl - J + 1 & "!R53C1" 
 .Cells(Zeile, 3) = ":" 
 .Cells(Zeile, 4).FormulaR1C1 = "=Tabelle" & cboAnzahl - J + 1 & "!R54C2" 
 .Cells(Zeile, 5) = "bundles (s) - Area" 
 .Cells(Zeile, 6) = "-" 
 .Cells(Zeile, 7).FormulaR1C1 = "=Tabelle" & cboAnzahl - J + 1 & "!R54C4" 
 .Cells(Zeile, 8) = "-" 
 .Cells(Zeile, 9).FormulaR1C1 = "=Tabelle" & cboAnzahl - J + 1 & "!R54C6" 
 End With

Gruß
Franz

Hallo Franz,

wobei die Formeln mit absoluten Bezügen geschrieben werden.

Das ist kein Problem - die Formeln sollen ja schließlich nachträglich weder kopiert noch geändert werden, das wird ja gleich beim Start erledigt.

vielen Dank für die schnelle Hilfe!

Kerstin

Hinweis noch:

Bei der VBA-Variante muss man ggf. beachten, dass man die Excel-Formeln in der Englischen Nomenklatur angeben muss. Da gab es irgendwie Unterschiede zwischen den Zell-Eigenschaften, und ich kann mich nicht mehr genau erinnern.

Solltest Du also auf entsprechende Probleme stoßen, an dieser Stelle nochmal nachhaken.

Kristian