Laufzeitfehler 91
02.04.2020 19:06:57
Patrick
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 in der Suche "3-400-E" eingebe, es öffne, bearbeite und anschließend speichern möchte zeigt er mir folgenden fehler an:
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
search = ""
ListBox1.Clear
lZeile = 2
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
Bearbeitungsform:
Public Sub CommandButton1_Click()
Tabelle7.Unprotect
With Tabelle7
x = .Columns(1).Find(Trim(Label5.Caption)).Row
.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