2016-08-09 11 views
0

Ich habe derzeit diesen Code, mit dem ich das Benutzerformular starten, ein Element in das Textfeld eingeben, das Datum automatisch ausfüllen und aus einem Dropdown-Menü auswählen dann fügen Sie diese Informationen in ein neues ein Reihe.VBA Benutzerformular Dropdown-Menü Ausführung

Das cbm (combo-box) -Element zeichnet seine Werte aus einer separaten dynamisch expandierenden Tabelle und ist ein Dropdown-Menü im Benutzerformular. Das Datum wird basierend auf dem heutigen Datum automatisch ausgefüllt und das Textfeld zeichnet seinen Wert von dem, was der Benutzer eingibt.

Private Sub btnSubmit_Click() 
Dim ssheet As Worksheet 
Set ssheet = ThisWorkbook.Sheets("InputSheet") 
nr = ssheet.Cells(Rows.Count, 1).End(xlUp).Row + 1 
ssheet.Cells(nr, 3) = CDate(Me.tbDate) 
ssheet.Cells(nr, 2) = Me.cmblistitem 
ssheet.Cells(nr, 1) = Me.tbTicker 

Mein Ziel ist es, je nachdem, welche Listenelement ausgewählt Ich möchte den Namen des betreffenden Objekts in einer Spalte eingefügt werden, die zu diesem Punkt entspricht. wenn der Benutzer "Äpfel" auswählt und die dritte Spalte die "Apfel" -Spalte ist, möchte ich, dass er an dieser Stelle eingefügt wird.

Ich gehe davon aus, dass dies mit einer Art von "If" -Aussage unten sein muss.

Jede Hilfe wird geschätzt. Here is pic of my worksheet

+0

Wenn Sie sagen, dass die ComboBox "ihre Werte aus einer separaten dynamisch expandierenden Tabelle bezieht", meinen Sie, dass es Daten gebunden ist, oder machst du das in Code? – Comintern

+0

Ich benutzte den Namen Manager, um es zu markieren und schrieb dann Code: Für jede Zelle in [Name] me.mblistitem.AddItem Zelle nächste Zelle – Anthony

+0

so haben Sie "Apfel" -Spalte mit einem Bündel von "Äpfel" in den Zellen gefüllt ? Vielleicht möchten Sie einige Beispiele für Ihre Datenstruktur sowie die gewünschte Logik hinzufügen – user3598756

Antwort

0

Gesetzt ich meine guessings richtig gemacht, versuchen Sie diesen Code

Option Explicit 

Private Sub btnSubmit_Click() 
    Dim f As Range 

    If Me.cmblistitem.ListIndex = -1 Then Exit Sub '<--| exit if no itemlist has been selected 
    If Len(Me.tbTicker) = 0 Then Exit Sub '<--| exit if no item has been input 

    With ThisWorkbook.Sheets("InputSheet") 
     Set f = .Rows(1).Find(what:=Me.cmblistitem.Value, lookat:=xlWhole, LookIn:=xlValues, MatchCase:=False) '<--| look for proper column header 
     If f Is Nothing Then Exit Sub '<--| if no header found then exit 
     With .Cells(.Cells(Rows.Count, "A").End(xlUp).Row + 1, f.Column) '<--| refer to header column cell corresponding to the first empty one in column "A" 
      .Resize(, 3) = Array(Me.tbTicker.Value, Me.cmblistitem.Value, CDate(Me.tbDate)) '<--| write in one shot 
     End With 
    End With 
End Sub 

es kommentiert, so dass Sie leicht Spalten Referenzen nach Ihren Bedürfnissen

BTW wie für die Combobox Füllung ändern Sie können möchte folgenden Code übernehmen:

Dim cell As Range 
With Me 
    For Each cell In [myName] 
     .cmblistitem.AddItem cell 
    Next cell 
End With 

welche ist optimiert, einmal vor Eintritt in die Schleife auf Me referenziert worden zu sein, so dass es durchgehend ohne weitere Speicherzugriffe gehalten wird

+0

Vielen Dank! Ich denke, dass Sie genau das tun, was ich will, ich kann einfach nicht herausfinden, wie Sie am besten umsetzen können. Ich habe ein Schnipsel-Bild von meinem Arbeitsbuch beigefügt. Wie Sie sehen können, möchte ich anhand des Drop-Down-Elements, das ich aus dem Benutzer wähle, dieses Element an der richtigen Position im Raster rechts platzieren. Danke nochmal für deine Eingabe. – Anthony

+0

Ihr Bild ist mir etwas unklar. bitte erläutern Sie: 1) den Namen jedes Steuerelements, das ich im Bild sehe 2) welche Rolle (falls relevant für das Problem) spielt der Wert ("TWTR") in Textfeld "Symbol" 3) welche Rolle (falls relevant für das Problem) Werte in diesen drei Spalten auf der rechten Seite spielen – user3598756

Verwandte Themen