我試圖將變數“proveedor”的值從用戶表單傳遞到另一個模塊。但我不明白它的作業原理。當我運行“TEST Sub”時,似乎未定義“proveedor”變數。有什么建議嗎?
在用戶表單中
Private Sub cmdAceptar_Click()
If optProveedorA.Value = True Then
proveedor = "ProveedorA"
End If
If optProveedorB.Value = True Then
proveedor = "ProveedorB"
End If
If optProveedorC.Value = True Then
proveedor = "ProveedorC"
End If
End Sub
在模塊中
Public proveedor As String
Public Sub TEST()
'Show userform
frmProveedor.Show
Debug.Print proveedor
End Sub
uj5u.com熱心網友回復:
我更喜歡以下模式從用戶表單中檢索選定的值:
呼叫用戶表單的模塊:
Public Sub TEST()
'Show userform modal
frmProveedor.Show vbModal
'when form is hidden - via cmd-button - we proceed in this sub
'retrieve the selected value from the user form itself
Debug.Print frmProveedor.proveedor 'or assign to a local variable
'now unload the form
Unload frmProveedor
End Sub
這是 userforms 模塊 負責為provedor回傳正確的值
Option Explicit
Public Property Get proveedor() As String
If optProveedorA = True Then
proveedor = "ProveedorA"
ElseIf optProveedorB = True Then
proveedor = "ProveedorB"
ElseIf optProveedorC = True Then
proveedor = "ProveedorC"
Else
Err.Raise vbObjectError, , "No proveedor selected."
End If
End Property
Private Sub cmdAceptar_Click()
'important - we hide the form here - unload is done by the calling sub
Me.Hide
End Sub
uj5u.com熱心網友回復:
您需要在模塊中為全域變數分配一個值。讓您的用戶表單代碼呼叫執行分配的子程式。
用戶表單:
Private Sub cmdAceptar_Click()
If optProveedorA.Value = True Then
Module1.assignproveedor "ProveedorA"
End If
If optProveedorB.Value = True Then
Module1.assignproveedor "ProveedorB"
End If
If optProveedorC.Value = True Then
Module1.assignproveedor "ProveedorC"
End If
End Sub
模塊:
Public proveedor As String
Public Sub TEST()
'Show userform
frmProveedor.Show
Debug.Print proveedor
End Sub
Public Sub assignproveedor(valstr As String)
proveedor = valstr
End Sub
請注意,Sub Test()它將掛起直到用戶表單關閉,因此 debug.print 只會觸發一次并列印最后分配的值。
如果你想避免全域變數:
模塊:
Public Sub TEST()
'Show userform
frmProveedor.Show
End Sub
Public Sub printOptionSelect(valstr As String)
Debug.Print valstr
End Sub
用戶表單:
Private Sub cmdAceptar_Click()
If optProveedorA.Value = True Then
Module1.printOptionSelect "ProveedorA"
End If
If optProveedorB.Value = True Then
Module1.printOptionSelect "ProveedorB"
End If
If optProveedorC.Value = True Then
Module1.printOptionSelect "ProveedorC"
End If
End Sub
這將在每次單擊按鈕時觸發列印,因為列印不再依賴于懸掛Test子。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/369555.html
上一篇:VBA中日期格式的區別
