AW: mehrer Fehler im Code
02.05.2014 02:51:21
fcs
Hallo Andy,
Folgende Probleme:
1.Wenn ein Teil entnommen wird kann an in einer Combobox eine Anlage auswählen in der das Ersatzteil verwendet werden soll.
Allerdings funktionieren die ersten 3 Einträge aus der Dropdownliste nicht.
Und es soll die Auswahl nicht wie bisher direkt anwählen sondern mit dem OK Button bestätigt werden
passe den Code des Userforms wie folgt an:
Private Sub Ok_Click()
With Me.ComboBox1
If .ListIndex = -1 Then
MsgBox "Bitte erst einen Eintrag in der Combobox wählen!"
ComboBox1.SetFocus
Else
Worksheets("Datenliste").Range("d3").Value = Me.ComboBox1.Value
Unload Me
End If
End With
End Sub
Private Sub UserForm_Initialize()
With ComboBox1
.ColumnCount = 1
.ColumnHeads = False
ComboBox1.RowSource = "Datenliste!b3:b18"
End With
Worksheets("Datenliste").Range("d3").ClearContents
End Sub
2. beim entnehmen schreibt mein Quellcode die Zeilennummer der ausgewählten Artikelzeile 2mal unter die Ersatzteilliste.
Wieso?.
3. Beim zubuchen wird die Zeilennummer 1 mal darunter gesetzt
Wieso? Weil du entsprechende Anweisungen im Code stehen hast.
With Worksheets("Ersatzteilliste")
.Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0).Value = ActiveCell.Row
End With
Taucht 2 bzw. 1 mal im Code auf. Diese Zeilen löschen!
4. Wenn ein Artikel zu gebucht wird muss ein Aktueller Stückpreis eingegeben werden.
Dieser ist als String dimensioniert damit ich ihn mit isnumeric prüfen kann ob es eine zahl ist.
Der eingegebene Preis wird beim Ersatzteil buchen in der Ersatzteilliste in spalte M eingetragen
Aber leider nur als String somit schreibt Excel ungültige Zahl,. Es müsste aber eine zahl werden
Die Inputbox und auch deine Variablen liefern Text(String)-Werte. Also trägt Excel bei Datum und Zahlen auch Text in die Zellen, wenn du keine Konverson in Exceldatums- bzw. Dezimalwert im Makro vornimmst.
zeilenanzahl = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
ActiveSheet.Cells(zeilenanzahl, 21).Value = CDate(datum2)
ActiveSheet.Cells(zeilenanzahl, 22).Value = CDbl(menge2)
ActiveSheet.Cells(zeilenanzahl, 23).Value = Name2
ActiveSheet.Cells(zeilenanzahl, 24).Value = wnummer
ActiveSheet.Cells(zeilenanzahl, 25).Value = CDbl(preisaktuell)
ActiveSheet.Cells(zeilenanzahl, 25).Style = "Currency"
Die Datumskonversion musst du auch im Entnahme-Makro machen. Mit korrekter Konversion funktionieren dann auch die Autofilter und Formeln.
5.Modul3
Wenn der Button nötige Artikel zur Nachbestellung suchen gedrückt wird.
Habe ich jede Zeile in das Datenblatt kopieren lassen wenn in spalte F Nachbestellung steht.
Die Namensliste in einer MSGbox ausgegeben. Und danach wieder aus der Datenliste gelöscht.
Das geht doch bestimmt einfacher.
Warum setzt du nicht "einfach" den Autofilter für Spalte F (Flag Nachbestellung) auf "Nachbestellung" ?
Dann hast eine Liste mit allen Informationen.
Sub suchen()
Dim wks As Worksheet
Set wks = Worksheets("Ersatzteilliste")
With wks
If .FilterMode = True Then
.ShowAllData
End If
.AutoFilter.Range.AutoFilter Field:=6, Criteria1:="Nachbestellung"
End With
End Sub
Ansonsten kann man dein Makro wie folgt vereinfachen:
Sub suchen()
Dim suche As String
Dim z As Integer, Zeile As Long
With Worksheets("Ersatzteilliste")
If .FilterMode = True Then
.ShowAllData
End If
suche = "Nachbestellung"
z = 0
strg = ""
For Zeile = 5 To .Cells(.Rows.Count, 6).End(xlUp).Row
'wenn die Zelle den gesuchten Wert enthält:
If .Cells(Zeile, 6).Value = suche Then
z = z + 1
strg = strg & vbLf & .Cells(Zeile, 1).Value & " - " & .Cells(Zeile, 4).Value
End If
Next Zeile
End With
strg = "Es sind folgende " & z & " Artikel nachzubestellen" & vbLf _
& "Bezeichnung - Istmenge" & vbLf & strg
MsgBox strg, vbInformation, "Bestellliste:"
End Sub
Gruß
Franz