ich forste mich schon seit Tagen durch euer Forum um mein aktuelles Projekt umsetzen zu können und ihr habt mir indirekt, bis zum jetzigen Zeitpunkt, durch eure guten Erklärungen und Code-Schnipsel sehr geholfen. Vielen Dank schonmal dafür !
Nun stehe ich vor einem Problem, wo meine Kenntnisse einfache nicht mehr ausreichen... vielleicht sehe ich auch den Wald vor lauter Bäume nicht mehr und habe inzwischen zu oft und zu lange auf die Codezeilen geschaut.
Allgemein vor Weg:
Das Projekt wird mit Sicherheit nicht 100% sauber geschrieben worden sein und bin daher über jeden Hinweis eurerseits dankbar !
Das Projekt und Problem:
Ich habe eine Ersatzteilliste erstellt (6 Tabellen), eine Startseite zur Navigation zur erleichterten Bedienung, sowie eine Bestand u. Bestellliste mit Filter (zum Ausdrucken der Liste). Da manche Ersatzteile für andere Baugruppen eingesetzt werden können, habe ich eine zentrale Tabelle (Bestand u. Bestellliste) erstellt und die Ersatzteile in den anderen Tabellen mit dieser verknüpft. Ich wollte damit bezwecken, dass egal wo ich gucke, immer die selbe Anzahl u. Bestellmenge angezeigt wird.
Zusätzlich zu den o.g. Tabellen habe ich mir eine Userform erstellt um die Lager und Bestelliste schnellstmöglich zu bearbeiten. Die Userform beinhaltet eine ListBox (dort wird die komplette Ersatzteilliste angezeigt) und eine Suchfunktion um die Liste zu filtern. Wenn man die Suchfunktion verwendet werden nun die dementsprechenden verbleibenden Treffer angezeigt und man kommt per Doppelklick in den "Bearbeitungsmodus". Dort kann man nun den Lagerbestand u. Bestellmenge bearbeiten und anschließend speichern (es sollte dann in der Tabelle übernommen werden).
Nun zum Problem: Wenn ich jetzt die Einträge in der Liste ohne Suchfunktion bearbeite, werden die richtigen Zellen geändert. Sobald ich aber die Suchfunktion nutze und mir noch z.B. 4 Einträge überbleiben, diesen dann zum Bearbeiten Doppelklicke, anschließend bearbeite, werden die falschen Zellen geändert. Es werden die Zellen geändert, die ohne Funktion an der Stelle der Listbox gestanden hätten, bearbeitet. Ich gehe mal davon aus das ich irgendwo einen Fehler in den Variablen habe ... Daher wende ich mich an euch.
Userform, ListBox und Suchfunktion:
Private Sub cmdschliessen_Click()
Unload Me
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
x = Me.ListBox1.ListIndex + 2
With bearbeiten
.Label5 = " " & CStr(ListBox1.List(ListBox1.ListIndex, 0))
.Label8 = " " & CStr(ListBox1.List(ListBox1.ListIndex, 1))
.TextBox1 = CStr(ListBox1.List(ListBox1.ListIndex, 2))
.TextBox2 = CStr(ListBox1.List(ListBox1.ListIndex, 3))
End With
Unload UserForm
bearbeiten.Show
End Sub
Private Sub TextBox1_Change()
Const STARTROW = 3
Dim i&, iCnt&, r&, c&
Dim sn, tmp
With Tabelle7
iCnt = .Range("A" & Rows.Count).End(xlUp).Row - STARTROW + 1
ReDim sn(1 To iCnt, 1 To 13)
For i = 1 To iCnt
tmp = .Range("A" & (i + 2) & ":F" & (i + 2))
If InStr(1, concat(tmp), TextBox1.Text) > 0 Then
r = r + 1
For c = 1 To UBound(tmp, 2)
sn(r, c) = tmp(1, c)
Next
End If
Next
ListBox1.List = sn '
End With
End Sub
Private Function concat(ByVal arr, Optional ByVal delim$ = " ") As String
concat = Join(Application.Transpose(Application.Transpose(arr)), delim)
End Function
Private Sub UserForm_Initialize()
Dim lZeile As Long
'Alle TextBoxen leer machen
search = ""
ListBox1.Clear 'Zuerst einmal die Liste leeren
lZeile = 2 'Start in Zeile 2, Zeile 1 sind die Überschriften
Do While Trim(CStr(Tabelle7.Cells(lZeile, 4).Value)) ""
With Me.ListBox1
.ColumnCount = 4
.ColumnWidths = "100; 380; 30; 30"
.AddItem
.List(ListBox1.ListCount - 1, 0) = Tabelle7.Cells(lZeile, 1).Text
.List(ListBox1.ListCount - 1, 1) = Tabelle7.Cells(lZeile, 2).Text
.List(ListBox1.ListCount - 1, 2) = Tabelle7.Cells(lZeile, 3).Text
.List(ListBox1.ListCount - 1, 3) = Tabelle7.Cells(lZeile, 4).Text
End With
lZeile = lZeile + 1 'Nächste Zeile bearbeiten
Loop
End Sub
Maske zum Bearbeiten:
Public Sub CommandButton1_Click()
Tabelle7.Unprotect
With Tabelle7
.Cells(x, 3) = TextBox1.Value
.Cells(x, 4) = TextBox2.Value
End With
Tabelle7.Protect
Unload Me
UserForm.Show
End Sub
Private Sub CommandButton2_Click()
Unload Me
UserForm.Show
End Sub
Private Sub SpinButton1_Change()
TextBox1.Text = SpinButton1.Value
End Sub
Private Sub SpinButton2_Change()
TextBox2.Text = SpinButton2.Value
End Sub
Private Sub TextBox1_Change()
If IsNumeric(TextBox1.Value) Then
SpinButton1.Value = TextBox1.Value
End If
End Sub
Private Sub TextBox2_Change()
If IsNumeric(TextBox2.Value) Then
SpinButton2.Value = TextBox2.Value
End If
End Sub
Private Sub bearbeiten_Initialize()
SpinButton1.SmallChange = 1
SpinButton2.SmallChange = 1
End Sub
Modul:Option Explicit
Public x As Long
Sub gehezu1()
Sheets("Zweiarmige Abzieher").Select
End Sub
Sub gehezu2()
Sheets("Dreiarmige Abzieher").Select
End Sub
Sub gehezu3()
Sheets("Trennvorrichtung").Select
End Sub
Sub gehezu4()
Sheets("Abziehvorrichtung").Select
End Sub
Sub gehezu5()
Sheets("Innenauszieher").Select
End Sub
Sub gehezu6()
Sheets("Kugellagerabzieher").Select
End Sub
Sub gehezu0()
Sheets("Startseite").Select
End Sub
Sub gehezu7()
Tabelle7.Select
End Sub
Sub openusr()
UserForm.Show
End Sub
Sub aktlbst()
Tabelle7.Unprotect
Tabelle7.Range("$A$1:$D$182").AutoFilter Field:=4, Criteria1:=">0", Operator:=xlAnd
Tabelle7.Protect
End Sub
Zusätlich zum Code habe ich euch mein Projekt hochgeladen, um euch noch besser ein Bild davon machen zu können, wo von ich rede... für Verbesserungsvorschläge jeglicher Art bin ich offen ! Ich hoffe, ich konnte euch alles so gut wie möglich schildern.https://www.herber.de/bbs/user/136272.xlsm
Dann bleibt mir nichts anderes mehr übrig als euch einen schönen restlichen Abend zu wünschen und auf eine schnelle Rückmeldung zu warten.
Bis dahin, euch alles Gute und vor allem Gesundheit,
euer Patrick