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.

Lieferstatus aus Bestellübersicht anzeigen und ändern per Maske
#1
Hallo alle zusammen.


.xlsm   Mikes_Einkauf.xlsm (Größe: 770,11 KB / Downloads: 27)

Ich würde gerne in meiner Mappe, mit der ich Bestellungen tätige, einen aktuellen Lieferstatus in einer Maske anzeigen, neu eingeben und ändern können.

Ich werde oft nach diesem Staus gefragt, und möchte dieses natürlich schnell und einfach finden können.


Ich habe hierfür erst einmal eine Userform erstellt "Lieferstatus".
Diese kann ich schon einmal über eine Button auf meiner Hauptseite "Hauptmenü" aufrufen und darin auch wieder schließen.

Ich habe die VBA-Code Programmierung immer noch nicht so recht verstanden. 

Mein Problem ist es wieder einmal in dieser Maske die einzelnen Comboboxen mit Werten anzeigen zu lassen, oder eine Auswahl dort auch anzuzeigen.

Ich habe hier mal meine Mappe zur Ansicht eingestellt. Im Hauptmenü oben rechts ein Button zum Aufruf der Userform, in der ich suchen und auch Dinge eingeben möchte. (unter Status-Bemerkung)
Wenn ich dort Eingabe mache, oder eine bestehende ändere, möchte ich diese dann speichern in dem Blatt "Bestellübersicht" unter Spalte K zu der passenden Bestellnummer, sowie zu dem passenden Artikel.

Wer kann mir dabei helfen??? ......Atilla vielleicht? Blush


Grüße an alle.

Mike
Antworten Top
#2
Hallo zusammen,

ich habe hier meine aktuelle volle Mappe, in der ich versucht habe schon mal ein paar Codes einzusetzen.


.xlsm   Kopie_Mikes_Einkauf.xlsm (Größe: 1.009,5 KB / Downloads: 28)

Die Maske hat noch 2 Zusätze, die ich unbedingt brauche.

Die ersten 3 Comboboxen, bekomme ich schon gefüllt, die 3 nicht ganz so, wie ich es haben möchte.
Ich habe diese Codes aus der Userform "Bestellung Suche" genommen und soweit ich das verstanden habe angepasst. leider klappt das noch nicht ganz so mit der 3. Combobox, denn da soll er mir nur die Artikel, zu der passenden Bestellnummer, wie auch Lieferanten anzeigen.

Vielleicht kann jemand so besser etwas damit anfangen.

Den Rest, bekomme ich einfach nicht eingesetzt.

Grüße Mike
Antworten Top
#3
Hallo Mike,

da kommt erst mal eine Passwortabfrage Sad
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#4
(09.03.2015, 21:07)schauan schrieb: Hallo Mike,

da kommt erst mal eine Passwortabfrage Sad

Ups...hab vergessen es raus zu nehmen Blush

atilla :19:
Antworten Top
#5
Passwort für diese Mappe ist

atilla

Gruß Mike
Antworten Top
#6
Hallo Mike,

ich weiß jetzt nicht, warum Du beim Aktivieren des Userforms alle 3 Listboxen füllst. Normalerweise würde ich die entsprechend Auswahl nacheinander füllen, also zuerst nur die Lieferanten und dann Step by Step die anderen. Beim Activate würde m.E. .die combobox2 reichen, dann füllst Du bei der Auswahl die combobox3 und am Ende die combobox2. (Die Bezeichnungen sind zum einen etwas durcheinander und zum anderen nicht gerade aussagekräftig ...)

Ich habe hier mal das Füllen auf zwei Makros aufgeteilt, mit etwas Geschick bekommt man das auch etwas zusammengelegt. Du musst natürlich noch die Change-Makros anpassen.

PHP-Code:
Sub combo1_füllen()
   
Dim i As Integerlngz As Long
   Dim arr1 
As Variant
   Dim D1 
As ObjectD2 As ObjectD3 As Object
   Set D1 
CreateObject("Scripting.Dictionary")
   
Set D2 CreateObject("Scripting.Dictionary")
   
Set D3 CreateObject("Scripting.Dictionary")
   
With Sheets("Bestellübersicht")
      
lngz = .Cells(.Rows.Count1).End(xlUp).Row
      arr1 
= .Range("A2:E" lngz)
      
D1("bitte wählen") = "bitte wählen"
      
D2("bitte wählen") = "bitte wählen"
      
D3("bitte wählen") = "bitte wählen"
      
For 2 To UBound(arr1)
         If 
arr1(i5) = Me.ComboBox2.Text Then
            D1
(CStr(RTrim(arr1(i1)))) = 0
         End 
If
      
Next i
   End With

   
If D1.Count 0 Then
      Me
.ComboBox1.List = Application.Transpose(D1.Keys)
      
Me.ComboBox1.ListIndex 0
      Me
.ComboBox1.SelLength Len(Me.ComboBox1.Text)
      
boVar True
            
    End 
If
End Sub

Sub combo3_füllen
()
   
Dim i As Integerlngz As Long
   Dim arr1 
As Variant
   Dim D1 
As ObjectD2 As ObjectD3 As Object
   Set D1 
CreateObject("Scripting.Dictionary")
   
Set D2 CreateObject("Scripting.Dictionary")
   
Set D3 CreateObject("Scripting.Dictionary")
   
With Sheets("Bestellübersicht")
      
lngz = .Cells(.Rows.Count1).End(xlUp).Row
      arr1 
= .Range("A2:E" lngz)
      
D1("bitte wählen") = "bitte wählen"
      
D2("bitte wählen") = "bitte wählen"
      
D3("bitte wählen") = "bitte wählen"
      
For 2 To UBound(arr1)
         If 
arr1(i1) = Me.ComboBox1.Text And arr1(i5) = Me.ComboBox2.Text Then
            D1
(CStr(RTrim(arr1(i2)))) = 0
         End 
If
      
Next i
   End With

   
If D1.Count 0 Then
      Me
.ComboBox3.List = Application.Transpose(D1.Keys)
      
Me.ComboBox3.ListIndex 0
      Me
.ComboBox3.SelLength Len(Me.ComboBox1.Text)
      
boVar True
            
    End 
If
End Sub 
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#7
Hallo Andre,

Man oh man...du denkst wohl, ich bin da schon ein fortgeschrittener...oder? ;)  :s


Die Codes, die ich dort rein gesetzt habe, habe ich aus der userform "Bestellung suchen". Diesen hat Atilla programmiert.
Ich habe gedacht, von der Reihenfolge, wie ich meine Comboboxen gesetzt habe, müsst ich diesen Code doch einfach kopieren und in meine Maske setzten. Aber das hat ja nur zum teil geklappt.  :)

Ich bin totaler Anfänger und ich würde sehr gerne diese Maske Schritt für Schritt bearbeiten und den Code auch versehen.  Vielleicht kannst du mir in deinem Code Zeile für Zeile erklären, was jede Zeile verursacht.

Was ist Change Makros? :16:

Ich kopiere erst einmal deine Code in die Testmappe und schaue was passiert.

Dir erst einmal vielen Dank für diesen.

Grüße Mike
Antworten Top
#8
Hallo Mike,

Du hast zu jeder Combobox so ein Change-Makro - oder anders gesagt, es gibt

Private Sub ComboBox1_Change()
Private Sub ComboBox2_Change()
Private Sub ComboBox3_Change()

Zum Testen sieht das bei mir so aus:

Code:
Private Sub ComboBox1_Change()
If boVar = True Then
combo3_füllen
End If
'Bestellnummer waehlen - Artikelnummer fuellen
End Sub

Private Sub ComboBox2_Change()
'Lieferant waehlen - Bestellnummer fuellen
If boVar = False Then
combo1_füllen
End If
End Sub

Private Sub ComboBox3_Change()
End Sub


Die combobox2 ist zur Auswahl des Lieferanten, ich hätte die z.B. cboLiefer o.ä. genannt. Da der Name nichts sagt, hab ich zumindest einen Kommentar drunter geschrieben, um was es dabei geht.

Mit der combobox1 wählst Du eine Bestellnummer, die aber abhängig ist vom zuvor ausgewählten Lieferanten.

Die combobox3 hat nichts mehr im Makro stehen, da ich denke, dass damit die Auswahl abgeschlossen ist. Die Auswahlliste wird in Abhängigkeit von zuvor gewähltem Lieferant und Bestellnummer gefüllt.

Das mit den BoVar's müsste man eventuell auch noch anders regeln. Die sind dazu da, dass bei Auswahl in den Boxen zuweilen nichts mehr geändert wird. Ich würde es so programmieren, dass bei Auswahl einer Listbox nur die zuvor gewählte nicht mehr zugänglich ist und bei der Auswahl eine Reihenfolge eingehalten wird. Ansonsten geht's eventuell etwas durcheinander zu oder die Einträge passen nicht zueinander ...


Wenn ich nicht jederzeit bzw. gleich antworte nicht verzagen. Bin beruflich und familiär eingespannt und betreue hier die Technik und kann daher nicht jederzeit was posten Sad
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#9
Hallo Andre,

ich glaub so ganz habe ich das noch nicht verstanden.

Was ich aus diesen Change Aufrufen verstehe, das ich in der jeweiligen Combobox, wenn dort etwas angezeigt wird, es anwählen kann (Change).

Habe nun hinter der Maske deine Change -Codes so eingefügt, danach die Codes für das füllen.
Danach habe ich den Editor wieder verlassen und die Maske aufgerufen.
Doch ich konnte mir nichts in den Comboboxen anzeigen lassen.  (Leer) Huh

Dann bin ich zurück in den Editor und habe den Code "Private Sub UserForm_Activate()", den ich in meiner eingestellten Mappe hier drinnen hatte.....vor den Füll-Codes.

Dann wieder die Maske aufgerufen und ich konnte alle 3 Boxen anwählen und auswählen.
Doch es wird nicht passend angezeigt....also Lieferant passt nicht immer zur Bestellnummer und Artikel passt auch nicht immer. Bei manchen Lieferanten, wird gar nichts angezeigt.
ich denke, der Activate Code ist hierfür nicht richtig, oder?

Die Codes hinter meiner Maske sehen jetzt wie folgt aus:

Code:
Option Explicit
Private boVar As Boolean

Private Sub ComboBox1_Change()
If boVar = True Then
combo3_füllen
End If
'Bestellnummer waehlen - Artikelnummer fuellen
End Sub

Private Sub ComboBox2_Change()
'Lieferant waehlen - Bestellnummer fuellen
If boVar = False Then
combo1_füllen
End If
End Sub

Private Sub ComboBox3_Change()
End Sub
Private Sub UserForm_Activate()
  Dim i As Integer, lngz As Long
  Dim arr1 As Variant
  Dim D1 As Object, D2 As Object, D3 As Object
  Set D1 = CreateObject("Scripting.Dictionary")
  Set D2 = CreateObject("Scripting.Dictionary")
  Set D3 = CreateObject("Scripting.Dictionary")
     With Sheets("Bestellübersicht")
     lngz = .Cells(.Rows.Count, 1).End(xlUp).Row
     arr1 = .Range("A2:E" & lngz)
     D1("bitte wählen") = "bitte wählen"
     D2("bitte wählen") = "bitte wählen"
     D3("bitte wählen") = "bitte wählen"
     For i = 2 To UBound(arr1)
            D1(CStr(RTrim(arr1(i, 1)))) = 0
            D2(arr1(i, 5)) = 0
            D3(arr1(i, 2)) = 0
     Next i
  End With

  If D1.Count > 0 Then
     Me.ComboBox1.List = Application.Transpose(D1.Keys)
     Me.ComboBox1.ListIndex = 0
     Me.ComboBox1.SelLength = Len(Me.ComboBox1.Text)
     boVar = True
     Me.ComboBox2.List = Application.Transpose(D2.Keys)
     Me.ComboBox2.ListIndex = 0
     Me.ComboBox2.SelLength = Len(Me.ComboBox2.Text)
     boVar = False
     Me.ComboBox3.List = Application.Transpose(D3.Keys)
     Me.ComboBox3.ListIndex = 0
     Me.ComboBox3.SelLength = Len(Me.ComboBox3.Text)
     boVar = False
  End If
End Sub

Sub combo1_füllen()
  Dim i As Integer, lngz As Long
  Dim arr1 As Variant
  Dim D1 As Object, D2 As Object, D3 As Object
  Set D1 = CreateObject("Scripting.Dictionary")
  Set D2 = CreateObject("Scripting.Dictionary")
  Set D3 = CreateObject("Scripting.Dictionary")
  With Sheets("Bestellübersicht")
     lngz = .Cells(.Rows.Count, 1).End(xlUp).Row
     arr1 = .Range("A2:E" & lngz)
     D1("bitte wählen") = "bitte wählen"
     D2("bitte wählen") = "bitte wählen"
     D3("bitte wählen") = "bitte wählen"
     For i = 2 To UBound(arr1)
        If arr1(i, 5) = Me.ComboBox2.Text Then
           D1(CStr(RTrim(arr1(i, 1)))) = 0
        End If
     Next i
  End With

  If D1.Count > 0 Then
     Me.ComboBox1.List = Application.Transpose(D1.Keys)
     Me.ComboBox1.ListIndex = 0
     Me.ComboBox1.SelLength = Len(Me.ComboBox1.Text)
     boVar = True
           
   End If
End Sub
Sub combo3_füllen()
  Dim i As Integer, lngz As Long
  Dim arr1 As Variant
  Dim D1 As Object, D2 As Object, D3 As Object
  Set D1 = CreateObject("Scripting.Dictionary")
  Set D2 = CreateObject("Scripting.Dictionary")
  Set D3 = CreateObject("Scripting.Dictionary")
  With Sheets("Bestellübersicht")
     lngz = .Cells(.Rows.Count, 1).End(xlUp).Row
     arr1 = .Range("A2:E" & lngz)
     D1("bitte wählen") = "bitte wählen"
     D2("bitte wählen") = "bitte wählen"
     D3("bitte wählen") = "bitte wählen"
     For i = 2 To UBound(arr1)
        If arr1(i, 1) = Me.ComboBox1.Text And arr1(i, 5) = Me.ComboBox2.Text Then
           D1(CStr(RTrim(arr1(i, 2)))) = 0
        End If
     Next i
  End With

  If D1.Count > 0 Then
     Me.ComboBox3.List = Application.Transpose(D1.Keys)
     Me.ComboBox3.ListIndex = 0
     Me.ComboBox3.SelLength = Len(Me.ComboBox1.Text)
     boVar = True
           
   End If
End Sub

Private Sub CommandButton2_Click()
Unload Me
End Sub
ich bin ja schon froh, das überhaupt etwas jetzt angezeigt wird. ;)
Bei der Maske geht es mir darum, das ich ganz schnell einen Lieferstatus nachsehen kann und falls notwendig, einen ändern oder einen neuen anlegen kann. Da die Bestellungen in der Bestellübersicht abgelegt werden, dachte ich, es ist Sinnvoll, das die Bemerkungen dort dann in der Spalte K abgelegt werden können.
Ob ich jetzt den Aufbau der Maske so Sinnvoll angelegt habe, weiß ich nicht.
Aber was er da an Infos anzeigt, ist mir schon wichtig.
Grüße Mike
Antworten Top
#10
Hallo Mike,

aus dem bisherigen code entfernst Du die 3 Change-Makros und das Makro Combo_Füllen. Dafür kommen dann meine Makros rein und damit sollte auch was funktionieren. Die Auswahl erfolgt dann, wie ich schon geschrieben habe,, schrittweise. Mit dem userform_activate machst Du nix.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top


Gehe zu:


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