2016-07-18 2 views
0

제목이 불분명하다는 것을 알고 있습니다. 제기 사실을 자세히 설명하려고합니다.텍스트 상자 이름을 변수로 설정하고 루프에서 이름을 변경하는 방법은 무엇입니까?

VB 인터페이스에는 아래 그림과 같이 15 개의 텍스트 상자가 있습니다.

textbox snapshot

이 입력 워크 시트의 데이터 저장을 사용자에게 허용하는 사용자 인터페이스이다.

사용자가 15 개의 텍스트 상자를 모두 채우고 있다고 가정하면 텍스트 상자의 첫 번째 행이 Excel 셀 A1, B1, C1, D1에 해당 데이터를 전달하고 저장합니다. 텍스트 상자의 두 번째 행은 Excel 셀 A2, B2, C2, D2 .....

따라서 중첩 루프를 사용하여 문제를 해결하고 싶습니다. 모든 엑셀 세포는 자신의 ID (열 및 행 순서를) 가지고

for {for { Cells.(i,j)=textbox1.value 

명령문의 왼쪽은 괜찮습니다.

그들이 루프에 들어갈 수 있도록하지만, 오른쪽에 대한 모든 TextBox 이름이 TextBox1에, TextBox2를, textbox3로 이름을 .I 나에 의해 할당 된

는 ..., 나는 그들의 텍스트 상자를 변경하려면

`textbox+i; i++ ;` ' just my thought 

이 현실에서이 작업을 수행 할 수 있으며, 예를 .FOR 루프 동안 이름? 게다가, 사용자가 반 행 (데이터 3 행, 제출 2 행 공백)의 데이터를 채우면 어떻게 될까요? VBA가 데이터가있는 행 다음의 데이터를 계속 채우는 방법은 무엇입니까?

+0

[이 질문 (http://stackoverflow.com/questions/2944693/how-to-fill-many-texbox-by-using-loop-function-in-vba)](http://stackoverflow. com/questions/2944693/how-to-fill-many-texbox-by-using-loop-function-in-vba)는 텍스트 상자를 배열로 참조하는 방법을 보여줍니다. (특히 "Textbox1", "Textbox2"등으로 명명 된 경우) – YowE3K

답변

0

다음과 같은 코드를 사용할 수 있습니다 :

For i = 1 To 5 '<-- 5 "rows" of textboxes 
    For j = 1 To 3 '<-- 3 "columns" of textboxes for each row 
     Cells(i, j) = Me.Controls("TextBox" & (i - 1) * 3 + j) '<-- textboxes are name form "TextBox1" to "TextBox15" rowwise 
    Next j 
Next i 

이 실제 행에 따라 조정 될 수 및 열 번호. 당신의 경우와

"만약에 ..." 문제는, 당신이 그냥 "입력하지"텍스트 상자를 건너 뛸한다

달성하기 원하는 나에게 분명하지 않다, 당신은 단순히

을 갈 수있다
For i = 1 To 5 '<-- 5 "rows" of textboxes 
     For j = 1 To 3 '<-- 3 "columns" of textboxes for each row 
      With Me.Controls("TextBox" & (i - 1) * 3 + j) '<-- textboxes are name form "TextBox1" to "TextBox15" rowwise 
       If .Text <> "" Then Cells(i, j) = .Text '<--| skip void textboxes 
      End With 
     Next j 
    Next i 
+0

다른 문제.예를 들어, 워크 시트의 가장 오래된 항목은 200 행에 있습니다. VBA가 새 항목을 알고 붙여 넣을 수있는 방법은 무엇입니까? 201 행에서 205 행으로 시작하는 사용자 입력 상자에서. (사용자 인터페이스에 5 개의 새 레코드가 있다고 가정) – Monchhichi

+0

원래 질문을 수행 한 경우 동의 한 것으로 표시하십시오. 고맙습니다. 'lastRow = Cells (Rows.Count, 1) .End (xlUp) .Row + 1'과 같은 변수에서 현재 워크 시트의 마지막 행을 가져 와서 그것을 사용하여'Cells (lastRow + i, j)' – user3598756

0

아래 코드로 시도를

Private Sub CommandButton1_Click() 
    Dim ts As Control 
    For Each ts In Me.Controls 
     If ts.Name = "TextBox1" Then 
      'do 
     ElseIf ts.Name = "TextBox2" Then 
      'do 
     ElseIf ts.Name = "TextBox3" Then 
      'do 
     ElseIf ts.Name = "TextBox4" Then 
      'do 
     End If 
    Next 
End Sub 
관련 문제