Vba Word VB-错误“5941”和for循环

Vba Word VB-错误“5941”和for循环,vba,for-loop,ms-word,runtime-error,Vba,For Loop,Ms Word,Runtime Error,我有两个问题 首先,我遇到运行时错误“5941”,请求的集合成员不存在。在错误后选择End时,代码将实际执行预期的操作。我以为我找到了一个解决办法,但没用。他们建议在代码中添加Application.Templates.LoadBuildingBlocks 其次,我尝试添加textboxCounter来设置TBs0=UserForm1.ControlsTextBox_1:这样我就不需要声明TextBox1-10,这样我就可以拥有我需要的任意多个测试框。我试着把它放进去,但不起作用。不知道我做错了

我有两个问题

首先,我遇到运行时错误“5941”,请求的集合成员不存在。在错误后选择End时,代码将实际执行预期的操作。我以为我找到了一个解决办法,但没用。他们建议在代码中添加Application.Templates.LoadBuildingBlocks

其次,我尝试添加textboxCounter来设置TBs0=UserForm1.ControlsTextBox_1:这样我就不需要声明TextBox1-10,这样我就可以拥有我需要的任意多个测试框。我试着把它放进去,但不起作用。不知道我做错了什么

Option Explicit    


Private Sub AddLine_Click()

Application.Templates.LoadBuildingBlocks

Dim theTextbox As Object
Dim textboxCounter As Long

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


Next

Dim theLabel As Object
Dim labelCounter As Long

For labelCounter = 1 To Amount
    Set theLabel = UserForm1.Controls.Add("Forms.Label.1", "Test" & labelCounter, True)
    With theLabel
        .Caption = "Image" & labelCounter
        .Left = 20
        .Width = 50
        .Top = 30 * labelCounter
    End With

    With UserForm1
        .Height = Amount * 30 + 100
    End With

    With CommandButton1
        .Top = Amount * 30 + 40
    End With

    With CommandButton2
        .Top = Amount * 30 + 40
    End With


Next


End Sub

Sub CommandButton1_Click()

Application.Templates.LoadBuildingBlocks


Dim Textbox1 As Object
Dim Textbox2 As Object
Dim Textbox3 As Object
Dim Textbox4 As Object
Dim Textbox5 As Object
Dim Textbox6 As Object
Dim Textbox7 As Object
Dim Textbox8 As Object
Dim Textbox9 As Object
Dim Textbox10 As Object

Dim i

Dim TBs(9) As Object
Set TBs(0) = UserForm1.Controls("TextBox_1"): Set TBs(1) = UserForm1.Controls("TextBox_2"): Set TBs(2) = UserForm1.Controls("TextBox_3")
Set TBs(3) = UserForm1.Controls("TextBox_4"): Set TBs(4) = UserForm1.Controls("TextBox_5"): Set TBs(5) = UserForm1.Controls("TextBox_6")
Set TBs(6) = UserForm1.Controls("TextBox_7"): Set TBs(7) = UserForm1.Controls("TextBox_8"): Set TBs(8) = UserForm1.Controls("TextBox_9")
Set TBs(9) = UserForm1.Controls("TextBox_10"):

For i = 0 To Amount
    With ActiveDocument
        If .Bookmarks("href" & i + 1).Range = ".jpg" Then
            .Bookmarks("href" & i + 1).Range _
            .InsertBefore TBs(i)
            .Bookmarks("src" & i + 1).Range _
            .InsertBefore TBs(i)
            .Bookmarks("alt" & i + 1).Range _
            .InsertBefore TBs(i)
        End If
    End With
Next

UserForm1.Hide

    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting

    With Selection.Find
        .Text = ".jpg "
        .Replacement.Text = ".jpg"

        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = True
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.HomeKey Unit:=wdLine
    Selection.Find.Execute Replace:=wdReplaceAll



        Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting

    With Selection.Find
        .Text = "/ "
        .Replacement.Text = "/"

        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = True
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.HomeKey Unit:=wdLine
    Selection.Find.Execute Replace:=wdReplaceAll



    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting

    With Selection.Find
        .Text = ".jpg.jpg"
        .Replacement.Text = ".jpg"

        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = True
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.HomeKey Unit:=wdLine
    Selection.Find.Execute Replace:=wdReplaceAll

End Sub

我已经发现我做错了什么。我忘了在设置文本框时,它们从零开始。我在我的For I语句中输入了一个Amount-1,它现在可以正常工作了。它正在我的文档中搜索另一个不存在的字段。

在一个过程中,您调用的对象是UserForm1.ControlsTextBox_1,但这不是您在前面的事件过程中分配给它们的名称:UserForm1.Controls.AddForms.TextBox.1,Test&textboxCounter,没错……我认为LoadBuildingBlocks与这个问题无关。就错误消息而言,错误消息是相当明确的:您试图按名称引用对象,而该名称不存在。。。