簡體   English   中英

VBA:引用相同代碼的多個用戶窗體

[英]VBA: Multiple Userforms Referencing Same Code

我有一個VBA代碼,該代碼通過用戶表單獲取用戶輸入(條件),創建滿足上述條件的項目列表,並通過消息框隨機輸出列表項之一。

我想創建第二個用戶窗體,在上述代碼完成后將打開它,並讓該用戶窗體顯示隨機輸出。

我對如何做到這一點有一些疑問。

  1. 我希望第二個用戶窗體包含一個標簽,其標題將反映隨機輸出。
  2. 我希望第二個用戶窗體允許用戶重新執行原始代碼(即更改隨機結果)

有人對此有經驗嗎?

我將使用第二種形式的Property過程來獲取隨機值。

在新的空白工作簿中作為示例:插入一個新模塊並粘貼下面的代碼。 此代碼代表您的代碼,它輸出隨機結果。

Public Function RandomNumber() As Double

    RandomNumber = Rnd(10)

End Function

創建一個新的用戶窗體(UserForm2),添加一個命令按鈕(CommandButton1)和一個標簽(Label1)。 將以下代碼添加到此表單。 我在其中放置了四個過程。 MyProp設置ThePassedNumber的價值,UpdateLabel1更新標簽顯示的值,UserForm_Initialize加載窗體時,CommandButton1_Click當您單擊按鈕,執行執行。

Private ThePassedNumber As Double

Property Let MyProp(TheNumber As Double)
    ThePassedNumber = TheNumber
    UpdateLabel1
End Property


Private Sub CommandButton1_Click()

    ThePassedNumber = RandomNumber
    UpdateLabel1

End Sub

Private Sub UserForm_Initialize()

    UpdateLabel1

End Sub

Private Sub UpdateLabel1()

    Me.Label1.Caption = ThePassedNumber

End Sub

添加第二個窗體(UserForm1)和添加命令按鈕(CommandButton1)並將此代碼放在窗體中。
它將創建一個新的用戶窗體實例,向其傳遞一個隨機值,然后顯示該窗體。

Private Sub CommandButton1_Click()

    Dim frm2 As UserForm2

    Set frm2 = New UserForm2
    frm2.MyProp = RandomNumber
    frm2.Show

End Sub

現在,您只需要重寫RandomNumber函數即可返回列表項而不是數字。

我想您只想使用一個無限循環,該循環在用戶被取消時會中斷。 像這樣:

Sub MySub()
    Dim myRandOutput As Single
    Do
        myRandOutput = myRand()
    Loop While MsgBox(myRandOutput, vbRetryCancel) = vbRetry
End Sub

Function myRand() As Single
    myRand = Rnd()
End Function

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM