你可以有多個相同表單的實例。您可以使用此保留多套形式的值
試試這個:
創建您的形式,像往常一樣。讓我們把它叫做MyForm
你表創建幾個按鈕。我的例子使用ActiveX按鈕,但也可以使用Form Control按鈕。讓我們稱之爲CommandButton1
和CommandButton2
在表單模塊,包括Terminate
分,其中包括該代碼
Private Sub UserForm_Terminate()
' any other code you may need...
Unload Me
End Sub
表單布頓保存/隱藏的形式必須是
片材按鈕代碼如下
- 的代碼是爲每個按鈕相同(並調用一個公共子),和每個按鈕都有自己
Static
形式變量)。
- 需要錯誤處理程序來處理與表單正確關閉的情況。在這種情況下,例如不再存在,但局部靜態變量也不是沒有
例子顯示顯示爲無模式形式,你可以,如果你想改變這個爲Modal。
Private Sub CommandButton1_Click()
Static frm As MyForm
ShowMyForm frm
End Sub
Private Sub CommandButton2_Click()
Static frm As MyForm
ShowMyForm frm
End Sub
Private Sub ShowMyForm(frm As MyForm)
If frm Is Nothing Then Set frm = New MyForm
On Error GoTo EH
frm.Show vbModeless
Exit Sub
EH:
If Err.Number = -2147418105 Then
On Error GoTo 0
Set frm = Nothing
Set frm = New MyForm
frm.Show
End If
On Error GoTo 0
End Sub
最終結果:形式相同的多個副本,每個都有自己的價值觀
UPDATE
在性反應發表評論如何我會訪問va嗎?每個用戶內部的riable在外部形成
在示例中,Form
實例只能在From模塊本身的Command Button Click Handler例程中訪問。如果您可以在表單模塊中編寫代碼,則不需要進行更改。
要使表單實例在別處可用,請考慮將其聲明移至標準模塊的模塊範圍。你可以聲明它們,例如單個變量,一個數組(靜態或動態),一個集合,一個字典。哪種結構最好取決於你想如何管理和訪問你的表單實例。
對於eaxample,一個靜態數組:代碼在標準模塊
Option Explicit
Global MyForms(1 To 2) As MyForm
更新CommandButton
代碼
Private Sub CommandButton1_Click()
ShowMyForm Module1.MyForms(1)
End Sub
Private Sub CommandButton2_Click()
ShowMyForm Module1.MyForms(2)
End Sub
Private Sub ShowMyForm(frm As MyForm)
沒有變化,相同的代碼工作的前
與之前相同,但您現在可以訪問標準模塊中的全局變量
Sub Demo()
Dim i As Long
For i = LBound(MyForms) To UBound(MyForms)
If Not MyForms(i) Is Nothing Then
MsgBox "For " & i & " Value = " & MyForms(i).TextBox1.Value
End If
Next
End Sub
看看這個答案:http://stackoverflow.com/questions/19881863/how-to-use-comparison-methods-between-class-object-modules-in-vba-in-a-similar-m/19908375#19908375 – tmoore82
另外這個:http://stackoverflow.com/questions/19373081/how-to-use-the-implements-in-excel-vba/19379641#19379641 – tmoore82
什麼是錯誤? –