Frage zu VBA
13.05.2014 19:08:08
Christian
nachstehenden Code habe ich mit Hilfe vom euch hier im Forum (dafür nochmal Danke) und über die mailing-Seiten von hier zusammengebastelt.
Er macht auch das was er soll.
Im Forum ist oftmals von schlechten Programmierstil zu lesen ist, der von den VBA-Cracks kritisiert wird, und da ich noch wenig Ahnung davon habe, möchte ich mir nicht gleich von Anfang an unnütze Sachen angewöhnen.
Wie sieht das ein Profi, was ist noch zu verbessern, wo sind noch Schwachstellen?
Für Aufklärung danke ich euch im Vorraus!
MfG Christian
Private Sub CommandButton15_Click()
'Neue Position aus Userform ufposeintragen mit Kurztext eintragen und weiter und Abfrage ob in _
Stamm eintragen
Dim FrageSpeichern&
FrageSpeichern = MsgBox("Neue Position auch im Stamm speichern?" & Chr(10) & "Ja = In LV ü _
bernehmen und im Stamm speichern" & Chr(10) & "Nein = Nur im LV speichern", _
vbQuestion + vbYesNoCancel, "Neue Position")
If FrageSpeichern = vbCancel Then Exit Sub
If FrageSpeichern = vbYes Then
'In LVZ und Stamm eintragen
Call UserForm_Activate
'Eingaben prüfen
'Doppelte Nummer vermeiden
Dim Bereich As Range
Dim Letzte As Long
If [R2500] = "" Then
Letzte = [R2500].End(xlUp).Row
Else
Letzte = 2500
End If
Set Bereich = ActiveSheet.Range("R27:R" & Letzte) _
.Find(TextBox5, lookat:=xlWhole)
If Bereich Is Nothing Then
If Me.TextBox11 = "" Then
MsgBox "Bitte einen Kurztext eigeben", , "LVZ - Userform-Eingaben prüfen"
Me.TextBox11.SetFocus
Exit Sub
End If
If Me.TextBox12 = "" Then
MsgBox "Bitte einen Matchcode eingeben", , "LVZ - Userform-Eingaben prüfen"
Me.TextBox12.SetFocus
Exit Sub
End If
If Me.ComboBox2.ListIndex = -1 Then
MsgBox "Bitte erst einen Positionstyp wählen", , "LVZ - Userform-Eingaben prüfen"
Me.ComboBox2.SetFocus
Exit Sub
End If
If Me.TextBox5 = "" Then
MsgBox "Bitte erst die Pos.-Nr. eingeben", , "LVZ - Userform-Eingaben prüfen"
Me.TextBox5.SetFocus
Exit Sub
End If
If Me.TextBox3 = "" Then
MsgBox "Bitte erst eine Menge eingeben", , "LVZ - Userform-Eingaben prüfen"
Me.TextBox3.SetFocus
Exit Sub
End If
If Me.ComboBox3.ListIndex = -1 Then
MsgBox "Bitte erst eine Einheit wählen", , "LVZ - Userform-Eingaben prüfen"
Me.ComboBox3.SetFocus
Exit Sub
End If
If Me.ListBox3.ListIndex = -1 Then
MsgBox "Bitte erst einen Hersteller wählen", , "LVZ - Userform-Eingaben prüfen"
Me.ListBox3.SetFocus
Exit Sub
End If
If Me.ListBox4.ListIndex = -1 Then
MsgBox "Bitte erst einen Händler wählen", , "LVZ - Userform-Eingaben prüfen"
Me.ListBox4.SetFocus
Exit Sub
End If
If Me.ListBox5.ListIndex = -1 Then
MsgBox "Bitte erst eine Kategorie wählen", , "LVZ - Userform-Eingaben prüfen"
Me.ListBox5.SetFocus
Exit Sub
End If
'Position in LVZ
With wksLvz
wksLvz.Cells(lngZeileLvz + 1, 19).Value = (Me.TextBox11.Value) 'Spalte S-Kurztext
wksLvz.Cells(lngZeileLvz + 1, 20).Value = CDbl(Me.TextBox3.Value) 'Spalte T-Menge
wksLvz.Cells(lngZeileLvz + 1, 18).Value = (Me.TextBox5.Value) 'Spalte R-Pos-Nr.
wksLvz.Cells(lngZeileLvz + 1, 17).Value = Me.ComboBox2.Value 'Spalte Q-Pos.-Typ
wksLvz.Cells(lngZeileLvz + 1, 21).Value = Me.ComboBox3.Value 'Spalte U-Einheit
End With
'Neue Position in Stamm speichern
Dim lz As Long
Dim arrNumbers, varNumber, lngNumber As Long
Dim arrZ(1 To 94)
With Sheets("Positionen")
lz = .Range("B:B").Find("*", SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, SearchFormat:=False).Row + 1
If lz 2 Then
arrNumbers = .Range(.Cells(1, 1), .Cells(lz - 1, 1))
For Each varNumber In arrNumbers
If lngNumber