Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema InputBox
BildScreenshot zu InputBox InputBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema TextBox
BildScreenshot zu TextBox TextBox-Seite mit Beispielarbeitsmappe aufrufen

Inputbox - Rückgabe des Wertes in Formel verwende

Betrifft: Inputbox - Rückgabe des Wertes in Formel verwende von: Marius
Geschrieben am: 16.11.2014 17:41:02

Hallo zusammen

habe hier ein Problem was mich fast zur Verzeiflung treibt:

Ich möchte in einen Zellbereich mit schleife in die Spalte daneben Formeln
eintragen lassen.
Die Formel setzt sich zusammen aus
- Bearbeitungszeit (Spalte links daneben)
- Fester Zuschlagsfaktor( ist als Zahl in der Formel hinterlegt(*2,2)
- varibaler Wert für Stundensatz (std)
Hierzu verwende ich eine Inputbox folgendermassen:



std = InputBox("Minutenfaktor?", , 0.58) 

(Datentyp double)
0,58 als defaultwert => kann sich aber ändern

Diesen wert schreibe ich in die Formel zurück:
Cells(1, clm).Offset(x, 1).Formula = "=RC[-1]* 1.1* " & std & ""

ABER: wenn jetzt die Inputbox kommt, ist der wert mit KOMMA belegt, obwohl default
das Dezimalzeichen drin ist.

Dann kommt die Fehlermeldung: Anwendungs- oder objektorientierter fehler

Wenn ich in der Inputbox das Komma überschreibe, funktioniert es

Hat jemand einen Tipp, wie entweder die Inputbox meine default eingabe übernimmt
oder der Rückgabewert umgewandelt werden kann?
Ich habe mit cdbl probiert, bin da aber nicht weiter gekommen.....

Das einzige was mir jetzt noch einfallen würde wäre den Wert aus der Inputbox in eine freie Zelle zu schreiben und dann wieder in die Formel zu integrieren, aber das geht doch sicher eleganter?

VG Marius

  

Betrifft: AW: Inputbox - Rückgabe des Wertes in Formel verwende von: Tino
Geschrieben am: 16.11.2014 17:49:52

Hallo,
vielleicht geht es so.

std = InputBox("Minutenfaktor?", , 0.58)
std = Replace(std, ",", ".")
Gruß Tino


  

Betrifft: AW: Inputbox - Rückgabe des Wertes in Formel verwende von: Marius
Geschrieben am: 16.11.2014 19:26:52

Hallo

die Komma Eingabe wird korrigiert, ja.

Aber, wenn man 0.58 in die Inputbox eingibt: 58
Wie kann das sein?

Hab jetzt getestet ist auch das Gleiche wenn man die Variable in die Zelle schreibt

Sonst noch Ideen?

Kann man die "falsche" Eingabe in der Inputbox schon abfangen?

Vg Marius


  

Betrifft: Vorschlag mit UF von: Matze Matthias
Geschrieben am: 16.11.2014 22:01:24

Hallo Marius,
wenn du nur mit der Inputbox arbeiten willst musst du deinen String "std" auf alle möglichen Fehler prüfen, das erreichst du mit Schleifen die jedesmal das Ergebnis prüfen.
Wie man da in der Inputbox Fehlereingaben vermeiden kann weis ich nicht.

Das ganze wird etwas einfacher oder übersichtlicher wenn du mit einer UserForm arbeitest die eine TextBox enthält und einen Commandbutton zum übertragen des Wertes(std)

Allerdings hab ich eine Frage, wie wird dein eigentliches Makro gestartet?

Private Sub TextBox1_Change()
   With TextBox1
      If Val(.Value) > 59 Then
         MsgBox "Es sind max. 59 Minuten erlaubt."
         .Value = ""
         .SetFocus
      End If
   End With
End Sub

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
   With TextBox1
      Select Case KeyAscii
         Case 48 To 57
         Case Else
            MsgBox "Es sind nur Zahlen von 0 - 9 möglich."
            KeyAscii = 0
            .Value = ""
            .SetFocus
            Exit Sub
      End Select
      If Len(.Value) >= 2 Then
         MsgBox "Es ist nur eine zweistellige Eingabe erlaubt."
         KeyAscii = 0
         .Value = ""
         .SetFocus
      End If
   End With
End Sub
Somit dürfte alles abgedeckt sein,

Gruß Matze
Ps.: Eine Musterdatei oder deine Datei hier hochladen erleichtert uns eventuell das was du vorhast.
Ist nur ein Gedanke mit der Uform,... Ich bin nächste Woche nicht da , wird Tino oder ein anderer Helfer weitermachen.


  

Betrifft: AW: Inputbox - Rückgabe des Wertes in Formel verwende von: Jürgen V.
Geschrieben am: 16.11.2014 22:11:07

Hallo Marius,

ich denke, am einfachsten kommt zu einer Lösung, indem Du die Formel lokalisiert, also in Landessprache umstellst. Dazu nutzt Du die "FormulaLocal"- statt der "Formula"-Eigenschaft. Dann musst Du jedoch das Komma als Dezimaltrennzeichen verwenden (auch in dem festen Teil der Formel) und den relativen Zellbezug statt mit "RC" (für "row" und "column") mit "ZS" (für "Zeile" und "Spalte") herstellen. Aus den eckigen Klammern werden dabei runde. Also z. B. so:

Cells(1, clm).Offset(x, 1).FormulaLocal = "=ZS(-1) * 1,1 * " & std 
Gruß, Jürgen


  

Betrifft: versuch es mal mit Application.InputBox von: Tino
Geschrieben am: 17.11.2014 16:53:23

Hallo,
versuch es mal so.

Dim std As Variant

Const constVorGabe! = 0.58
'...
'...

std = Application.InputBox("Minutenfaktor?", , CStr(constVorGabe), Type:=1)
If VarType(std) = vbBoolean Then Exit Sub
std = Replace(CStr(std), ",", ".")

'...
'...
Gruß Tino


  

Betrifft: AW: Inputbox - Rückgabe des Wertes in Formel verwende von: Marius
Geschrieben am: 17.11.2014 19:48:04


Hallo nochmal

das hier führte zum erfolg.

Cells(1, clm).Offset(x, 1).FormulaLocal = "=ZS(-1) * " & std & "*" & fee

Jetzt werden die Formeln wie gewünscht eingetragen

Das Thema mit der falschen Eingabe vernachlässige ich jetzt, da
das Komma der Inputbox ja genommen wird.

Bedanke mich recht herzlich bei euch!

VG Marius


  

Betrifft: AW: Inputbox - Rückgabe des Wertes in Formel verwende von: Marius
Geschrieben am: 17.11.2014 19:49:27

Hier noch die Datei..... Falls von Interesse

www.herber.de/bbs/user/93838.xlsm


  

Betrifft: Dein Makro ,... von: Matze Matthias
Geschrieben am: 18.11.2014 17:13:08

Hallo Marius,

hab deine Zeilen mal ein wenig verändert , sch au es dir bitte mal an:

Option Explicit

Sub testformel2()
Application.ScreenUpdating = False

Dim clm As Long 'letzte Spalte
Dim rw As Long 'letzte Reihe
Dim i As Long 'Schleifenzähler
Dim x As Integer 'braucht keiner
Dim std As Double 'Minutenfaktor wählbar
Dim fee As Double 'Handlingzuschlag wählbar

clm = Cells(1, Columns.Count).End(xlToLeft).Column + 1 'erste LEERE Spalte
rw = Cells(Rows.Count, 1).End(xlUp).Row 'letzte zeile in "A"

    std = InputBox("Minutenfaktor", , 0.58)
    fee = InputBox("Handlingzuschlag", , 1.1)
    
    'hier kann das Offset entfallen
    Cells(1, clm).Value = "Formel Berechnung" 'Trägt in Spaltenkopf die Bez. ein

    For i = 2 To rw
    'x = x + 1 ' << WAS SOLL DAS ausgeklammert??
    'hier stand vorher Cells(1, clm).Offest... somit Zeile 1 falsch
    Cells(i, clm).FormulaLocal = "=ZS(-1) * " & std & "*" & fee 'Formel eintragen
    Next i
    
Columns.AutoFit
Application.ScreenUpdating = True
End Sub
Gruß Matze


  

Betrifft: AW: Dein Makro ,... von: marius
Geschrieben am: 18.11.2014 20:21:02

Hallo Matze

du hast es ja noch sehr schön optimiert + verschlankt funktioniert bestens
Da ich zugegebenermassen noch ziemlich am Anfang stehe
(hatte letzte Woche einen VBA "Crash" Kurs) gehe ich halt
so vor, das Gelernte anzuwenden und Schritt für Schritt zu modifizieren, da denkt man leider
gerne mehrfach ums Eck

Aber durch solche Besipiele wie deines kommen schöne AHA Effekte zustande

danke dafür

VG Marius


 

Beiträge aus den Excel-Beispielen zum Thema "Inputbox - Rückgabe des Wertes in Formel verwende"