2015-04-23 36 views
0

我在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

什麼是Nome_do_formulario? – BruceWayne

+0

它只是設置爲常量的表單的可讀名稱 –

+0

當您在新工作表上運行腳本時,它一次運行嗎?或者只有在你運行後纔會給你錯誤?並且要清楚,錯誤在於它的名稱(.Properties(「Name」)= frmName)是說有一個表單已經有了這個名字? – BruceWayne

回答

0

當涉及VBA項目中的UserForms集合時,VBE遭受嚴重損壞。 即使您從項目中明確移除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值運行這段代碼,你會得到一個錯誤。

+0

這段代碼實際上是在一個類的函數內部,並且這個函數是在一個Main子類中的一個實例中調用的... –

+0

您可以用'Function CreateForm(Nome_do_formulario)'替換'Sub Main()',難道你不能? –

+0

編輯該問題。 –