Suchfunktion
#1
Hallo,

habe mal eine Excel angehangen in der ich eine Userform Suchen eingebaut habe.
Momentan ist es so das die Suche anhand der vergebenen ID(Auswahl Frame) die Einträge in die TextBoxen, aus der mit der ID übereinstimmenden Zeile die füllt.


Wie bekomme ich es hin das ich nach mehreren Kriterien die TextBoxen mit den dazu gehörigen Zeile füllen kann.
 
Code:
Option Explicit

Private Sub cboAuswahl_DropButtonClick()
Dim Listindex As String

On Error Resume Next
If cboAuswahl.Listindex <> 0 Then

   TboID = Cells(cboAuswahl.Listindex + 1, 1)
   TboDatum = Cells(cboAuswahl.Listindex + 1, 2)
   TboSchicht = Cells(cboAuswahl.Listindex + 1, 3)
   TboEingetragenvon = Cells(cboAuswahl.Listindex + 1, 4)
   TboBereich = Cells(cboAuswahl.Listindex + 1, 5)
   TboMaschine = Cells(cboAuswahl.Listindex + 1, 6)
   TboProblem = Cells(cboAuswahl.Listindex + 1, 7)
   TboStandby = Cells(cboAuswahl.Listindex + 1, 8)
   TboLösung = Cells(cboAuswahl.Listindex + 1, 9)
   TboVerantwortlich = Cells(cboAuswahl.Listindex + 1, 10)
   TboErledigtam = Cells(cboAuswahl.Listindex + 1, 11)
   TboNotizen = Cells(cboAuswahl.Listindex + 1, 12)
   
Else
   TboID = ""
   TboDatum = ""
   TboSchicht = ""
   TboEingetragenvon = ""
   TboBereich = ""
   TboMaschine = ""
   TboProblem = ""
   TboStandby = ""
   TboLösung = ""
   TboVerantwortlich = ""
   TboErledigtam = ""
   TboNotizen = ""
End If
End Sub
Private Sub Bildspeicher_Click()
Dim sPath As String
  sPath = ActiveWorkbook.Path & "\" & TboID
  If TboID.Text > "" Then
  Shell "Explorer.exe " & sPath, vbNormalFocus
' Dir(sPath & "\" & TboID.Text, vbDirectory) > "" Then

Else
MsgBox "ID für Bildordner fehlt"
End If

End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = vbFormControlMenu Then
       MsgBox "Nicht schließen über den (x) Button, Abbrechen benutzen"
       Cancel = True
End If
End Sub
Private Sub InitializeCboVerantwortlich()
   Dim i As Long
   Me.cboVerantwortlich.Clear
   With Sheets("Stammdaten")
       For i = 3 To Cells(Rows.Count, 7).End(xlUp).Row
           If Not .Cells(i, 7) = Empty Then Me.cboVerantwortlich.AddItem .Cells(i, 7)
       Next
   End With
End Sub

Private Sub cmdÜbernehmen_Click()
Dim XZeile As Long
If TboID = "" Then Exit Sub
If TboID.Listindex = 0 Then
   XZeile = [A10000].End(xlUp).Row + 1
Else
   XZeile = TboID.Listindex + 1
End If
On Error Resume Next
Cells(XZeile, 1) = TboID
Cells(XZeile, 2) = TboDatum
Cells(XZeile, 3) = TboSchicht
Cells(XZeile, 4) = TboEingetragenvon
Cells(XZeile, 5) = TboBereich
Cells(XZeile, 6) = TboMaschine
Cells(XZeile, 7) = TboProblem
Cells(XZeile, 8) = cboInArbeit
Cells(XZeile, 9) = TboLösung
Cells(XZeile, 10) = TboVerantwortlich
Cells(XZeile, 11) = TboErledigtam
Cells(XZeile, 12) = TboNotizen

TboID = ""
TboDatum = ""
TboSchicht = ""
TboEingetragenvon = ""
TboBereich = ""
TboMaschine = ""
TboProblem = ""
TboStandby = ""
TboLösung = ""
TboVerantwortlich = ""
TboErledigtam = ""
TboNotizen = ""


Userform_Initialize
End Sub

Private Sub CommandButton3_Click()
Unload Me

End Sub

Private Sub Userform_Initialize()
lblID = ActiveSheet.[A3].Value
lblDatum = ActiveSheet.[B3].Value
LblSchicht = ActiveSheet.[C3].Value
LblEingetragenvon = ActiveSheet.[D3].Value
Lblbereich = ActiveSheet.[E3].Value
lblMaschine = ActiveSheet.[F3].Value
LblProblem = ActiveSheet.[g3].Value
'LblStandby = ActiveSheet.[h3].Value
lblLösung = ActiveSheet.[i3].Value
lblVerantwortlich = ActiveSheet.[j3].Value
LblErledigtam = ActiveSheet.[k3].Value
LblNotizen = ActiveSheet.[l3].Value

Dim aRow, i As Long
Application.EnableEvents = False
cboAuswahl.Clear
aRow = [A10000].End(xlUp).Row
cboAuswahl.AddItem ""
For i = 2 To aRow
   cboAuswahl.AddItem Cells(i, 1)
Next i
cboAuswahl.Listindex = 0
Application.EnableEvents = True
End Sub
Vielleicht kann mir ja jemand helfen.


Gruß Arnold


Angehängte Dateien
.xlsm   Forum_Version.xlsm (Größe: 707,55 KB / Downloads: 7)
Top
#2
Hi Arnold,

ich hab mir Dein Beispiel nicht angeschaut. und beziehe mich erst mal auf Deine Frage.

Zitat:Wie bekomme ich es hin das ich nach mehreren Kriterien die TextBoxen mit den dazu gehörigen Zeile füllen kann.

Das setzt voraus, dass Du erst mal eine oder mehrere Bedingungen setzt. Eine Bedingung ist eigentlich was mit If oder Select Case ..

Im Moment setzt Du für das Füllen der TextBoxen gar keine, Du füllst sie entsprechend der Auswahl in der cboAuswahl.
Anders betrachtet ist das Deine eine Bedingung Smile Da die ID sicher eindeutig ist, würde eine zweite Bedingung hier auch keinen Sinn machen.

Wenn Du nun andere Bedingungen hinzufügen willst, könntest Du eine zweite Box nehmen und dort alle Inhalte eintragen, die sich aus der Auswahl der ersten Box ergeben. Du müsstest nur überlegen, ob das ein eindeutiges Ergebnis liefert, sonst brauchst Du noch weitere … Na ja, und Du müsstest die ID-Box sicher leer lassen, damit diese Auswahl nicht die anderen übersteuert.

Du könntest z.B. die erste Box mit allen Deinen Daten füllen. Intelligenterweise so, dass bei mehrfachem Auftreten eines Datums dieses nur einmal in der Box auftaucht. Du wählst ein Datum aus. Dann gehst Du in einer Schleife über alle Zeilen und schaust z.B., welche Namen am gewählten Datum vorkommen und füllst damit die zweite Box. Wenn die Namen eindeutig sind, merkst Du dir noch die Zeilennummer für das Füllen der TextBoxen. Meist reicht das aber nicht, Du brauchst noch die Vornamen. Schlimmstenfalls reicht das auch nicht, da wäre eine Personalnummer nicht schlecht.

Du könntest auch eine cbo mit einer Listbox kombinieren und Dir nach Auswahl des Datums eine Listbox mit allen Treffern zum Datum füllen und dort dann die Zeile für die TextBoxen wählen...
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#3
Hallo,

habe jetzt mal etwas zusammengestellt(gebastelt) das den Tabelleninhalt in einer Listbox zum auswählen auflistet und dann durch anklicken die ID in die cbo Auswahl einträgt und mit diesen Daten dann die TextBoxen füllt.


Code:
Option Explicit
Private Sub cboAuswahl_Change()
Dim Listindex As String
On Error Resume Next
If cboAuswahl.Listindex > 0 Then
    TboID = Cells(cboAuswahl.Listindex + 1, 1)
    TboDatum = Cells(cboAuswahl.Listindex + 1, 2)
    TboSchicht = Cells(cboAuswahl.Listindex + 1, 3)
    TboEingetragenvon = Cells(cboAuswahl.Listindex + 1, 4)
    TboBereich = Cells(cboAuswahl.Listindex + 1, 5)
    TboMaschine = Cells(cboAuswahl.Listindex + 1, 6)
    TboProblem = Cells(cboAuswahl.Listindex + 1, 7)
    TboStandby = Cells(cboAuswahl.Listindex + 1, 8)
    TboL?sung = Cells(cboAuswahl.Listindex + 1, 9)
    TboVerantwortlich = Cells(cboAuswahl.Listindex + 1, 10)
    TboErledigtam = Cells(cboAuswahl.Listindex + 1, 11)
    TboNotizen = Cells(cboAuswahl.Listindex + 1, 12)
   
Else
    TboID = ""
    TboDatum = ""
    TboSchicht = ""
    TboEingetragenvon = ""
    TboBereich = ""
    TboMaschine = ""
    TboProblem = ""
    TboStandby = ""
    TboL?sung = ""
    TboVerantwortlich = ""
    TboErledigtam = ""
    TboNotizen = ""
End If
End Sub
Private Sub cboAuswahl_DropButtonClick()
Dim Listindex As String
On Error Resume Next
If cboAuswahl.Listindex > 0 Then
    TboID = Cells(cboAuswahl.Listindex + 1, 1)
    TboDatum = Cells(cboAuswahl.Listindex + 1, 2)
    TboSchicht = Cells(cboAuswahl.Listindex + 1, 3)
    TboEingetragenvon = Cells(cboAuswahl.Listindex + 1, 4)
    TboBereich = Cells(cboAuswahl.Listindex + 1, 5)
    TboMaschine = Cells(cboAuswahl.Listindex + 1, 6)
    TboProblem = Cells(cboAuswahl.Listindex + 1, 7)
    TboStandby = Cells(cboAuswahl.Listindex + 1, 8)
    TboL?sung = Cells(cboAuswahl.Listindex + 1, 9)
    TboVerantwortlich = Cells(cboAuswahl.Listindex + 1, 10)
    TboErledigtam = Cells(cboAuswahl.Listindex + 1, 11)
    TboNotizen = Cells(cboAuswahl.Listindex + 1, 12)
   
Else
    TboID = ""
    TboDatum = ""
    TboSchicht = ""
    TboEingetragenvon = ""
    TboBereich = ""
    TboMaschine = ""
    TboProblem = ""
    TboStandby = ""
    TboL?sung = ""
    TboVerantwortlich = ""
    TboErledigtam = ""
    TboNotizen = ""
End If
End Sub
Private Sub Bildspeicher_Click()
Dim sPath As String
   sPath = ActiveWorkbook.Path & "\" & TboID
   If TboID.Text > "" Then
If Dir(sPath, vbDirectory) > "" Then
   Shell "Explorer.exe " & sPath, vbNormalFocus
Else
MsgBox "ID f?r Bildordner fehlt"
End If
End If
End Sub

Private Sub lboID_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim ID As Integer
With lboID
ID = .Listindex
cboAuswahl.Text = .List(ID, 0)
End With
End Sub
Private Sub TboDatum_Change()
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = vbFormControlMenu Then
        MsgBox "Nicht schlie?en ?ber den (x) Button, Abbrechen benutzen"
        Cancel = True
End If
End Sub
Private Sub InitializeCboVerantwortlich()
    Dim i As Long
    Me.cboVerantwortlich.Clear
    With Sheets("Stammdaten")
        For i = 3 To Cells(Rows.Count, 7).End(xlUp).Row
            If Not .Cells(i, 7) = Empty Then Me.cboVerantwortlich.AddItem .Cells(i, 7)
        Next
    End With
