2016-08-30 209 views
0

私は記入されたユーザーフォームを持っており、スプレッドシートにデータを入力しています。 私が追加した1つの機能は、前のボックスにデータが入力されていない限り隠されたままの10個のテキストボックスのフレームで、最大10個のエントリを許可します。 ユーザーはこれらのテキストボックスに参加者の名前を入力しているので、スプレッドシートの同じセルにコンマで区切って入力します。 最初は思考せずにコードを入力し、名前が追加されていなくてもセルに9つのカンマを入れました。 私はそれ以来、セルに追加されたコンマで始まる2番目のテキストボックス値を取得することができましたが、同じテキストボックス(3-10)の値を取得することはできません。複数のユーザーフォームのテキストボックス値を1つのセルに結合

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 

答えて

2

すべてのテキストボックスをループし、その値のチェック:

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 

コードがテストされていません。

+0

作品は完全に – Awill

0

Awill、このようなことを試してください。それはあなたのニーズに合っていなければならず、かなり柔軟なコードです。すべての組み合わせに対してIf Thenステートメントを作成する代わりに、すべてのテキストボックスをループし、ワークシートをよりエレガントに配置することができます。

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

私はそれが最初のためにせずに[次へ]、およびそれ以外のスクリプトにフラグを立てるれた、これは仕事を得ることができませんでした。 – Awill

+0

私はなぜそれをしたのかわかりません。コードを更新しました。このバージョンを実行してみてください。ごめんなさい@Awill。 – Tyeler

関連する問題