Rechnen mit der Userform
#1
Moin Moin,

als VBA-Anfänger habe ich zur Userform einige Fragen. Ich schaffe es leider bisher nicht, die Userform für mich rechnen zu lassen. Das kann auch damit zusammenhängen, dass ich die Syntax der Textfelder zum Rechnen noch nicht durchblickt habe.

Hier habe ich schon die verschiedensten Methoden gefunden, aber keine hat funktioniert.
Ich stoße vor allem immer wieder auf den Laufzeitfehler 13 'unverträglich'.

Folgend seht ihr einen Beispiel-Code mit dem ich rumprobiert habe, bisher ohne Fehlerbehandlung (keine Buchstaben, usw.)


Private Sub Leistung_change()

        ThisWorkbook.Worksheets("Lüftungssystem").Range("A8").Text = _
        CDbl(Leistung.Text) * CDbl(Stunden.Text) * CDbl(Tage.Text) * CDbl(Auslastung.Text)

End Sub



Dieser Ausschnitt oben wäre doch prinzipiell nur für ein Textfeld gültig richtig? In einer Version habe ich gesehen, dass für jedes Textfeld eine eigenen Sub aufgestellt werden müsste.
Hierzu noch die Frage: Wtf ist der unterschied zwischen _change() und _click() ? Habe keine Infos gefunden Undecided 

Vielen Dank schon mal für die Hilfe
Top
#2
Hi,

bei deinem Problem kann ich dir mangels ausreichenden Kenntnissen leider nicht weiterhelfen, jedoch auf diese Frage


Zitat:Hierzu noch die Frage: Wtf ist der unterschied zwischen _change() und _click() ? Habe keine Infos gefunden

antworten.

Mit ein wenig altem Schulenglisch müsstest du eigentlich schon von selbst draufkommen. To change = ändern, wechseln, click = klicken. Bei ersterem wird das gewünschte Ereignis durch eine Änderung ausgelöst, bei Click auschließlich durch einen Klick z.B. auf einen Button.
Gruß Günter
Jeder Fehler erscheint unglaublich dumm, wenn andere ihn begehen.
angebl. von Georg Christoph Lichtenberg (1742-1799)
Top
#3
Moin!
Range.Text geht so nicht, die von Dir gewünschte Eigenschaft ist .Value
Da dies der default ist, kannst Du ihn auch weglassen.
Im Übrigen solltest Du zunächst mal auf die Umbenennung des .Name verzichten, bevor Du nicht weist, was Du da machst.
Lade mal die Datei hoch, dann kann ich Dir besser helfen!
Zitat:Moin Moin
Du kommst aber nicht aus HH, gelle?  :21:

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top
#4
Hallo Ben,

teste es mal so:
Private Sub Leistung_Change()
ThisWorkbook.Worksheets("Lüftungssystem").Range("A8").Value = _
   (0 & Leistung.Text) * (0 & Stunden.Text) * (0 & Tage.Text) * (0 & Auslastung.Text)
 'oder
Worksheets("Lüftungssystem").Range("A8").Value = _
   Application.Product(0 & Leistung, 0 & Stunden, 0 & Tage, 0 & Auslastung)
End Sub
Zur 2. Frage siehe: Online Hilfe - F1

Gruß Uwe
Top
#5
Hallo Ben,

nach meinem Dafürhalten sollte Excel auch so mit den Werten aus Textboxen rechnen können.
Schau mal hier:
   

Der Code dazu:
Code:
Private Sub CommandButton1_Click()
   With UserForm1
       Tabelle1.Range("A1").Value = .TextBox1.Value * .TextBox2.Value * .TextBox3.Value
   End With
End Sub

Das Problem ist meiner Meinung nach, dass das Change-Ereignis eintritt, sobald Du einen Wert in der Textbox "Leistung" eingibst.
Das Ereignis wird bei jedem Tastenanschlag in der Textbox "Leistung" ausgelöst. Sind die beiden anderen Textboxen dann noch leer, multiplizierst Du mit "Null".

Es wäre also sinnvoll die Berechnung erst zu starten wenn die erfolderlichen Informationen eingetragen wurden also alle Textboxen gefüllt sind. Das bedeutet in meinem Bsp. beim Verlassen der letzten Textbox3.
Das wäre dann an das Exit-Ereignis der Textbox3 gebunden.


Code:
Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
   With UserForm1
           Tabelle1.Range("A1").Value = .TextBox1.Value * .TextBox2.Value * .TextBox3.Value
   End With
End Sub

In diesem Fall kannst Du auch auf den Command-Button verzichten, da das Ereignis bei jedem Verlassen der Textbox3 "angestossen" wird.

Aus Deinem Beispiel lassen sich jedoch keine Rückschlüsse darauf ziehen, wann welche Textbox mit Werten gefüllt werden :92:.
Gruß
Ich
Top
#6
Hallo,
(02.08.2016, 21:39)IchBinIch schrieb: Das Ereignis wird bei jedem Tastenanschlag in der Textbox "Leistung" ausgelöst. Sind die beiden anderen Textboxen dann noch leer, multiplizierst Du mit "Null".

was meinst Du, warum ich jeweils "0 & " vorangestellt habe! :21:
Top
#7
Moin,

das sieht alles super aus und funktioniert! Vielen Dank schon mal dafür. Lerne gerade ne Menge dazu.  Idea   Seid ein cooles Forum, melde mich bestimmt nochmal .
Top
#8
Und da bin ich wieder  :19:

Nach vielfachen Versuchen schaffe ich es einfach nicht, das Formular über ein Dropdown zu öffnen. So nach dem Schema:


Private Sub Regelung_change()
        
        Worksheets("Lüftungssystem").Activate
        
        If ActiveCell = "Keine" Then _
        Regelung0.Show
        
End Sub


Sollte das nicht grundsätzlich möglich sein? Durch die _change-Funktion müsste es doch eigentlich auf die Änderung (Dropdown-Auswahl "Keine") reagieren oder?
Top
#9
(02.08.2016, 22:51)Kuwer schrieb: Hallo,

was meinst Du, warum ich jeweils "0 & " vorangestellt habe! :21:

Hallo Uwe,

mir ging es darum zu erklären, dass das Change-Ereignis einer Textbox für eine Berechnung, sagen wir mal supotimal ist. :32:
Schreibt Ben doch in seinem Eingangsposting er sei "VBA-Anfänger". Wobei ich mich nicht als Könner bezeichnen würde.
Ich bin mir sicher Du bist mir Welten voraus.

Gruß
Ich
Top
#10
Hallo Ben,

also ich kann Dir nicht so recht folgen.
Vielleicht beschreibst Du etwas genauer was Du vor hast und was passieren soll.

Gruß
Ich
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste