在不同模块中使用来自 Useform 的变量

Use Variable from Useform in different Module

我找不到我要找的东西,但也许你能帮我。

我的问题是我有一个用户表单,用户必须在其中进行输入。我想存储该输入并稍后在不同的模块中使用它,即将它粘贴到一个单元格中。简单的解决方案应该是将其设为 public 变量,但由于某些原因它不起作用。这是我尝试使用的代码:

用户表单:

Option Explicit

Public VarBezeichnungReifenliste As String

Private Sub CommandButton3_Click()

    VarBezeichnungReifenliste = TextBox1.Value
    Call Übertragen

End Sub

Private Sub CommandButton2_Click()

    Unload Me

End Sub

模块:

Option Explicit

Public Sub Übertragen()

  Worksheets("XY").Cells(1, 1).Value = VarBezeichnungReifenliste

End Sub

错误信息说变量没有声明(VarBezeichnungReifenliste)所以我想我没有足够public声明它?

使用 Userform1.Show 通过工作表上的一个简单按钮打开用户表单本身。所以这里没什么特别的。

VBA 长期存储变量很奇怪。作为一般经验法则,如果您能够在保存变量和需要获取值之间与 Excel 工作簿进行交互,则不能指望该变量仍然保持其值。

解决此问题的最安全方法是将您的值存储在隐藏工作表的单元格中,并在需要时从那里读取它。

足够公开

解决方案 1

UserForm1:

Option Explicit

Private Sub CommandButton3_Click()
    VarBezeichnungReifenliste = TextBox1.Value
    Module1.Übertragen
End Sub

Private Sub CommandButton2_Click()
    Unload Me
End Sub

模块 1:

Option Explicit

Public VarBezeichnungReifenliste As String

Sub Übertragen()
    Worksheets("XY").Cells(1, 1).Value = VarBezeichnungReifenliste
End Sub

结论

只需移动变量声明

Public VarBezeichnungReifenliste As String

到 'normal' 模块。

解决方案2

UserForm1:

Option Explicit

Public VarBezeichnungReifenliste As String

Private Sub CommandButton3_Click()
    VarBezeichnungReifenliste = TextBox1.Value
    Module1.Übertragen
End Sub

Private Sub CommandButton2_Click()
    Unload Me
End Sub

模块 1:

Option Explicit

Sub Übertragen()
    Worksheets("XY").Cells(1, 1).Value = UserForm1.VarBezeichnungReifenliste
    Worksheets("XY").Cells(1, 1).Select
End Sub

结论

只需使用

Worksheets("XY").Cells(1, 1).Value = UserForm1.VarBezeichnungReifenliste

而不是

Worksheets("XY").Cells(1, 1).Value = VarBezeichnungReifenliste

在模块 1 中。

解决方案 3

UserForm1:

Option Explicit

Public VarBezeichnungReifenliste As String

Private Sub CommandButton3_Click()
    VarBezeichnungReifenliste = TextBox1.Value
    Übertragen
End Sub

Private Sub CommandButton2_Click()
    Unload Me
End Sub

Sub Übertragen()
    Worksheets("XY").Cells(1, 1).Value = VarBezeichnungReifenliste
End Sub

结论

将所有内容移至 UserForm1。