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

Makro das eine Formel schreibt

Makro das eine Formel schreibt
jens
Hallo Excel-Profis,
ich brauche dringend Eure Hilfe.
Ich trage mittels eines Makros einen Wert in eine jeweilige Zeile ein:
Sub FreierPreis()
Freipreis = CDbl(InputBox("Preis eingeben"))
Call suchpreis
End Sub

Sub suchpreis()
Dim bb
ActiveSheet.Unprotect
bb = [Eingabe!c50] - 1
Cells(bb, 16).Select
Selection = Freipreis
ActiveSheet.Protect
End Sub
Das funktioniert auch wirklich gut.
Jetzt muß ich aber in diese Zelle nicht den Wert der Eingabe "Freipreis" eintragen sondern diese auch noch durch den Wert 1+Wert der Spalte links neben der Selektion teilen.
D.h. wenn ich in Zelle P4 den Wert 10 über die Abfrage eintippe (=Freipreis) dann muß am Ende des Makros in der Zelle stehen:
=10/(1+O4)
Wie kann ich das mit dem Makro machen?
Vielen Dank für Eure Hilfe
Gruß Jens
AW: Makro das eine Formel schreibt
27.07.2010 19:58:02
jowe
Hallo Jens,
(lass select weg, kann man zu 99% eh' vergessen, macht Code nur langsam)
activesheet.cells(2,16)="=" & Freipreis & "/(1+O4)
Gruß
Jochen
AW: Makro das eine Formel schreibt
27.07.2010 21:01:57
jens
Hallo Jochen,
vielen Dank, ich brauche das ja variabel mit RC... - von daher ist die Lösung von Rudi schon mal toll.
Geht aber im Moment nur mit ganzen Zahlen (1,20 schmiert er ab) - weißt Du warum?
Gruß und vielen Dank Jens
Formel
27.07.2010 20:00:44
Rudi
Hallo,
selection.formulaR1C1="=" &Freipreis &"/(1+rc[-1])"
Gruß
Rudi
AW: Formel
27.07.2010 20:41:55
jens
Hallo Rudi,
sieht eigentlich sehr gut aus, er bringt mir aber Laufzeitfehler 1004, Anwendungs oder objektorientierter Fehler.
Habe es jetzt so:
Sub suchpreis()
Dim bb
ActiveSheet.Unprotect
bb = [Eingabe!c50] - 1
Cells(bb, 16).Select
Selection.FormulaR1C1 = "=" & Freipreis & "/(1+rc[-1])"
'Selection = Freipreis
ActiveSheet.Protect
End Sub

Gruß Jens
Anzeige
kein Fehler bei mir owT
27.07.2010 20:51:28
Rudi
AW: kein Fehler bei mir owT
27.07.2010 20:59:57
jens
Hallo Rudi,
Ich habe es jetzt mal zum Testen so gebaut:
Sub suchpreis()
Dim bb
Dim FreipreisEnde
ActiveSheet.Unprotect
bb = [Eingabe!c50] - 1
Cells(bb, 16).Select
FreipreisEnde = "=" & Freipreis & "/(1+rc[-1])"
Selection.FormulaR1C1 = FreipreisEnde
'Selection = Freipreis
ActiveSheet.Protect
End Sub
Es funktioniert - aber nur bei ganzen Zahlen.
Wenn ich 1,20 eingebe dann schmiert er ab - hast Du eine Idee warum?
Gruß und vielen Dank Jens
Idee warum
27.07.2010 21:02:50
Rudi
Hallo,
Freipreis ist ein String, der ein , enthält. Das musst du durch einen . ersetzen.
Gruß
Rudi
Anzeige
AW: Idee warum
27.07.2010 21:27:41
jens
Hallo an alle,
vielen vielen Dank.
So geht es:
Sub suchpreis()
Dim bb
Dim FreipreisEnde
ActiveSheet.Unprotect
bb = [Eingabe!c50] - 1
Cells(bb, 16).Select
FreipreisEnde = "=" & Replace(Freipreis, ",", ".") & "/(1+rc[-1])"
Selection.FormulaR1C1 = FreipreisEnde
'Selection = Freipreis
ActiveSheet.Protect
End Sub

Viele dankbare Grüße
Jens
AW: kein Fehler bei mir owT
27.07.2010 21:03:58
Ramses
Hallo
"...hast Du eine Idee warum?..:"
Ja, weil "(1+rc[-1])" eine Berechnung in VBA ist und VBA mit einem Dezimalwert nichts anfangen kann.
Schreib so, dann sollte es funktionieren
with Selection
.FormulaR1C1 = "=" & Freipreis & "/(1+rc[-1])"
.Value = .Value
End With
Gruss Rainer
Anzeige
das siehst du falsch
27.07.2010 21:13:18
Rudi
Hallo Rainer,
daFreiPreis aus ner Inputbox kommet, ist es ein String. Bei ner Dezimalzahl eben mit , anstatt .
Das bringt's durcheinander, nicht "/(1+rc[-1])"
Ergo "=" & Replace(Freipreis,",",".") & "/(1+rc[-1])"
Gruß
Rudi
Tja nun, deine Version geht dann aber auch nicht
27.07.2010 21:21:49
Ramses
Hallo
Ich hab nicht den ganzen Thread gelesen, sonst wäre mir das vielleicht aufgefallen.
Wenn aber das aus einer Inputbox kommt, dann kann ja der Anwender darauf hingewiesen werden, dass der Punkt anstelle des Kommas verwendet werden soll.
Deine Variante geht aber auch nicht, weil der Fehler bereits im ersten Codeteil auftritt und deine Lösung gar nicht mehr greifen kann
Excel müsst dann nämlich hier schon meckern
Freipreis = CDbl(InputBox("Preis eingeben"))
und kommt gar nicht zum zweiten Teil mit deiner Lösung
Gruss Rainer
Anzeige
womit du natürlich Recht hast owT
27.07.2010 21:26:27
Rudi
AW: Tja nun, deine Version geht dann aber auch nicht
27.07.2010 21:28:23
jens
Hallo an alle,
vielen vielen Dank.
So geht es:
Sub suchpreis()
Dim bb
Dim FreipreisEnde
ActiveSheet.Unprotect
bb = [Eingabe!c50] - 1
Cells(bb, 16).Select
FreipreisEnde = "=" & Replace(Freipreis, ",", ".") & "/(1+rc[-1])"
Selection.FormulaR1C1 = FreipreisEnde
'Selection = Freipreis
ActiveSheet.Protect
End Sub

Viele dankbare Grüße
Jens
so ist es egal ob Punkt oder Komma...
27.07.2010 22:11:31
Tino
Hallo,
hier eine Variante.
Sub FreierPreis()
Dim Freipreis
Freipreis = InputBox("Preis eingeben")
If IsNumeric(Freipreis) Then
Call suchpreis(Freipreis)
End If
End Sub
Sub suchpreis(ByVal Freipreis$)
Dim bb As Long
Dim FreipreisEnde$
Dim KommaOrPunk$
KommaOrPunk = IIf("0.5" * 2 = 1, ".", ",")
ActiveSheet.Protect UserInterfaceOnly:=True
bb = [Eingabe!c50] - 1
FreipreisEnde = "=" & Replace(Freipreis, ".", KommaOrPunk) & "/(1+O4)"
Cells(bb, 16).FormulaLocal = FreipreisEnde
End Sub
Gruß Tino
Anzeige
AW: so ist es egal ob Punkt oder Komma...
27.07.2010 23:51:23
jens
Hallo Tino,
vielen Dank auch.
Meine Lösung die ich mit Hilfe des Forums jetzt habe funktioniert jetzt ganz gut.
Habe in meinem Fundus auch noch etwas zu CDbl gefunden, damit kann man den Typ der MSGBox bestimmen bzw. den Wert der zurückgegeben wird.
Vielen Dank noch mal für Deine Mühe und noch eine gute Nacht.
Viele Grüße Jens
mit Selection arbeitet dieses Forum nicht ;-) oT.
28.07.2010 10:13:00
Tino
AW: das siehst du falsch
27.07.2010 21:28:12
jens
Hallo an alle,
vielen vielen Dank.
So geht es:
Sub suchpreis()
Dim bb
Dim FreipreisEnde
ActiveSheet.Unprotect
bb = [Eingabe!c50] - 1
Cells(bb, 16).Select
FreipreisEnde = "=" & Replace(Freipreis, ",", ".") & "/(1+rc[-1])"
Selection.FormulaR1C1 = FreipreisEnde
'Selection = Freipreis
ActiveSheet.Protect
End Sub

Viele dankbare Grüße
Jens
Anzeige
AW: das siehst du falsch
27.07.2010 21:29:00
jens
Hallo an alle,
vielen vielen Dank.
So geht es:
Sub suchpreis()
Dim bb
Dim FreipreisEnde
ActiveSheet.Unprotect
bb = [Eingabe!c50] - 1
Cells(bb, 16).Select
FreipreisEnde = "=" & Replace(Freipreis, ",", ".") & "/(1+rc[-1])"
Selection.FormulaR1C1 = FreipreisEnde
'Selection = Freipreis
ActiveSheet.Protect
End Sub

Viele dankbare Grüße
Jens
AW: kein Fehler bei mir owT
27.07.2010 21:27:58
jens
Hallo an alle,
vielen vielen Dank.
So geht es:
Sub suchpreis()
Dim bb
Dim FreipreisEnde
ActiveSheet.Unprotect
bb = [Eingabe!c50] - 1
Cells(bb, 16).Select
FreipreisEnde = "=" & Replace(Freipreis, ",", ".") & "/(1+rc[-1])"
Selection.FormulaR1C1 = FreipreisEnde
'Selection = Freipreis
ActiveSheet.Protect
End Sub

Viele dankbare Grüße
Jens
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige