Excel 如何从动态添加的文本框中读取文本?
我有一个关于如何从动态添加的文本框中读取文本的问题。在我的UserForm中,我有一个文本框,在这个文本框中,我输入了我想要添加多少新文本框。从这一个文本框中,我添加了两个新的动态文本框Excel 如何从动态添加的文本框中读取文本?,excel,vba,Excel,Vba,我有一个关于如何从动态添加的文本框中读取文本的问题。在我的UserForm中,我有一个文本框,在这个文本框中,我输入了我想要添加多少新文本框。从这一个文本框中,我添加了两个新的动态文本框 Set Ctrl = .Add("Forms.TextBox.1", Window.Name + CStr(i)) 'TextBox for code With Ctrl .Width = 32 .Height = 16 .Top = TopPos .Left
Set Ctrl = .Add("Forms.TextBox.1", Window.Name + CStr(i)) 'TextBox for code
With Ctrl
.Width = 32
.Height = 16
.Top = TopPos
.Left = 6
.Value = Chr(64 + i) + CStr(10 + i)
.MaxLength = 4
.ZOrder (0)
End With
Set Ctrl = .Add("Forms.TextBox.1", Window.Name + CStr(i)) 'TextBox for comment
With Ctrl
.Width = 240
.Height = 16
.Top = TopPos
.Left = 44
.MaxLength = 50
.ZOrder (0)
End With
文本框的第一列自动填充一个字母和一个数字,第二列是空的,用于我的评论。使用Finish按钮,我想将文本从两个文本框导出到两个单元格中—文本从第一列文本框导出到单元格“a”,文本从第二列文本框导出到新文件中的单元格“B”。
我编写了一个函数,用于在每个新文本框中查找文本:
Function FindName(Iter As Integer, Name As String) As String
Dim Text As String
Dim Ctrl As Control
For Each Ctrl In UserForm1.Controls
If Ctrl.Name = Name Then
Text = Ctrl.Text
End If
Next Ctrl
FindName = Text
End Function
我使用此函数用文本框中的文本填充新Excel,但问题是,文本仅从第二列导出到新文件:
NewFile.Worksheets(1).Cells(StartValue + i, 1) = FindName(i, "TextBox1" + CStr(i))
NewFile.Worksheets(1).Cells(StartValue + i, 2) = FindName(i, "TextBox1" + CStr(i))
有什么解决方案可以区分第一列文本框和第二列文本框,将文本从第一列文本框导出到一个单元格,从第二列文本框导出到另一个单元格
谢谢您的帮助。当您按名称检索控件时,需要为它们指定唯一的名称。这是通过
.Add
-命令的第二个参数完成的。在代码中,您为代码和注释提供了相同名称的控件,因此FindName
-函数只能找到其中一个控件。看看下面的代码-它创建了一些名为tbCode_1
和tbComment_1
的文本框-如果您不喜欢,请根据您的个人喜好进行更改
Set Ctrl = .Add("Forms.TextBox.1", "tbCode_" & CStr(i)) 'TextBox for code
(...)
Set Ctrl = .Add("Forms.TextBox.1", "tbComment_" & CStr(i)) 'TextBox for comment
您的FindName
-函数可能如下所示
Function FindName(Iter As Integer, colName As String) As String
Dim ctrlName as String
ctrlName = "tb" & colName & "_" & CStr(i)
On Error Resume Next
FindName = Me.Controls(ctrlName).Text
On Error Goto 0
End Function
你把它叫做
NewFile.Worksheets(1).Cells(StartValue + i, 1) = FindName(i, "Code")
NewFile.Worksheets(1).Cells(StartValue + i, 2) = FindName(i, "Comment")
在两个函数调用中,使用相同的文本框名称。顺便说一句,连接符应该是&而不是+。什么是
Window.Name
?它可以工作,谢谢您的帮助。Window.Name是TextBox的名称,我在其中添加了许多新的动态TextBox,但我忘了用新TextBox的名称替换“Window.Name”。