Excel 2000: Makro soll Formel schreiben

Hallo!

Ich möchte gerne von einem Makro eine Formel in eine Tabelle schreiben lassen, dabei hab ich aber Probleme wenn ich Kommazahlen schreiben will. Oft funktionieren die Makros nur wenn die Einstellung für das Dezimaltrennzeichen von Komma auf Punkt umgestellt wird.

Ich verwende den folgenden Befehl, wobei ‚a1‘ ein Double mit dem Wert 983,1 ist:
ActiveCell.FormulaR1C1 = „=“ + Trim(a1) + " / rc37"

Hat „a1“ den Wert 983, dann funktionierts. Was mache ich falsch.

Schöne Grüße
Peter Aschenberger

Wie soll denn die Formel sein?

ActiveCell.FormulaR1C1 = „=“ + Trim(a1) + " / rc37"

Moin Peter,

also ich habe den Eindruck, daß das, was Du da versucht hast, hinten und vorne nicht stimmt, sorry :wink: (vielleicht ist es auch nur zu früh für mich heute morgen).
Zunächst mal vermute ich, daß Du _ Formula _ meintest und nicht _ FormulaR1C1 , zweitens kennt das Makro kein A1 , sondern nur Range(„A1“).Value, drittens weiß ich nicht so recht, was Du mit dem _ Trim _ vor hast, viertens kann ich mir nicht erklären, was das rc37 soll, denn es passt weder zu _ FormulaR1C1 , noch ist es eine Zellenangabe, und fünftens solltest Du als Verknüpfungsoperator für Strings nicht mehr das **+** verwenden, denn das ist vor vielen Jahren durch das & ersetzt worden.

So, aber um Dir helfen zu können, mußt Du mal die Excel-Formel so angeben, wie Du sie direkt eingeben würdest. Das kannst Du dann gleich mal als Makro aufzeichnen, um dafür eine korrekte _ FormulaR1C1 _-Entsprechung zu erhalten. Was davon dann noch angepasst werden muß (z.B. durch _ Trim _ oderso), mußt Du dann noch erläutern.

Kristian

Zunächst mal vermute ich, daß Du _ Formula _
meintest und nicht _ FormulaR1C1 _

Wenn ich in Excel _ =13,13/ZS70 _ eingebe und von einem Makro aufgezeichnen lasse, dann erhalte ich _ ActiveCell.FormulaR1C1 = „=13.13/RC70“ _

das Makro kein A1 , sondern nur
Range(„A1“).Value

A1 ist kein Zellbezug sondern eine Variable meines Makros, die als Double deklariert wird.

recht, was Du mit dem _ Trim _ vor hast,

Weiß ich selber auch nicht hat mir unser EDV-Mensch so vor geschlagen, alles weitere geht aber über seinen Horizont :wink:

kann ich mir nicht erklären, was das rc37 soll,
denn es passt weder zu _ FormulaR1C1 _, noch ist es

das ist sehr wohl eine Zellangabe und zwar in der Z1S1-Bezugsart und soll heißen gleiche Reihe(row) fixe Spalte(colummn) 70

eine Zellenangabe, und fünftens solltest Du als
Verknüpfungsoperator für Strings nicht mehr das
+ verwenden, denn das ist vor vielen Jahren
durch das & ersetzt worden.

Danke für den Tipp.

So, aber um Dir helfen zu können, mußt Du mal die Excel-Formel
so angeben, wie Du sie direkt eingeben würdest. Das kannst Du
dann gleich mal als Makro aufzeichnen, um dafür eine korrekte
_ FormulaR1C1 _-Entsprechung zu erhalten. Was davon
dann noch angepasst werden muß (z.B. durch _ Trim _

Im wesentlichen möchte ich die Funktion die oben schon beschrieben habe in die Zelle schreiben, nur das eben anstatt des Zahlenwerts im Makro eine Variable stehen muß und der Zahlenwert der Variable in die Formel eingesetzt werden muss, weil die Variable in der Tabelle nicht existiert.

Herzlichsten Dank für die schnelle Antwort
Peter

A1 ist kein Zellbezug sondern eine Variable
meines Makros, die als Double deklariert wird.

Achso, dann ist klar.

recht, was Du mit dem _ Trim _ vor hast,

Weiß ich selber auch nicht hat mir unser EDV-Mensch so vor
geschlagen, alles weitere geht aber über seinen Horizont :wink:

Wahrscheilich kannte er die Funktion aus einer anderen Sprache, in der damit auch Zahlenformate
angepasst werden können, aber bei VBA wirkt sie nur auf Strings, nicht auf Zahlen.
Statt der Trim-Funktion kannst Du die von unten nehmen.

das ist sehr wohl eine Zellangabe und zwar in der
Z1S1-Bezugsart und soll heißen gleiche Reihe(row) fixe
Spalte(colummn) 70

Ja, stimmt, hatte ich nicht aufgepasst.

So, nun aber nochmal zu dem Problem:

In VBA und auch in der FormulaR1C1-Nomenklatur von Excel wird als Dezimal-Trennzeichen
immer der Punkt verwendet, unabhängig von der Ländereinstellung des Systems. Anders ist es
bei dem, was als Excel-Formel hinten rauskommt. Arbeitest Du also statt mit FormulaR1C1
mit Formula, hast Du kein Problem mit dem Komma, nur hier fehlt dann die relative Bezugsart.
Lösung:
Du mußt dafür sorgen, daß in dem String, den Du für FormulaR1C1 vorbereitest, immer der
Dezimal punkt verwendet wird, und das kannst Du mit der folgenden Funktion erreichen,
die bei Dir das Trim ersetzt:

Function EigenesKomma(dblZahl As Double, Optional ByVal intKommastellen As Integer, Optional strTrennzeichen As String) As String
'Kristian Zarse für Wer-Weiss-Was.de, 04.12.02
'Artikel: http://www.wer-weiss-was.de/cgi-bin/forum/showarticle.fpl?ArtikelID=1370981
Dim VorKomma As String
Dim Komma As String
Dim NachKomma As String
 
 'der Round-Funktion kann als Parameter für die Anzahl der
 'Kommastellen offenbar maximal 22 übergeben werden, und
 'der Wert wird hier als Voreinstellung verwendet, was
 'zur Wirkung hat, daß praktisch gar nicht gerundet wird.
 'Notwendig ist das Runden deshalb, weil die Operation
 '"Z - Fix(Z)" immer etwas Krümelkacke an der 15. Stelle
 'hinter´m Komma liefert, warum auch immer.
 If intKommastellen 
Vielleicht hätte es sowas doch schon in VBA gegeben, aber ich habe nichts gefunden.

Kristian

ich bin begeistert…
ich kann mich nur aufs allerherzlichste bedanken

Peter