나는 "GO"버튼과 "EXIT"버튼 만 가지고있는 "userform1"폼이있는 프로젝트를 가지고 있습니다. 숫자에 대한 입력 상자를 통해 사용자 입력을 요구합니다. 그런 다음 코드를 사용하여 그 수의 레이블과 텍스트 상자로 양식을 채우고 작성된 텍스트 상자를 편집 할 수 있도록 양식을 표시합니다. 이 시점까지 모든 것이 잘 작동합니다. 그런 다음 "GO"버튼을 사용하여 다른 위치에서 사용할 textbox.text 값이있는 배열을 채우기를 원합니다. 이것은 내가 문제가있는 곳입니다.코드 생성 된 텍스트 상자에서 textbox.text 값을 가져올 수없는 이유
정상적으로 (Xstring = UserForm1.Box1.Text와 같은) 텍스트가 검색되지 않았습니다. 작동하지 않았습니다. 그래서 나는 폼 컨트롤을 통해 순환했다. UserForm1.Controls.index(), 내 Textbox .names가 있는지 확인하여 존재하는지 확인합니다. 나는 그것들을 발견 했으므로 색인 (3), .name = "Box1"을 골랐다. 아래를 참조
Dim tText As String
tText = UserForm1.Box1.Text
MsgBox tText
는
'메서드 나 데이터 구성원을 찾을 수 없습니다'오류를 반환하지만이로 변경하는 경우 :
는Dim x As Object
Dim tText As String
Set x = UserForm1.Controls.Item(3)
tText = x.Text
MsgBox tText
MSGBOX이는 .text 값을 반환
그래서 QUESTION이 정상적으로 처리되지 않는 이유는 무엇입니까? 인덱스 배열과 배열을 채우기위한 이름을 알아내는 데 필요한 모든 추가 단계를 거치지 않아도됩니다.
참조를 위해, 아래의 레이블/텍스트 상자를 만들기위한 내 서브의 부분적인 코드는 다음과 같습니다
For i = Data(x, 1) To z
Lab = "forms.label.1"
Box = "forms.textbox.1"
Set newlabel = UserForm1.Controls.Add(Lab)
Set newtextbox = UserForm1.Controls.Add(Box)
lbl1 = ("Label" + CStr(i))
With newlabel
.Name = lbl1
.Caption = "No. " + CStr(i)
.Left = Data(x, 3)
.top = top
.Height = 20
.Width = 30
End With
lbl2 = ("Box" + CStr(i))
With newtextbox
.Name = lbl2
.Text = CStr(i)
.Left = (Data(x, 3) + 35)
.top = top
.Height = 20
.Width = 36
End With
top = top + 25
Next i
귀하의 제안에 따라 텍스트 상자 만들기 작업을 다시했습니다. 그것은 'userfom1.textbox1.text'가 여전히 결과를 산출하지 않는다는 점에서 차이를 만드는 것처럼 보이지 않았습니다. 그것도 다치게하지 않았다 ... –
@HarryToes'userfom1.textbox1.text'는'textbox1'이 디자인 타임에 생성되지 않으면 (즉, 텍스트 상자를 폼으로 드래그하여 이름을 "textbox1"로 지정하지 않으면 작동하지 않을 것입니다. 모든 텍스트 상자를 찾으려는 것처럼 보입니다. 컨트롤의 이름을 기반으로 '추측'하는 대신 컨트롤의 개체 유형을 '내 각 cntrl에 대해'와 같이 테스트하십시오. 컨트롤 : typeof cntrl이 TextBox 인 경우 'do some stuff : end if : next' –