Vba Word-自动创建用户表单文本框

Vba Word-自动创建用户表单文本框,vba,ms-word,automation,userform,Vba,Ms Word,Automation,Userform,我有一个Userform,它可以自动创建标签和文本框。问题是创建后我不知道文本框1的名称。我原以为会是TextBox1,但事实并非如此。我如何给它们命名为TextBox1,然后是TextBox2等等?有问题的代码在“AddLine”下 您的代码已经为其命名,如test1、test2等,这是方法中的第二个参数。Add方法: Set theTextbox = UserForm1.Controls.Add("Forms.TextBox.1", "test" & textboxCounter,

我有一个Userform,它可以自动创建标签和文本框。问题是创建后我不知道文本框1的名称。我原以为会是TextBox1,但事实并非如此。我如何给它们命名为TextBox1,然后是TextBox2等等?有问题的代码在“AddLine”下


您的代码已经为其命名,如
test1
test2
等,这是
方法中的第二个参数。Add
方法:

Set theTextbox = UserForm1.Controls.Add("Forms.TextBox.1", "test" & textboxCounter, True)
Intellisense非常清楚地表明了这一点:

如果您不喜欢,我想您可以随时从
.Name
属性更改它:

只需在添加时为其指定一个名称即可

For textboxCounter = 1 To Amount
    Set theTextbox = UserForm1.Controls.Add("Forms.TextBox.1", "test" & textboxCounter, True)
    With theTextbox
        .Name = "TextBox_" & i
        .Width = 200
        .Left = 70
        .Top = 30 * textboxCounter
    End With

Next
根据评论更新

你在这里有一个任务:

Set TBs(0) = TextBox1: Set TBs(1) = TextBox2: Set TBs(2) = TextBox3
Set TBs(3) = TextBox4: Set TBs(4) = TextBox5: Set TBs(5) = TextBox6
Set TBs(6) = TextBox7: Set TBs(7) = TextBox8: Set TBs(8) = TextBox9
Set TBs(9) = TextBox10:
在模块顶部使用
选项Explicit
会提醒您注意这些问题。运行此命令时,如果您采取了正常的步骤进行调试,您应该看到
TBs(0)
等都被分配了
Nothing
(然后您可以问一个更好的问题:“为什么我的变量都
Nothing
?”,等等……我提到这些事情不是为了痛斥你,而是为了告诉你如何解决自己的问题(或者至少获得相关信息,以便你将来可以提出更好的问题!)

为什么?

因为范围中没有像
TextBox1
等这样的对象

为什么不呢?

因为在代码的后面才创建文本框,所以在赋值时,该数组包含所有
内容

如何修复它?

我认为您不能以这种方式引用在运行时创建的控件,因为代码通常不会编译(同样,
Option Explicit
会提醒您注意这一点;您应该始终在每个模块的顶部使用它)

您应该能够分配如下内容:

Set TBs(0)=UserForm1.控件(“TextBox\u 1”)
等。确保使用在
.Add
方法中指定的正确名称(或在将文本框添加到表单时在
.name
属性中指定的名称)

注意您必须在文本框添加到用户表单后进行此分配,否则将发生错误


祝你好运!

我尝试更改第一个“测试”到TextBox1之前,但它仍然无法与上面的代码一起工作。我会再试一次。是的,再试一次。我尝试过将其更改为TextBox1和TextBox,但上面的代码仍然无法识别名称。我也会继续尝试一些不同的事情。好吧,这一开始不是你的问题……请你下次更好地解释。我将修改我的答案来解决这个问题。嗨,JohnB,上面的修改应该解释为什么你的代码不工作(至少有两个原因)。我想我可以同时解决这两个问题。让我知道这对你有何作用!你所说的一切都很有意义。我已经用VB编写了大约两周的代码。我感谢你的建议。我今晚没有时间,但我会在本周晚些时候进一步研究。
Set TBs(0) = TextBox1: Set TBs(1) = TextBox2: Set TBs(2) = TextBox3
Set TBs(3) = TextBox4: Set TBs(4) = TextBox5: Set TBs(5) = TextBox6
Set TBs(6) = TextBox7: Set TBs(7) = TextBox8: Set TBs(8) = TextBox9
Set TBs(9) = TextBox10: