Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Userform erstellen für Eingaben
#11
Hallo

ich freue mich das wir die UserForm wenigstens im groben ans Laufen gebracht haben.  Anbei ein überarbeiteter Code zum kopieren.

Den Wunsch mit den Hintergrundfarben konnte ich leider nicht erfüllen, hier fehlt mir das erforderliche Progrmmier Wissen.  Im Internet fand ich einige Codes, bei mir liefen sie aber nicht!!  Dafür habe ich die Eingabefeld auf Enable = False gesetzt, sie können so nicht mehr beliebig angewaehlt werden.  Man sieht es an dem Pfeil in der ComboBox.  d.h., der User muss die vorgeschriebene Reihenfolge einhalten, erst dann wird die naechste ComboBox freigegeeben.  In UF1 habe ich noch ein paar Eingabe Prüfungen neu eingefügt.

Zitat:UF1 bei der Suche bspw. im Feld "Produktionslinie" bei mehreren gefundenen, gleichen Einträgen

Da bin ich mir nicht sicher wie das konkret gemeint ist??  Unter der gleichen Linie und dem gleichen Prozess können ja unter verschiedenem Datum unterschiedliche Probleme eingetragen sein.  Dann nur den ersten Eintrag auflisten waere sicher nicht sinnvoll.  Oder sehe ich da was falsch???

mfg  Gast 123

Code:
'UForm1 Modul
Dim Linie As String, Prozess As String
Dim Mitarb As String, Problem As String
Dim lz As Long, j As Long, Indx As Long
Dim Datum As Date, Bemerkung As String
Dim Txt1 As String

Private Sub cmdCancel_Click()
  Unload Me
End Sub


Private Sub cboClear_Click()
With Worksheets("Daten")
  lz = .Cells(Rows.Count, 2).End(xlUp).Row
  UserForm1.lstErgebnis.Clear
  Linie = UserForm1.cmb_ProdLinie
  Prozess = UserForm1.cmb_AbfuellLinie
  'Schleife zum auflisten aller IstErgebnisse
  For j = 2 To lz
     If .Cells(j, 4) = Linie And _
        .Cells(j, 5) = Prozess Then
        Datum = .Cells(j, 2)
        Mitarb = .Cells(j, 3)
        Problem = .Cells(j, 6)
        Indx = UserForm1.lstErgebnis.ListCount
        'Datum Format falsch, kann Format nicht benutzen!!
        UserForm1.lstErgebnis.AddItem CStr(Datum)
        UserForm1.lstErgebnis.List(Indx, 1) = Mitarb
        UserForm1.lstErgebnis.List(Indx, 2) = Problem
     End If
  Next j
  'Fokus auf Datum setzen
  UserForm1.TextBox1.SetFocus
End With
End Sub


Private Sub cmdSave_Click()
With Worksheets("Daten")
  lz = .Cells(Rows.Count, 2).End(xlUp).Row
  Indx = UserForm1.lstErgebnis.ListIndex
  Txt1 = UserForm1.TextBox1.Text
  Bemerkung = UserForm1.txtRemarks.Text
 
  If Indx < 0 Then MsgBox "Kein ListenBox Eintrag ausgewählt !!": Exit Sub
  If Txt1 = "" Then MsgBox "Kein Eintrag in - Auftrag erledigt !!": Exit Sub
  If Bemerkung = "" Then MsgBox "Kein Eintrag in - Bemerkungen !!": Exit Sub
 
  Linie = UserForm1.cmb_ProdLinie
  Prozess = UserForm1.cmb_AbfuellLinie
  Datum = UserForm1.lstErgebnis.List(Indx, 0)
  Mitarb = UserForm1.lstErgebnis.List(Indx, 1)
  Problem = UserForm1.lstErgebnis.List(Indx, 2)

  'ausgewaehlten Datensatz suchen
  For j = 2 To lz
  If .Cells(j, 2) = Datum And _
     .Cells(j, 3) = Mitarb And _
     .Cells(j, 4) = Linie And _
     .Cells(j, 5) = Prozess And _
     .Cells(j, 6) = Problem Then
     .Cells(j, 8) = UserForm1.txtRemarks   'Bemerkung
     .Cells(j, 7) = UserForm1.TextBox1     'Erledigt/Datum
      Exit Sub
  End If
  Next j
  MsgBox "Fehler beim Datensatz vergleichen - Nicht gebucht !!"
End With
End Sub


Private Sub TextBox1_AfterUpdate()
  UserForm1.txtRemarks.SetFocus
End Sub


Private Sub UserForm_Initialize()
  lz = Worksheets("Daten").Cells(Rows.Count, 2).End(xlUp).Row
  cmb_ProdLinie.RowSource = "Daten!D2:D" & lz
  cmb_AbfuellLinie.RowSource = "Daten!E2:E" & lz
End Sub



Code:
'UForm2 Modul
Dim Datum As Date, lz As Long

Private Sub cmd_Cancel_Click()
  Unload Me
End Sub


Private Sub cmd_Save_Click()
With Worksheets("Daten")
  lz = .Cells(Rows.Count, 2).End(xlUp).Row
  If .Cells(lz, 2) = UserForm2.txt_Datum And _
     .Cells(lz, 3) = UserForm2.cmb_Name And _
     .Cells(lz, 4) = UserForm2.cmb_ProdLinie And _
     .Cells(lz, 5) = UserForm2.cmb_AbfuellLinie And _
     .Cells(lz, 6) = UserForm2.txt_Bemerkung Then
      MsgBox "dieser Datensatz erxistiert schon !!": Exit Sub
  End If
 
   lz = lz + 1
  .Cells(lz, 1) = lz - 1                      'LastCell
  .Cells(lz, 2) = UserForm2.txt_Datum         'Datum
  .Cells(lz, 3) = UserForm2.cmb_Name          'Name
  .Cells(lz, 4) = UserForm2.cmb_ProdLinie     'Produkt
  .Cells(lz, 5) = UserForm2.cmb_AbfuellLinie  'Prozess
  .Cells(lz, 6) = UserForm2.txt_Bemerkung     'Bemerkung
End With
End Sub


Private Sub cmb_Name_Change()
  cmb_ProdLinie.Enabled = True
End Sub

Private Sub cmb_ProdLinie_Change()
  cmb_AbfuellLinie.Enabled = True
End Sub


Private Sub UserForm_Initialize()
  lz = Worksheets("Daten").Cells(Rows.Count, 2).End(xlUp).Row
  Datum = CDate(Now)
  UserForm2.txt_Datum = Left(Datum, 10)
  cmb_Name.RowSource = "Daten!C2:C" & lz
  cmb_ProdLinie.RowSource = "Daten!D2:D" & lz
  cmb_AbfuellLinie.RowSource = "Daten!E2:E" & lz

  cmb_ProdLinie.Enabled = False
  cmb_AbfuellLinie.Enabled = False
End Sub
[-] Folgende(r) 1 Nutzer sagt Danke an Gast 123 für diesen Beitrag:
  • Imicklife
Antworten Top
#12
Guten Morgen,

wollte den Code testen, hatte aber im letzten Nachtdienst sehr viel zu tun. Zur - Ursprünglich war meine Vorstellung,  nur die mit Status „nein“ erledigten Aufgaben anzeigen zu lassen und dazu die Produktionslinien (Linie A usw.). Wähle ich dann bspw. Linie A aus, dann die dazugehörigen Störungen gelistet. In erster Linie Soll die externe Abteilung die unerledigten Aufgaben abarbeiten und rückmelden. Ich denke das Filtern für noch mehr Informationen muss dann im Sheet 2 direkt erledigt werden, zumindest fehlt mir die Vorstellung wie man es anders lösen könnte?

VG iMicklife
Antworten Top
#13
Hallo

kein Problem, wir können in den Code iene weitere Auswertung mit einfügen  (ungetestet, sollte aber klappen)
Dazu holen wir den Wert in Spalte G als Variable Txt1 und schauen ob dort "Nein" oder "nein" steht, oder ob die Zelle leer ist.

mfg  Gast 123  

Code:
Private Sub cboClear_Click()
With Worksheets("Daten")
  lz = .Cells(Rows.Count, 2).End(xlUp).Row
  UserForm1.lstErgebnis.Clear
  Linie = UserForm1.cmb_ProdLinie
  Prozess = UserForm1.cmb_AbfuellLinie
  'Schleife zum auflisten aller IstErgebnisse
  For j = 2 To lz
     Txt1 = .Cells(j, 7).Value   'Spalte G, Auftrag erledigt
     If .Cells(j, 4) = Linie And .Cells(j, 5) = Prozess Then
     If Txt1 = "Nein" Or Txt1 = "nein" Or Txt1 = Empty Then
        Datum = .Cells(j, 2)
        Mitarb = .Cells(j, 3)
        Problem = .Cells(j, 6)
        Indx = UserForm1.lstErgebnis.ListCount
        'Datum Format falsch, kann Format nicht benutzen!!
        UserForm1.lstErgebnis.AddItem CStr(Datum)
        UserForm1.lstErgebnis.List(Indx, 1) = Mitarb
        UserForm1.lstErgebnis.List(Indx, 2) = Problem
     End If
     End If
  Next j
  'Fokus auf Datum setzen
  UserForm1.TextBox1.SetFocus
End With
End Sub
Antworten Top
#14
Zitat
Zitat:Da bin ich mir nicht sicher wie das konkret gemeint ist??  Unter der gleichen Linie und dem gleichen Prozess können ja unter verschiedenem Datum unterschiedliche Probleme eingetragen sein.  Dann nur den ersten Eintrag auflisten waere sicher nicht sinnvoll.  Oder sehe ich da was falsch???

