1

我已经将一个用户表单插入到一个已经包含一堆模块的项目中。通过使用用户表单中的代码,我验证了我可以从组合框中返回值。

用户表单代码:

Public SelectedPacking As Integer

Private Sub CancelButton_Click()
    UserForm1.Hide        
 End Sub

Private Sub OKButton_Click()
    SelectedPacking = ComboBox1.ListIndex    
    Call DemoDialogOk

    'Return list index value to cell C50
    Worksheets("Inputs & Results").Range("C50") = SelectedPacking    
    Unload UserForm1    
End Sub

我的问题是我无法将此值传递给模块中编写的任何宏。

模块代码:

Public Sub ShowComboBox()
    UserForm1.Show    
End Sub

 Public Sub DemoDialogOk()    
    ival = SelectedPacking

    'Return value of ival (list index value from combo box) to cell C17
     Worksheets("Packed bed (Random)").Range("C17") = ival
End Sub

显然该模块包含更多有用的代码,但我已经注释掉所有内容以尝试找出我哪里出错了。我一直在改变一些东西,但我仍然无法让任何东西出现在 C17 单元格中,所以我认为我错过了一些基本的东西。

4

3 回答 3

1

我认为有两个选择:1)更改 DemoDialogueOK 以接受变量:

Public Sub DemoDialogOk(SelPack as integer)    
    ' ival = SelectedPacking

    Worksheets("Packed bed (Random)").Range("C17") = SelPack
End Sub

Private Sub OKButton_Click()
    SelectedPacking = ComboBox1.ListIndex
    Call DemoDialogOk(SelectedPacking)

    ...
End Sub

或选项二:完全限定来自useform的变量,即:

Public Sub DemoDialogOk()
     ival = ufYourForm.SelectedPacking

    ...
End Sub

用户表单中的公共变量似乎不像模块级别那样“公共”......

于 2013-08-30T00:17:42.083 回答
0

在西蒙的回答之上,如果您愿意,您可以传递整个用户表单。这将使您可以访问它的所有部分,并且如果您需要对是否选中不同的复选框进行一些验证,则特别有用。

 Sub inOurUserForm()
    Call inADifferentModule(Me) 'Passes this userform
 End Sub

 Sub inADifferentModule(ourForm As UserForm1)
    'Passed the form, and using it like a class (As whatever the form is called)
    If ourForm.chkYes = True Then
        'Do something
    Else
        'Do something else, like
        ourForm.chkYes = False 'Because we are passing the object itself _
                                 rather than a copy, at least in my understanding
    End If

End Sub

而且您不一定需要传递用户表单,因为您可以将其作为对象本身引用,例如

UserForm1.chkYes
于 2015-07-09T17:07:38.797 回答
0

一个非常简单的解决方案是在 Userform 中声明一个变量(本例中为 UserForm1)

    Public Pass as string

此 Pass 将包含您存储密码的字符串。存储密码后,您可以隐藏表单

    Me.Hide

在模块中,您可以将表单打开为模态

    UserForm1.Show vbModal

现在,在运行用户表单中的所有代码之后,可以在模块中检索密码 -

    UserForm1.Pass 

然后您可以卸载隐藏的表单

    unload UserForm1
于 2017-01-12T15:42:34.450 回答