Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1928to1932
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
Formel in VBA
02.05.2023 09:40:32
Richi

Hallo Zusammen
Ich komme nicht weiter mit dem Einbinden einer Formel im VBA.

VBA Code für Formel: Formel01 = "=Anzahl2(" & Worksheets(i).Name & "!A3:A15000)"
Wenn alles richtig laufen würde, müsste Formel so aussehen: =ANZAHL2(Vorgaben!A3:A15000)

Ergebnis in Zelle sieht folgendermassen aus: =@ANZAHL2(Vorgaben!A3:A15000)

Was mache ich falsch?

Gruss
Richi

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

Betreff
Datum
Anwender
Anzeige
AW: Formel in VBA
02.05.2023 09:52:00
Daniel
Hi
wahrscheinlich schreibst du die Formel falsch in die Zelle.

verwendest du .Formula = Formel01 oder .Value = Formel01 , dann müsste die Formel in englisch geschrieben sein. (CountA statt Anzahl2)
wenn du die Formel in landestypischer Schreibweise angeben willst, dann musst du .FormulaLocal = Formel01 verwenden.
Allerdings funktionert dann dein Code auch nur mit einem Deutschen Excel.

ein weiteres Problem ist, dass Excel den Variablennamen in Hochkkommas verlangt, wenn der Name Sonderzeichen enthält (und dazu gehört auch das einfache Leerzeichen).
In Excel selbst geht das automatisch, so dass man es meistens gar nicht mitbekommt, aber in VBA muss man die Hochkkommas selber setzen. Da sie nicht stören, wenn sie unnötig sind, sollte man sie immer verwenden:
 Formel01 = "=Anzahl2('" & Worksheets(i).Name & "'!A3:A15000)"
und noch ein Tipp für länger Formeln:
binde die Variablen nicht direkt ein, sondern erstelle erst die Formel mit einem Dummy-Text und tausche diesen dann aus.
sind zwar ein paar Zeilen mehr Code, ist aber viel übersichtlicher, wenn die Formeln länger werden und die Variable mehrfach verwendet wird:

Formel01 = "=Anzahl2('xxx'!A3:A15000)"
Formel01 = Replace(Formel01, "xxx", Worksheets(i).Name)
Bei Schleifen musst du natürlich aufpassen, dass du dir den Originalentwurf mit den Dummy-Texten nicht überschreibst, hier also mit einer zweiten Variable arbeiten

Gruß Daniel


Anzeige
AW: Formel in VBA
02.05.2023 10:14:59
Richi
Hallo Daniel
Besten Dank. Leider hab ich immernoch das selbe Problem
Bei der Formel wird nach dem = Zeichen ein @ hinzugefügt. Sollte es aber nicht :-)

=@Anzahl2(Vorgaben!A3:A15000)

Hier mein Code:

Sub Tabellenblätter_auslesen()

Dim wb As Workbook
Dim wsZ, wsQ As Worksheet
Dim i, x As Integer

Set wb = ThisWorkbook
Set wsZ = wb.Worksheets("Tabellen Index")
    
wsZ.Select
wsZ.Columns("A:H").ClearContents
wsZ.Cells(1, 1).Select

x = 3
wsZ.Cells(1, 1) = "Tabellen Index"
wsZ.Cells(2, 1) = "Tabelle"
wsZ.Cells(2, 2) = "Anz. Zeilen"
wsZ.Cells(2, 3) = "Anz. Spalten"
wsZ.Cells(2, 4) = "Adresse"
wsZ.Cells(2, 5) = "Anzahl Namen"




For i = 1 To Worksheets.Count

    wsZ.Cells(x, 1) = Worksheets(i).Name
    wsZ.Cells(x, 2) = Worksheets(Worksheets(i).Name).Cells(Worksheets(Worksheets(i).Name).Rows.Count, 1).End(xlUp).Row
    wsZ.Cells(x, 3) = Worksheets(Worksheets(i).Name).Cells(2, Worksheets(Worksheets(i).Name).Columns.Count).End(xlToLeft).Column
    Formel01 = "=Anzahl2('" & Worksheets(i).Name & "'!A3:A15000)"

    wsZ.Cells(x, 5) = Formel01
    x = x + 1
    Worksheets(Worksheets(i).Name).Select
Next i
wsZ.Select
wsZ.Cells(1, 1).Select
End Sub


Anzeige
AW: Formel in VBA
02.05.2023 10:23:11
Daniel
natürlich hast du immer noch das gleiche Problem, weil du den Hauptfehler nicht korrigiert hast.
Das mit dem ' ist ja nur ein Nebenproblem, dass nur dann relevant ist, wenn deine Tabellenblattnamen Sonderzeichen enthalten.

Wenn du die Formel auf Deutsch schreibst, musst du die mit .FormulaLocal in die Zelle schreiben.
Du verwendest immer noch .Value (dann müsste die Formel in Englisch sein), bzw du gibst gar nichts an, was einem .Value entspricht, da .Value die Standardeigenschaft die Zelle ist, die angewendet wird wenn keine Angaben gemacht werden.

Ersetze also
wsZ.Cells(x, 5) = Formel01
durch
wsZ.Cells(x, 5).FormulaLocal = Formel01
noch besser ist, du schreibst die Forme auf englisch, dann funktioniert der Code in jeder Länderversion:
    Formel01 = "=CountA('" & Worksheets(i).Name & "'!A3:A15000)"

    wsZ.Cells(x, 5).Formula = Formel01

Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige