2016-08-30 3 views
0

Ich habe ein Benutzerformular, das ausgefüllt ist und gibt die Daten in eine Tabelle ein. Eine Funktion, die ich hinzugefügt habe, ist ein Rahmen von 10 Textfeldern, die verborgen bleiben, wenn nicht Daten in das vorherige Feld eingegeben werden, was bis zu 10 Einträge erlaubt. Da der Benutzer die Namen der Teilnehmer in diese Textfelder eingibt, möchte ich, dass alle die gleiche Zelle der Tabelle ausfüllen, getrennt durch Kommas. Zuerst habe ich den Code ohne nachzudenken eingegeben und würde 9 Kommas in der Zelle erhalten, auch wenn keine Namen hinzugefügt wurden. Ich habe es seitdem geschafft, den zweiten Textfeldwert zu erhalten, dem ein Komma vorangestellt ist, das der Zelle hinzugefügt wurde, aber ich kann den Wert zusätzlicher Textfelder (3-10) nicht dazu bringen, dasselbe zu tun.kombiniert mehrere Benutzerformular Textfeld Werte in eine Zelle

ws.Range("I" & LastRow).Value = tbPart1.Value 
If Not IsEmpty(tbPart2.Value) Then 
ws.Range("I" & LastRow).Value = tbPart1.Value & "," & tbPart2.Value 
ElseIf Not IsEmpty(tbPart3.Value) Then 
ws.Range("I" & LastRow).Value = tbPart1.Value & "," & tbPart2.Value & "," & tbPart3.Value 

End If 

Antwort

2

Looping durch alle Textfelder und Kontrolle für ihren Wert:

Dim i As Integer 

For i = 1 To 10 

    'Loop through all 10 Textboxes and add its value to the cell 
    If Not Controls("tbPart" & i).Value = "" Then 

     'Check if cell is empty 
     If ws.Range("I" & LastRow).Value = "" Then 
      ws.Range("I" & LastRow).Value = Controls("tbPart" & i).Value 
     Else 
      ws.Range("I" & LastRow).Value = _ 
      ws.Range("I" & LastRow).Value & ", " & Controls("tbPart" & i).Value 
     End if 
    End If 
Next i 

-Code nicht getestet.

+0

funktioniert perfekt – Awill

0

Awill, versuchen Sie so etwas. Es sollte Ihren Bedürfnissen entsprechen und es ist ziemlich flexibler Code. Anstatt eine If Then Anweisung für jede Kombination zu erstellen, können Sie einfach alle Textfelder durchlaufen und Ihr Arbeitsblatt eleganter ausfüllen.

Dim ctrl As Control 
Dim ctrlName As String, ctrlNum As Integer 

For Each ctrl In Me.Controls 'Loops through all controls on the Userform 
    If TypeName(ctrl) = "TextBox" Then 'Only acknowledges TextBox Controls 
     ctrlName = ctrl.Name 
     ctrlNum = CInt(Replace(ctrlName, "tbPart", "")) 'Names each textbox by number 
     If ctrlNum > 0 And ctrlNum < 11 And ctrl.Value <> "" Then 'cycles through textboxes 1-10 
      If ws.Range("I" & NextRow).Value <> "" Then 'If cell isn't blank, preclude with comma 
       ws.Range("I" & NextRow).Value = ws.Range("I" & NextRow).Value & ", " & ctrl.Text 
      Else: ws.Range("I" & NextRow).Value = ctrl.Text 'otherwise value only 
      End If 
     End If 
    End If 
Next ctrl 
+0

Ich konnte dies nicht zu arbeiten, war es die erste Next ohne für das Markieren und dann dem Else-Scripting. – Awill

+0

Ich weiß nicht, warum ich das gemacht habe .. Ich habe den Code aktualisiert, versuche diese Version auszuführen. Tut mir leid, dass @Awill. – Tyeler

Verwandte Themen