2017-05-31 79 views
0

因此,這不是一個巨大的交易,但它在我的皮膚下。我試圖在之間共享一個變量之間的一個用戶窗體。聲明一個公共變量似乎是一個簡單的方法來實現它,但顯然,你不能從一個用戶表單中聲明公共變量。所以我似乎必須在一個完全不相關的模塊中聲明變量,我發現這個模塊非常煩人。這是在用戶表單中的subs之間傳遞變量的唯一方法嗎?Excel VBA共享變量內用戶

對於上下文,我試圖在「設置」用戶窗體上進行「確定」,「應用」和「取消」按鈕,其中「確定」和「應用」按鈕將永久性地進行設置中的更改。

這是從列表框(PathList)中刪除項目的按鈕。該列表框正在工作表上存儲數據,但我不希望項目實際上從工作表中刪除,直到我點擊「應用」。我想與ApplyButton_Click子例程共享SelectedArray()變量,以便「應用」按鈕實際上可以從工作表中刪除單元格。評論的代碼是我想要的「應用」按鈕來做的。

Private Sub RemovePathButton_Click() 
Dim SelectedArray() 
Dim ctr As Integer 
ctr = 1 

For intCount = PathList.ListCount - 1 To 0 Step -1 
    If PathList.Selected(intCount) = True Then 
     ReDim Preserve SelectedArray(ctr) 
     SelectedArray(ctr) = intCount 
     ctr = ctr + 1 
    End If 
Next intCount 


For i = 1 To UBound(SelectedArray) 
' Dim num As Integer 
' num = SelectedArray(i) + 4 
' Worksheets("Settings").Range("A" + CStr(num)).Delete (xlShiftUp) 
    PathList.RemoveItem (SelectedArray(i)) 
Next 

End Sub 

回答

0

如果在UserForm模塊的頂部聲明一個變量,則該變量可以被用戶窗體模塊上的任何控件或過程訪問。

插入用戶窗體並在其上放置兩個命令按鈕並將以下代碼放在用戶窗體模塊上。 啓動用戶窗體並單擊兩個命令按鈕,查看如何以這種方式訪問​​變量。

Option Explicit 

Dim Str As String 

Private Sub CommandButton1_Click() 
MsgBox Str 
End Sub 

Private Sub CommandButton2_Click() 
Call Test 
End Sub 

Private Sub UserForm_Initialize() 
Str = "This variable can be accessed by any code on UserForm Module." 
End Sub 

Sub Test() 
MsgBox Str 
End Sub 
+0

謝謝!我知道它必須是那樣簡單。這是否也適用於常規模塊?在模塊內的所有子變量之前簡單地聲明變量? –

+0

@AlecHolmes不客氣。是的,這是真的。如果你在模塊的頂部聲明它們,就稱爲模塊級變量。 – sktneer