Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Verbesserunsvorschläge
#1
Hallo,

hab mich mal an ein kleines Makro getraut, gibt es hier noch etwas zu verbessern?


Angehängte Dateien
.xlsm   benzinverbrauch.xlsm (Größe: 33,02 KB / Downloads: 5)
Antworten Top
#2
Hi,

diesen Teil

Zitat:intErsteLeereZeile = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row + 1
    ActiveSheet.Cells(intErsteLeereZeile, 1).Value = Me.txtDatum.Value
    ActiveSheet.Cells(intErsteLeereZeile, 2).Value = Me.txtbenzin.Value
    ActiveSheet.Cells(intErsteLeereZeile, 3).Value = CCur(Me.txtPreis.Value)
    ActiveSheet.Cells(intErsteLeereZeile, 4).Value = CCur(Me.txtKilometer.Value)
    ActiveSheet.Cells(intErsteLeereZeile, 5).Value = Me.txtbenzin.Value / CCur(Me.txtKilometer.Value) * 100
    ActiveSheet.Cells(intErsteLeereZeile, 6).Value = CCur(Me.txtPreis.Value) / Me.txtbenzin.Value * Me.txtbenzin.Value / CCur(Me.txtKilometer.Value) * 100 / 100
    ActiveSheet.Cells(intErsteLeereZeile, 7).Value = CCur(Me.txtPreis.Value) / Me.txtbenzin.Value
    ActiveSheet.Cells(intErsteLeereZeile, 8).Value = Me.txtbenzin.Value / CCur(Me.txtKilometer.Value) * 100 / 100

kannst du so verkürzen:

Zitat:intErsteLeereZeile = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row + 1
    With ActiveSheet
        .Cells(intErsteLeereZeile, 1).Value = Me.txtDatum.Value
        .Cells(intErsteLeereZeile, 2).Value = Me.txtbenzin.Value
        .Cells(intErsteLeereZeile, 3).Value = CCur(Me.txtPreis.Value)
        .Cells(intErsteLeereZeile, 4).Value = CCur(Me.txtKilometer.Value)
        .Cells(intErsteLeereZeile, 5).Value = Me.txtbenzin.Value / CCur(Me.txtKilometer.Value) * 100
        .Cells(intErsteLeereZeile, 6).Value = CCur(Me.txtPreis.Value) / Me.txtbenzin.Value * Me.txtbenzin.Value / CCur(Me.txtKilometer.Value) * 100 / 100
        .Cells(intErsteLeereZeile, 7).Value = CCur(Me.txtPreis.Value) / Me.txtbenzin.Value
        .Cells(intErsteLeereZeile, 8).Value = Me.txtbenzin.Value / CCur(Me.txtKilometer.Value) * 100 / 100
    End With
Gruß Günter
Jeder Fehler erscheint unglaublich dumm, wenn andere ihn begehen.
angebl. von Georg Christoph Lichtenberg (1742-1799)
Antworten Top
#3
Hi Günter,

evtl. das "intErsteLeereZeile" auch noch in die With einschließen.
Code:
    With ActiveSheet
        intErsteLeereZeile = .Cells(Rows.Count, 1).End(xlUp).Row + 1
       .Cells(intErsteLeereZeile, 1).Value = Me.txtDatum.Value
...
    End With

Und "Option Explicit" am Anfang jedes Moduls (Tabellen oder Formulare oder allgemeines Modul) einfügen
Antworten Top
#4
Hi,

was mir noch aufgefallen ist:

du lässt teilweise deine Zahlen als Text schreiben.

[
Bild bitte so als Datei hochladen: Klick mich!
]

Damit kannst du nicht weiterrechnen (z.B. Gesamtsummen bilden)
Gruß Günter
Jeder Fehler erscheint unglaublich dumm, wenn andere ihn begehen.
angebl. von Georg Christoph Lichtenberg (1742-1799)
Antworten Top
#5
Hi Ralf!
Zitat:evtl. das "intErsteLeereZeile" auch noch in die With einschließen

Kann man machen, aber auch anders:  :21:
Code:
With ActiveSheet.Rows(intErsteLeereZeile)
  .Cells(1) = txtDatum
  .Cells(2) = txtbenzin
  '...
End With

Spart Bildschirmtinte, ist aber nicht unbedingt Ernst gemeint.  :19:

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)
Antworten Top
#6
Hi Ralf,

(12.02.2016, 13:42)RPP63 schrieb: Spart Bildschirmtinte, ist aber nicht unbedingt Ernst gemeint.  :19:

aber das gefällt mir!

Außerdem: gefahrene Kilometer sind keine Währung!

Also so:
Private Sub cmdEingabe_Click()
   'fügt angaben ins tabellenblatt ein 
   
   Dim intErsteLeereZeile As Long
   
   intErsteLeereZeile = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row + 1
   With ActiveSheet.Rows(intErsteLeereZeile)
      .Cells(1) = txtDatum
      .Cells(2) = txtbenzin * 1
      .Cells(3) = CCur(txtPreis)
      .Cells(4) = txtKilometer * 1
      .Cells(5) = txtbenzin / CCur(txtKilometer) * 100
      .Cells(6) = CCur(txtPreis) / txtbenzin * txtbenzin / CCur(txtKilometer) * 100 / 100
      .Cells(7) = CCur(txtPreis) / txtbenzin * 1
      .Cells(8) = txtbenzin / CCur(txtKilometer) * 100 / 100
   End With
   
End Sub
Antworten Top
#7
Danke erstmal für die Hinweise,
das mit den als Text gespeichrten Zahlen macht natürlich Sinn...
werde es natürlich ändern

LG Micha
Antworten Top
#8
Und an den TE:
  1. Du referenzierst auf das Userform mittels Me. Das ist i.O., aber überflüssig.
  2. Du schließt mit Unload frmbenzin, hier würde jetzt Me reichen Wink Unload Me
  3. Du benutzt den default .Value, i.O. aber ebenfalls überflüssig.
  4. Du versuchst, bei der Übergabe den Text der txtBoxes mittels CCur() in ein Währungsformat umzuwandeln. Prinzipiell gut, bloß was machst Du, wenn mal kein umwandelbarer Text drin steht? Viel besser ist es, eine Prüfung ins jeweilige txtBox_Exit zu schreiben, ansonsten schmiert Dir Dein Code ab.
  5. Deine Division könnte zu einem DIV/0 führen, dies ist nicht sauber.
Fazit: Dein Code funktioniert nur, wenn der Bediener keinen Fehler macht.
Dies solltest Du Dir gar nicht erst angewöhnen.

Ich stelle später mal einen Code ein, wie ich ihn schreiben würde.

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)
Antworten Top
#9
Zwischenstand, während ich schreibe:
Statt:
ActiveSheet.Cells(intErsteLeereZeile, 5).Value = Me.txtbenzin.Value / CCur(Me.txtKilometer.Value) * 100
ActiveSheet.Cells(intErsteLeereZeile, 6).Value = CCur(Me.txtPreis.Value) / Me.txtbenzin.Value * Me.txtbenzin.Value / CCur(Me.txtKilometer.Value) * 100 / 100
geht durchaus auch:
.Cells(5) = txtbenzin / txtKilometer * 100
.Cells(6) = .Cells(3) / .Cells(5)
:19:

Bis später,

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)
Antworten Top
#10
Hallo,


und was ist das für eine Rechnung:


Code:
CCur(Me.txtPreis.Value) / Me.txtbenzin.Value * Me.txtbenzin.Value / CCur(Me.txtKilometer.Value) * 100 / 100

in Zahlen: 1,169*10*10/200*10/10 =1,69 *10^2 / 200 * 1 = 0,845

wieso Kilometer in Währung umwandeln?
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top


Gehe zu:


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