以编程方式创建的名称冲突的表单

时间:2015-04-23 14:16:47

标签: excel forms vba excel-vba

我在Excel VBA中使用代码创建表单。下面的代码片段提出了一个问题,其中表单以某种方式创建,名称已经正确设置,然后,在我设置所述变量的唯一地方,它引发了一个问题,说有一个具有该名称的表单(情况可变)。

这是我的代码:

Dim frmName As String
frmName = "frm_" & Replace(CStr(Nome_do_formulario), " ", "")
Set myForm = ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_MSForm)

With myForm
    .Properties("Caption") = Nome_do_formulario
    .Properties("Width") = 300
    .Properties("Height") = 270
    .Properties("Name") = frmName
End With

要清楚,错误是当它到达行时:

Set myForm = ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_MSForm)

不知何故,它已经创建了一个名称在with语句之后设置的表单:

  With myForm
        .Properties("Caption") = Nome_do_formulario
        .Properties("Width") = 300
        .Properties("Height") = 270
        .Properties("Name") = frmName '<- HERE
    End With

然后,当它试图运行with语句时,它会断开并说已存在具有该名称的表单。

整个事情在另一个模块中运行:

Public Sub Main()

       Dim ac As autoCrud
       Set ac = New autoCrud
       ac.CreateCRUDView     

End Sub

表单创建发生在ac.CreateCRUDView

如何在设置之前拉取名称变量,然后尝试使用它来制作另一个同名的表单?

1 个答案:

答案 0 :(得分:1)

VBE在VBA项目中关于UserForms集合时会遭受严重损坏。 即使您从项目中明确删除了UserForm,也可能会以编程方式(有时以正常方式)创建另一个具有相同名称的错误。

尝试使用这种方法:

Dim frmName As String
Dim myForm As VBComponent

frmName = "frm_" & Replace(CStr(Nome_do_formulario), " ", "")
ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_MSForm).Name = frmName
Set myForm = ThisWorkbook.VBProject.VBComponents(frmName)

With myForm
    .Properties("Caption") = Nome_do_formulario
    .Properties("Width") = 300
    .Properties("Height") = 270
End With

请记住,如果您删除新创建的用户表单并使用相同的Nome_do_formulário值运行此代码,则会收到错误。