Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema SpinButton
BildScreenshot zu SpinButton SpinButton-Seite mit Beispielarbeitsmappe aufrufen

Untergenze in VBA

Betrifft: Untergenze in VBA von: Axel Höhle
Geschrieben am: 11.08.2008 10:10:47

Hallo alle miteinander,
ich nicht weiß einfach nicht wie ich die Untergrenze Funktion in mein UserForm einbinden kann.

Kurze Erklärung:
Ich habe ein UserForm mit einem Drehfeld zum durchblättern der Zeilen, in Spalte 27 ist ein Zahlenwert mit zwei Kommastellen eingetragen, das nach jedem Drücken des Drehfeldes neu ausgelesen wird. Anhand dieses Wertes soll im UserForm die entsprechende Grafik (Name des Grafikobjektes im Userform lautet "rating") geladen werden. Die Bilder befinden sich im gleichen Verzeichnis wie die xls im Unterorder "bilder".
Die Namen der Bilder lauten "!_rating0.gif", "!_rating0,5.gif", "!_rating1.gif" usw, das geht hoch bis 10.
Es geht also um eine Bewertung in 0,5er Schritten (so nette kleine Sternchenbilder mit ganzen und halben Sternen). Und genau das ist mein Problem, ich habe folgende Lösung die schonmal funktioniert, allerdings wird dabei immer auf eine ganze Zahl aufgerundet und somit werden alle 0,5er bilder vernachlässigt:


 Me.rating.Picture = LoadPicture(ThisWorkbook.Path & "\bilder\" & "!_rating" & Format(.Cells(Me.SpinButton1.Value, 27), "0") & ".gif")



ändert man die Formel so ab daß die erste Kommastelle berücksichtigt wird...


 Me.rating.Picture = LoadPicture(ThisWorkbook.Path & "\bilder\" & "!_rating" & Format(.Cells(Me.SpinButton1.Value, 27), "0.0") & ".gif")

... müsste ich für jede Kommastelle ein bild haben damit es klappt, also "!_rating1,1.gif", "!_rating1,2.gif" usw.

Das Ganze muss doch aber auch eleganter gehen, denn es gibt doch die Funktion der Untergrenze wo man selbst die Sprünge bestimmen kann, wo der Wert dann entsprechend abgerundet wird, genau was ich also brauche:


=UNTERGRENZE(2,2;0,5) 

das z.B rundet dann auf 2 ab, sieht als aufgezeichnetes Makro so aus:

ActiveCell.FormulaR1C1 = "=FLOOR(2.2,0.5)"



Wie aber bekomme ich die Untergrenze Funktion in meine bisherige eingebaut so daß Me.SpinButton1.Value, 27 immer in 0,5er Schritten abgerundet wird?
Ich hoffe ihr habt ungefähr verstanden was mein Problem ist, für eine Antwort wäre ich sehr dankbar

MfG
Axel

  

Betrifft: AW: Untergenze in VBA von: Nepumuk
Geschrieben am: 11.08.2008 10:21:27

Hallo Axel,

warum arbeitest du da überhaupt mit Zellwerten? Nimm doch einfach den Wert des Spinbutton geteilt durch 2. Schon hast du 0,5er Schritte.

Gruß
Nepumuk


  

Betrifft: AW: Untergenze in VBA von: Axel Höhle
Geschrieben am: 11.08.2008 10:36:24

Das Rating wird aus der Zelle (AA) ausgelesen, da dort der Wert (0,00 bis 10,00) drinsteht und dieser Wert in jeder Zeile variiert. Das soll sozusagen der Bezug für die zu ladene Grafik werden.

übrigens
ThisWorkbook.Path & "\bilder\" & "!_rating"
kann man natürlich in
ThisWorkbook.Path & "\bilder\!_rating"
abkürzen, mein fehler :)


  

Betrifft: AW: Untergenze in VBA von: Nepumuk
Geschrieben am: 11.08.2008 10:42:56

Hallo Axel,

ok, ein Argument. Nächste Frage. Wozu benutzt du die Format-Funktion und nimmst nicht einfach den Zellwert? Da stehts doch richtig drin. Oder nicht?

Ich geb's ehrlich zu, so ganz verstanden hab ich das noch nicht. Was steht tatsächlich in den Zellen und welche Bildnummer soll zu welchem Zellwert angezeigt werden?

Gruß
Nepumuk


  

Betrifft: AW: Untergenze in VBA von: Axel Höhle
Geschrieben am: 11.08.2008 11:25:40

die format funktion nutze ich da somit der Wert aus Zelle AA auf eine natürliche Zahl ohne komma verkürzt (immer aufgerundet) wird.

darum erwähnte ich ja, das in der Zelle der Wert immer 2 kommastellen hat, nehmen wir mal als Beispiel: "2,23" dieser Wert wird mittels der formatfunktion auf "2" gerundet.

somit wird aus der funktion

Me.rating.Picture = LoadPicture(ThisWorkbook.Path & "\bilder\!_rating" & Format(.Cells(Me.SpinButton1.Value, 27), "0") & ".gif")



der bildlink generiert

"c:\test\bilder\!_rating2.gif"



Der Bildlink wiederum dient dazu um das Bild "c:\test\bilder\!_rating2.gif" in das Bild-Objekt "rating" auf dem Userform dynamisch zu laden. und somit sieht man nun das gif mit 2 sternen :)

Beim erneuten Klicken auf das Drehfeld wird die nächste Zeile ausgelesen
Wenn dort nun als Beispiel "3,13" in Zelle AA steht, wird dann das Bild "!_rating3.gif" geladen.


  

Betrifft: AW: Untergenze in VBA von: Erich G.
Geschrieben am: 11.08.2008 11:24:16

Hallo Axel,
probier mal

Sub tst()
Cells(1, 1).FormulaR1C1 = "=FLOOR(2.7,0.5)"
Cells(2, 1) = Application.Floor(2.7, 0.5)
Cells(3, 1) = WorksheetFunction.Floor(2.7, 0.5)
Cells(4, 1) = Application.WorksheetFunction.Floor(2.7, 0.5)
Cells(5, 1) = Fix(2.7 * 2) / 2
Cells(6, 1) = Int(2.7 * 2) / 2
End Sub

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort


  

Betrifft: AW: Untergenze in VBA von: Axel Höhle
Geschrieben am: 11.08.2008 11:51:52

ah vielen dank, wieder was gelernt :)
ich musste nur die eine Zeile wie folgt abändern:

Me.rating.Picture = LoadPicture(ThisWorkbook.Path & "bilder\!_rating" & Application.WorksheetFunction.Floor(.Cells(Me.SpinButton1.Value, 27), 0.5) & ".gif")



Vielen Dank