我在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
。
如何在设置之前拉取名称变量,然后尝试使用它来制作另一个同名的表单?
答案 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
值运行此代码,则会收到错误。