Moin Excel-Experten,
leider hab ich ein kleines....ja nenn ich es mal so.... Problem.
Ich versuche gerade für die Arbeit eine Excel-Datei zu erstellen, mit der Fehler im Betrieb gemeldet werden können.
Im Prinzip, soll die Datei geöffnet werden und der Button für die Eingabe gedrückt werden. Dann soll sich die Maske mit
den Eingabefeldern öffnen. Die Eingaben sollen erfolgen und die soll dann per Knopfdruck gespeichert werden.
Die 2. Funktion die erfüllt sein soll, ist die Selektion und Filterung der eingegebenen Daten. Das heißt auf der Startseite soll ein
2. Button mit Tabelle sein, der zu den Eingaben führt und auch wieder mit einer Maske die vorher eingegebenen Daten selektiert und
anzeigt.
Ich habe dazu schon grob einen Datei erstellt und mir auch schon das ein oder andere aus verschiedenen Internetforen zusammen gesucht.
Leider reichen meine doch relativ eingeschränkten Kenntnisse nicht weiter aus, um die anstehenden Probleme zu lösen. Vielleicht
kann es einer oder mehrere von euch.
Zur Beschreibung: Die Eingabe Maske hat 10 Eingabefelder und 4 Comandbuttons und ein Listenfeld in dem die Daten angezeigt werden.
Option Explicit
Option Compare Text
Private Const iCONST_ANZAHL_EINGABEFELDER As Integer = 10
Private Const lCONST_STARTZEILENNUMMER_DER_TABELLE As Long = 2
Private Sub CommandButton1_Click()
Call EINTRAG_ANLEGEN
End Sub
Private Sub CommandButton2_Click()
Call EINTRAG_LOESCHEN
End Sub
Private Sub CommandButton3_Click()
Call EINTRAG_SPEICHERN
End Sub
Private Sub CommandButton4_Click()
Unload Me
End Sub
Private Sub ListBox1_Click()
Call EINTRAG_LADEN_UND_ANZEIGEN
End Sub
Private Sub UserForm_Activate()
If ListBox1.ListCount > 0 Then ListBox1.ListIndex = 1
End Sub
Private Sub UserForm_Initialize()
Call LISTE_LADEN_UND_INITIALISIEREN
End Sub
' ************************************************************************************************
' VERARBEITUNGSROUTINEN
' ************************************************************************************************
'
Private Sub LISTE_LADEN_UND_INITIALISIEREN()
Dim lZeile As Long
Dim lZeileMaximum As Long
Dim i As Integer
For i = 1 To iCONST_ANZAHL_EINGABEFELDER
Me.Controls("TextBox" & i) = ""
Next i
ListBox1.Clear
ListBox1.ColumnCount = 10
ListBox1.ColumnWidths = "0;;;;;;;;;"
lZeileMaximum = Tabelle1.UsedRange.Rows.Count
For lZeile = lCONST_STARTZEILENNUMMER_DER_TABELLE To lZeileMaximum
If IST_ZEILE_LEER(lZeile) = False Then
ListBox1.AddItem lZeile
ListBox1.List(ListBox1.ListCount - 1, 1) = CStr(Tabelle1.Cells(lZeile, 1).Text)
ListBox1.List(ListBox1.ListCount - 1, 2) = CStr(Tabelle1.Cells(lZeile, 2).Text)
ListBox1.List(ListBox1.ListCount - 1, 3) = CStr(Tabelle1.Cells(lZeile, 3).Text)
ListBox1.List(ListBox1.ListCount - 1, 4) = CStr(Tabelle1.Cells(lZeile, 4).Text)
ListBox1.List(ListBox1.ListCount - 1, 5) = CStr(Tabelle1.Cells(lZeile, 5).Text)
ListBox1.List(ListBox1.ListCount - 1, 6) = CStr(Tabelle1.Cells(lZeile, 6).Text)
ListBox1.List(ListBox1.ListCount - 1, 7) = CStr(Tabelle1.Cells(lZeile, 7).Text)
ListBox1.List(ListBox1.ListCount - 1, 8) = CStr(Tabelle1.Cells(lZeile, 8).Text)
ListBox1.List(ListBox1.ListCount - 1, 9) = CStr(Tabelle1.Cells(lZeile, 9).Text)
ListBox1.List(ListBox1.ListCount - 1, 10) = CStr(Tabelle1.Cells(lZeile, 10).Text)
End If
Next lZeile
End Sub
Private Sub EINTRAG_LADEN_UND_ANZEIGEN()
Dim lZeile As Long
Dim i As Integer
For i = 1 To iCONST_ANZAHL_EINGABEFELDER
Me.Controls("TextBox" & i) = ""
Next i
If ListBox1.ListIndex >= 0 Then
lZeile = ListBox1.List(ListBox1.ListIndex, 0)
For i = 1 To iCONST_ANZAHL_EINGABEFELDER
Me.Controls("TextBox" & i) = CStr(Tabelle1.Cells(lZeile, i).Text)
Next i
End If
End Sub
Private Sub EINTRAG_SPEICHERN()
Dim lZeile As Long
Dim i As Integer
If ListBox1.ListIndex = -1 Then Exit Sub
lZeile = ListBox1.List(ListBox1.ListIndex, 0)
For i = 1 To iCONST_ANZAHL_EINGABEFELDER
Tabelle1.Cells(lZeile, i) = Me.Controls("TextBox" & i)
Next i
ListBox1.List(ListBox1.ListIndex, 0) = TextBox1
ListBox1.List(ListBox1.ListIndex, 1) = TextBox2
ListBox1.List(ListBox1.ListIndex, 2) = TextBox3
ListBox1.List(ListBox1.ListIndex, 3) = TextBox4
ListBox1.List(ListBox1.ListIndex, 4) = TextBox5
ListBox1.List(ListBox1.ListIndex, 5) = TextBox6
ListBox1.List(ListBox1.ListIndex, 6) = TextBox7
ListBox1.List(ListBox1.ListIndex, 7) = TextBox8
ListBox1.List(ListBox1.ListIndex, 8) = TextBox9
ListBox1.List(ListBox1.ListIndex, 9) = TextBox10
End Sub
Private Sub EINTRAG_LOESCHEN()
Dim lZeile As Long
If ListBox1.ListIndex = -1 Then Exit Sub
If MsgBox("Sie möchten den markierten Datensatz wirklich löschen?", _
vbQuestion + vbYesNo, "Sicherheitsabfrage!") = vbYes Then
lZeile = ListBox1.List(ListBox1.ListIndex, 0)
Tabelle1.Rows(CStr(lZeile & ":" & lZeile)).Delete
ListBox1.RemoveItem ListBox1.ListIndex
End If
End Sub
Private Sub EINTRAG_ANLEGEN()
Dim lZeile As Long
lZeile = lCONST_STARTZEILENNUMMER_DER_TABELLE
Do While IST_ZEILE_LEER(lZeile) = False
lZeile = lZeile + 1
Loop
Tabelle1.Cells(lZeile, 1) = CStr("")
ListBox1.AddItem lZeile
ListBox1.List(ListBox1.ListCount - 1, 1) = CStr("" & lZeile)
ListBox1.List(ListBox1.ListCount - 1, 2) = CStr("" & lZeile)
ListBox1.List(ListBox1.ListCount - 1, 3) = CStr("" & lZeile)
ListBox1.List(ListBox1.ListCount - 1, 4) = CStr("" & lZeile)
ListBox1.List(ListBox1.ListCount - 1, 5) = CStr("" & lZeile)
ListBox1.List(ListBox1.ListCount - 1, 3) = ""
ListBox1.List(ListBox1.ListCount - 1, 4) = ""
ListBox1.List(ListBox1.ListCount - 1, 5) = ""
ListBox1.List(ListBox1.ListCount - 1, 6) = ""
ListBox1.List(ListBox1.ListCount - 1, 7) = ""
ListBox1.List(ListBox1.ListCount - 1, 8) = ""
ListBox1.List(ListBox1.ListCount - 1, 9) = ""
ListBox1.ListIndex = ListBox1.ListCount - 1
TextBox1.SetFocus
TextBox1.SelStart = 0
TextBox1.SelLength = Len(TextBox1)
End Sub
Private Function IST_ZEILE_LEER(ByVal lZeile As Long) As Boolean
Dim i As Long
Dim sTemp As String
sTemp = ""
For i = 1 To iCONST_ANZAHL_EINGABEFELDER
sTemp = sTemp & Trim(CStr(Tabelle1.Cells(lZeile, i).Text))
Next i
If Trim(sTemp) = "" Then
IST_ZEILE_LEER = True
Else
IST_ZEILE_LEER = False
End If
End Function
Für die 2 Maske zur Filterung habe ich leider noch nichts, außer das es auch 10 Ausgabefenster sein müssen und diese auch in einem Listenfeld
angezeigt werden.
Dafür habe ich mal 2 Screenshots zum besseren Verständnis angehängt....
Das alles ist natürlich nicht in Stein gemeißelt, wenn ihr Verbesserungen oder strukturiertere Vorschläge habt, immer raus damit.
Gleiches gilt für die Optik.
LG und vielen Dank an alle Mitdenker/Helfer/Ideengeber/Weitergeber/Unterstützer und und und :)
P.S. hab den Code nochmal als Anhang mitgeschickt, weil ich gesehen habe, das er hier mit Smilys angezeigt wird.