mfg  Gast 123

Aktuell ist es so, dass in der UF1 im Feld Produktionslinie sämtliche Einträge aus Spalte D aufgelistet werden, wenn bsw. Linie A 10 mal drine steht, erscheint diese auch 10 Mal untereinander zur Auswahl. Falls in Spalte D bspw. die "Linie A" einmal oder auch mehrmals vorkommt, sollte diese nur einmal anzeigt werden.

Ich habe die neuen Codezeilen ausprobiert, aber keine Veränderungen feststellen können.

VG  iMicklife
Antworten Top
#15
Hallo

wenn mann in dem Code den ich zuletzt geschickt habe noch Exit For einbaut könnte das klappen.  Probier es mal aus:
        UserForm1.lstErgebnis.List(Indx, 2) = Problem
           Exit For             
     End If

mfg  Gast 123
Antworten Top
#16
Hallo,

Zitat:Ist es möglich die Kombinationsfelder so zu reglementieren,  dass der User dazu gezwungen wird in einer festgelegten Reihenfolge die Daten einzugeben, bevor der Absprung in das nächste Feld erfolgen kann.

warum sollte das nicht gehen?

Zitat:Als 1. das Datum eingeben, erst wenn das eingegeben ist soll das Kombifeld "Name eingeben" verfügbar sein, wenn widerum dort der Name eingegeben ist erst das Combifeld "Produktionslinie" usw. das bis zum letzten Combifeld. Wenn möglich das noch farblich abgrenzen (Eingabe möglich "weiß";Eingabe noch nicht möglich "grau").

Das mit den Farben habe ich nicht verstanden. Meinst Du so was?
Das stammt mal wieder aus einem meiner Uraltschätzchen für ein Hundehotel, die sich in den Tiefen meiner Festplatten angesiedelt haben.


Angehängte Dateien Thumbnail(s)
   
________________________________________________________________________
wer aufgibt, ohne es versucht zu haben, gibt einfach nur auf!

Grüße aus Norderstedt, Peter
[-] Folgende(r) 1 Nutzer sagt Danke an Käpt'n Blaubär für diesen Beitrag:
  • Imicklife
Antworten Top
#17
Hallo Peter

interessante UserForm, schöne Arbeit.  Die Farben in den Eigenschaften einstellen habe ich inzwischen auch raus.
Wenn ich den Frager richtig verstanden habe sollen die Hintergrundfarben bei -geöffneter UF- farblich wechseln.
Die Codes die ich im Internet fand funktionieren bei mir leider nicht.  Hast du dafür einen passenden VBA Code???

mfg  Gast 123
Antworten Top
#18
Hallo Gast,

... nein, eine fertige Userform, die im Betrieb gemäß aufgrund der Vorgaben die Hintergrundfarben wechselt,
besitze ich nicht. Dafür gab es bisher keinen Bedarf und ich selbst bin nicht darauf gekommen, das mal zu
erarbeiten. Ist aber natürlich grundsätzlich machbar.

Ich selbst werde aber in naher Zukunft privat ziemlich eingebunden sein, so daß ich mich in den nächsten Tagen
nicht hinter die Tastatur klemmen kann. Schlechtes Timing, sorry.
________________________________________________________________________
wer aufgibt, ohne es versucht zu haben, gibt einfach nur auf!

Grüße aus Norderstedt, Peter
Antworten Top
#19
Hallo Gast 123

habe die Codezeile eingebaut - keine Veränderung festgestelt . Er listet mir im ersten EingabeFeld weiterhin alle Einträge aus Spalte D und im nächsten zweiten EIngabFeld alle Einträge aus Spalte E auf. Das wird besonders unübersichtlich/problematisch, wenn bspw. in Zeile 125 das erste Mal eine neue Position (bspw. Linie X) auftaucht. Dann müsste der Enduser in der Box ja bis zu dieser Position scrollen, um sich die Bearbeitung (erledigt " nein") anzeigen zu lassen. Grundsätzlich sollten im EIngabe Feld 1 ja nur die Linien (angezeigt werden, welche noch eine Bearbeitung benötigen (Status erledigt "nein"), abgearbeitete (STatus "nein" nicht mehr aktiv sondern mit datum als erledigt rückgemeldet) Einträge sollen gar nicht mehr aufgelistet werden. Im Eingabefeld 2 dann nur die mit feld 1 verknüpften Einträge. Sollte im Eingabefeld 1 bspw. unter Linie A noch 10 offene Bearbeitungsaktionen sein, dann soll die Linie A auch nur einmal als Position angezeigt werden. Im nächsten Eingabefeld 2 dann auch nur die relevanten Einträge (bspw. Linie A hat unter den 10 offenen Positionen Einträge mit 5 X Wartung u. 5 X Reinigung, dann soll halt nur einmal Wartung und einmal Reinigung im Scrollmenü angezeigt werden).

VG Michel
Antworten Top
#20
Hallo Michel

auf ein neues, ich denke jetzt habe ich die Sache mit "Nein" endlich im Griff.  Würde mich feuen wenn es jetzt klappt!!  Bin gespannt ...

mfg  Gast 123


Code:
Dim Linie As String, Prozess As String
Dim Mitarb As String, Problem As String
Dim lz As Long, j As Long, Indx As Long
Dim Datum As Date, Bemerkung As String
Dim Txt1 As String, Txt2 As String

Private Sub cmdCancel_Click()
   Unload Me
End Sub


Private Sub cboClear_Click()
With Worksheets("Daten")
   lz = .Cells(Rows.Count, 2).End(xlUp).Row
   UserForm1.lstErgebnis.Clear
   Linie = UserForm1.cmb_ProdLinie
   Prozess = UserForm1.cmb_AbfuellLinie
   'Schleife zum auflisten aller IstErgebnisse
   For j = 2 To lz
      Txt1 = .Cells(j, 7).Value   'Spalte G, Auftrag erledigt
      If Txt1 = "Nein" Or Txt1 = "nein" Then
         Datum = .Cells(j, 2)
         Mitarb = .Cells(j, 3)
         Problem = .Cells(j, 6)
         Indx = UserForm1.lstErgebnis.ListCount
         'Datum Format falsch, kann Format nicht benutzen!!
         UserForm1.lstErgebnis.AddItem CStr(Datum)
         UserForm1.lstErgebnis.List(Indx, 1) = Mitarb
         UserForm1.lstErgebnis.List(Indx, 2) = Problem
      End If
   Next j
   'Fokus auf Datum setzen
   UserForm1.TextBox1.SetFocus
End With
End Sub


Private Sub cmdSave_Click()
With Worksheets("Daten")
   lz = .Cells(Rows.Count, 2).End(xlUp).Row
   Indx = UserForm1.lstErgebnis.ListIndex
   Txt1 = UserForm1.TextBox1.Text
   Bemerkung = UserForm1.txtRemarks.Text
   
   If Indx < 0 Then MsgBox "Kein ListenBox Eintrag ausgewählt !!": Exit Sub
   If Txt1 = "" Then MsgBox "Kein Eintrag in - Auftrag erledigt !!": Exit Sub
   If Bemerkung = "" Then MsgBox "Kein Eintrag in - Bemerkungen !!": Exit Sub
   
   Linie = UserForm1.cmb_ProdLinie
   Prozess = UserForm1.cmb_AbfuellLinie
   Datum = UserForm1.lstErgebnis.List(Indx, 0)
   Mitarb = UserForm1.lstErgebnis.List(Indx, 1)
   Problem = UserForm1.lstErgebnis.List(Indx, 2)

   'ausgewaehlten Datensatz suchen
   For j = 2 To lz
   If .Cells(j, 2) = Datum And _
      .Cells(j, 3) = Mitarb And _
      .Cells(j, 4) = Linie And _
      .Cells(j, 5) = Prozess And _
      .Cells(j, 6) = Problem Then
      .Cells(j, 8) = UserForm1.txtRemarks   'Bemerkung
      .Cells(j, 7) = UserForm1.TextBox1     'Erledigt/Datum
       Exit Sub
   End If
   Next j
   MsgBox "Fehler beim Datensatz vergleichen - Nicht gebucht !!"
End With
End Sub


Private Sub TextBox1_AfterUpdate()
   UserForm1.txtRemarks.SetFocus
End Sub


Private Sub UserForm_Initialize()
With Worksheets("Daten")
   Txt1 = Empty: Txt2 = Empty
   lz = .Cells(Rows.Count, 2).End(xlUp).Row
   UserForm1.lstErgebnis.Clear
   'Schleife zum auflisten aller IstErgebnisse
   For j = 2 To lz
      Bemerkung = .Cells(j, 7).Value   'Spalte G, Auftrag erledigt
      If Bemerkung = "Nein" Or Bemerkung = "nein" Then
         If InStr(Txt1, .Cells(j, 4)) = 0 Then
            Txt1 = Txt1 & ", " & .Cells(j, 4).Value
            UserForm1.cmb_ProdLinie.AddItem .Cells(j, 4).Value
         End If
         If InStr(Txt2, .Cells(j, 5)) = 0 Then
            Txt2 = Txt2 & ", " & .Cells(j, 5).Value
            UserForm1.cmb_AbfuellLinie.AddItem .Cells(j, 5).Value
         End If
      End If
   Next j
End With
End Sub
Antworten Top


Gehe zu:


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