2014-01-10 56 views
0

我想在Excel中使用標題搜索用戶表單。如果用戶表單不存在,那麼我想要顯示一個消息框「messageform not found」。但它不起作用。搜索用戶表單標題

Dim oUserForm As Object 
On Error Resume Next 
Set oUserForm = UserForms.Add.Caption("Add New") 
On Error GoTo 0 
If oUserForm Is Nothing Then 
    MsgBox "The Userform was not found.", vbExclamation, "Error" 

Else 

End If 
+0

您正在搜索的這種形式是在Access或excle? – Hiten004

+0

Excel我需要的是它來搜索它通過標題名稱 – user3183324

+1

你的問題說了一件事,但你的代碼說另一件事。 UserForms.Add意味着你正在創建一個新表單,而不是搜索現有表單,所以我很困惑。 – theMayer

回答

0

以下是代碼。循環中的Excel文件中的所有形式和按名稱搜索形式:

Dim UForm As Object 
Dim strFormName As sting 

strFormName = "FormName" ' replace this string 

IsUserFormLoaded = False 
For Each UForm In VBA.UserForms 
    If UForm.name = strFormName Then 
     MsgBox "Form exist" 
     Exit For 
    End If 
Next 
+0

該搜索的名稱不是標題 – user3183324

0

我想也許你感到困惑的UserForm和Form類模塊的概念。這並不令人驚訝,因爲它很混亂。

代碼中Add方法的參數是一個文本字符串,它是UserForm Class的名稱。這是VBE中出現在Project Explorer的Forms部分中的東西,它不是Form,它是Form的模板,方式與Class Module是Custom Object的模板相同。

UserForm是一個標準Interface,由VBE Forms文件夾中定義的任何表單繼承,並在VBA.UserForms Collection的所有成員中公開。定義表單時,可以添加其他屬性,例如Controls,例如Name。 UserForm接口中沒有Name屬性。另一方面包含Caption,因此您可以遍歷UserForms集合並檢查Caption屬性以查看當前是否加載了帶有該Caption的表單。對於任何用戶窗體類的任何實例,Caption都將爲「用戶窗體1」,除非Userform Class中的代碼或其他代碼在代碼的特定實例上進行操作。

這並沒有完全回答這個問題,因爲這個問題有點不清楚,但也許會使它沒有意義?