End Sub
Private Sub cmd?bernehmen_Click()
Dim XZeile As Long
If TboID = "" Then Exit Sub
If TboID.Listindex = 0 Then
    XZeile = [A10000].End(xlUp).Row + 1
Else
    XZeile = TboID.Listindex + 1
End If
On Error Resume Next
Cells(XZeile, 1) = TboID
Cells(XZeile, 2) = TboDatum
Cells(XZeile, 3) = TboSchicht
Cells(XZeile, 4) = TboEingetragenvon
Cells(XZeile, 5) = TboBereich
Cells(XZeile, 6) = TboMaschine
Cells(XZeile, 7) = TboProblem
Cells(XZeile, 8) = cboInArbeit
Cells(XZeile, 9) = TboL?sung
Cells(XZeile, 10) = TboVerantwortlich
Cells(XZeile, 11) = TboErledigtam
Cells(XZeile, 12) = TboNotizen
TboID = ""
TboDatum = ""
TboSchicht = ""
TboEingetragenvon = ""
TboBereich = ""
TboMaschine = ""
TboProblem = ""
TboStandby = ""
TboL?sung = ""
TboVerantwortlich = ""
TboErledigtam = ""
TboNotizen = ""

Userform_Initialize
End Sub
Private Sub CommandButton3_Click()
Unload Me
End Sub
Private Sub Userform_Initialize()
lblID = ActiveSheet.[A3].Value
lblDatum = ActiveSheet.[B3].Value
LblSchicht = ActiveSheet.[C3].Value
LblEingetragenvon = ActiveSheet.[D3].Value
Lblbereich = ActiveSheet.[E3].Value
lblMaschine = ActiveSheet.[F3].Value
LblProblem = ActiveSheet.[g3].Value
'LblStandby = ActiveSheet.[h3].Value
lblL?sung = ActiveSheet.[i3].Value
lblVerantwortlich = ActiveSheet.[j3].Value
LblErledigtam = ActiveSheet.[k3].Value
LblNotizen = ActiveSheet.[l3].Value
Dim j As Integer
Dim lzeile As String
lzeile = Sheets("Elektronisches Schichtbuch").UsedRange.Rows.Count
For j = 1 To 11
Next
With Me.lboID
 .ColumnCount = 12
 .ColumnHeads = True
 .RowSource = "a4:k" & lzeile
 .ColumnWidths = "1cm;2,5cm;1,9cm;5cm;1,9cm;11cm;0cm;0cm;0cm;5cm;2cm"
   End With
Dim aRow, i As Long
Application.EnableEvents = False
cboAuswahl.Clear
aRow = [A10000].End(xlUp).Row
cboAuswahl.AddItem ""
For i = 2 To aRow
    cboAuswahl.AddItem Cells(i, 1)
Next i
cboAuswahl.Listindex = 0
Application.EnableEvents = True
End Sub


Weitere Suchkriterien muss ich nochmal schauen ob ich das hinbekomme.
Gruß Arnold
Top
#4
Hallo,

habe da mal eine Frage zur Netzwerkfreigabe.
ich gebe eine Tabelle im Netz frei und  zum Eintragen in diese benutze ich eine Userform  (Schichtbuch). Bei Mehrfachbearbeitung kommt dann beim abspeichern immer das Fenster welcher Eintrag verwendet werden soll.
An dieser Stelle kann dann ein Datenverlust entstehen. Meine Lösung war jetzt beim starten der Userform in die nächste freie Zeile schon eine ID in Zelle A zu setzen und die Datei zwischen zu speichern, damit für jeden weiteren Anwender die Zeile als belegt erscheint und somit für sich die nächste leere  Zeile verwendet wird um die nächst höhere ID einzutragen.Leider funktioniert das auch nicht zuverlässig, getestet bei 2 Anwendern, was wird dann erst bei 10 oder mehr.
Hat von euch jemand einen Lösungsansatz füu die Netzfreigabe für mehrere Benutzer? Wäre um jedem Tipp dankbar.

Gruß Arnold
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste