AW: Problem mit Range Überprüfung
15.06.2017 12:02:26
Piet
Hallo Balthasar,
ich habe mir auch das Programm angesehen und sage, das hast du dir sicher viel Arbeit gemacht.
Sinn eines Forums ist, dir auch Wege zu zeigen wie du deinen Code sinnvoll reduzieren kannst.
Dazu mal ein Vorschlag von mir. - Als Programmierer schaue ich mir an was doppelt, dreifach vorkommt,
und überlege wie ich das sinnvoll zusammen fassen kann. Lange Ausdrücke zum Auswerten lieber in eine
Txt Variable laden, dann kann man bei IF Then bequem mit "And" oder "Or" arbeiten. Mehrfachauswertung!!
Halb und Vollpension werte ich über Teil-Text im String aus: - If Instr(Txt,"pension") Then
Als Programmierer würde ich auch nicht über ActiveCell.Select arbeiten, soweit bist du aber noch nicht.
Höfliche bitte aus Erfahrung:
wenn du den Code umschreiben willst dann bitte -nur in einer Testdatei- !! Die Erfahrung zeigt das man sich beim Umschreiben immer selbst Fehler reinhaut. Hast du dann die Originaldatei versemmelt steht der ganze Laden still. Das darf nicht sein. Ich test wichtige Programme zuerst in meiner Entwicklungs Datei bis alles korrekt laeuft! Verbessern ja, aber auf Nummer sicher gehen!
Der Code ist mir aber zu lang um den umzuschreiben. Will dir hiermit Tipps als Anregung zum selbst basteln geben.
mfg Piet
' verkürzter Code von Piet - bitte die Rangfolge beachten!! Die Formel sollte zuerst gesetzt _
werden
'Text zum Auswerten in Variable holen !!
Txt = frmRestaurant.cboRechnung8.Value
'zuerst diesen Teil auswerten wegen: ActiveCell.Offset(1,0).Select !!
If Txt = "Frühstück a.H." Or Instr(Txt, "pension") Then
ActiveCell.Offset(0, 4).Value = "=RC[-5]*RC[-1]"
End if
If Txt = "Restaurant" or Txt = "Frühstück a.H."Or Txt = "Minibar" Or Instr(Txt, "pension") _
Then
ActiveCell.FormulaR1C1 = frmRestaurant.cboRechnung8.Value
ActiveCell.Offset(0, 4).Value = frmRestaurant.txtRechnung8.Value
End if
'dann die einzelnen Besonderheiten als eine Zeile auswerten !!
If frmRestaurant.cboRechnung8.Value = "Frühstück a.H." Then
ActiveCell.Offset(0, 3).Value = Tabelle2.Range("J3").Value
ElseIf frmRestaurant.cboRechnung8.Value = "Halbpension" Then
ActiveCell.Offset(0, 3).Value = Tabelle2.Range("J4").Value
ElseIf frmRestaurant.cboRechnung8.Value = "Vollpension" Then
ActiveCell.Offset(0, 3).Value = Tabelle2.Range("J5").Value
End if
' Original Code, ganz am Ende vor End Sub
If frmRestaurant.cboRechnung8.Value = "Restaurant" Then
ActiveCell.FormulaR1C1 = frmRestaurant.cboRechnung8.Value
ActiveCell.Offset(0, 4).Value = frmRestaurant.txtRechnung8.Value
ActiveCell.Offset(1, 0).Select
ElseIf frmRestaurant.cboRechnung8.Value = "Frühstück a.H." Then
ActiveCell.FormulaR1C1 = frmRestaurant.cboRechnung8.Value
ActiveCell.Offset(0, 3).Value = Tabelle2.Range("J3").Value
ActiveCell.Offset(0, -1).Value = frmRestaurant.txtAnzahl8.Value
ActiveCell.Offset(0, 4).Value = "=RC[-5]*RC[-1]"
ActiveCell.Offset(1, 0).Select
ElseIf frmRestaurant.cboRechnung8.Value = "Halbpension" Then
ActiveCell.FormulaR1C1 = frmRestaurant.cboRechnung8.Value
ActiveCell.Offset(0, 3).Value = Tabelle2.Range("J4").Value
ActiveCell.Offset(0, -1).Value = frmRestaurant.txtAnzahl8.Value
ActiveCell.Offset(0, 4).Value = "=RC[-5]*RC[-1]"
ActiveCell.Offset(1, 0).Select
ElseIf frmRestaurant.cboRechnung8.Value = "Vollpension" Then
ActiveCell.FormulaR1C1 = frmRestaurant.cboRechnung8.Value
ActiveCell.Offset(0, 3).Value = Tabelle2.Range("J5").Value
ActiveCell.Offset(0, -1).Value = frmRestaurant.txtAnzahl8.Value
ActiveCell.Offset(0, 4).Value = "=RC[-5]*RC[-1]"
ActiveCell.Offset(1, 0).Select
ElseIf frmRestaurant.cboRechnung8.Value = "Minibar" Then
ActiveCell.FormulaR1C1 = frmRestaurant.cboRechnung8.Value
ActiveCell.Offset(0, 4).Value = frmRestaurant.txtRechnung8. _
Value
ActiveCell.Offset(1, 0).Select
End If
End Sub