Excel-VBA:在运行时设置Userfom Control.Name(运行时错误382)

时间:2017-04-02 22:58:34

标签: vba excel-vba userform multipage excel

我正在开发一个小的Excel-VBA GUI /表单,供用户从/到.ini文件读取和写入数据。其中一个UserForms有一个MultiPage项,用户在运行时和after help from stackoverflow创建页面,他们也可以移动页面。因为控件属性用于将数据写入.ini文件,所以控件必须正确命名,这与我的目的一致,除其他外,与相关的MultiPage.Value一致。我在MoveLeft / Right方法中添加了以下内容,我收到一条错误消息,说我无法在运行时更改Control.Name属性(382)。

For i = 1 To UFmodproject.MultiPage1.Pages.Count - 1
    For Each Ctrl In UFmodproject.MultiPage1.Pages(i).Controls
        If TypeOf Ctrl Is MSForms.TextBox Then
            Ctrl.Name = Left(Ctrl.Name, Len(Ctrl.Name) - 1) & i
        End If
    Next
Next

奇怪的是,我在复制页面时做的几乎是同样的事情,这不会产生任何错误:

For Each newCtrl In UFmodproject.MultiPage1.Pages(pCount).Controls
    For Each Ctrl In UFmodproject.MultiPage1.Pages(UFmodproject.MultiPage1.Value).Controls
        If (Ctrl.Left = newCtrl.Left And Ctrl.Top = newCtrl.Top) Then
            newCtrl.Name = Left(Ctrl.Name, Len(Ctrl.Name) - 1) & pCount
            Exit For
        End If
    Next
    '[bunch of other code...]
Next

这里的错误是什么?对于它的价值,我尝试了Dim Ctrl as ObjectDim Ctrl as Control,两者都在复制时起作用,但在我只尝试设置Control.Name属性时都不起作用。此外,复制页面的代码位于标准模块中,并从类模块调用。重命名控件的新代码位于类模块中。我尝试将它移动到另一个标准模块,但无济于事。

编辑:
我以为我已经弄明白了,错误并不是它在运行时无法更改属性,但是当Control.Name属性设置为自己的值时,似乎检测到一个模糊的名称。但是当我试图将页面移动到值1时,我仍然遇到错误。因为我似乎仍然有模糊的名字,所以我最终得到了以下测试:

Sub SetNames()
    Dim Ctrl As Object
    Dim Ctrl2 As Object
    Dim i As Integer
    Dim Name As String
    For i = 1 To UFmodproject.MultiPage1.Pages.Count - 1
        For Each Ctrl In UFmodproject.MultiPage1.Pages(i).Controls
            If Int(Right(Ctrl.Name, 1)) <> i Then
                For Each Ctrl2 In UFmodproject.Controls
                    If Ctrl2.Name = Left(Ctrl.Name, Len(Ctrl.Name) - 1) & i Then
                        Ctrl2.Name = Left(Ctrl.Name, Len(Ctrl.Name) - 1) & i + 4
                        Exit For
                    End If
                Next
                Ctrl.Name = Left(Ctrl.Name, Len(Ctrl.Name) - 1) & i
            End If
        Next Ctrl
    Next i
End Sub

但我仍然遇到同样的错误,但是当我在即时窗口中检查了具有所谓使用名称的对象时,它确认该对象不存在。我做错了什么?

0 个答案:

没有答案