【问题标题】:Is there a way to use local variables across modules?有没有办法跨模块使用局部变量?
【发布时间】:2012-03-27 12:05:08
【问题描述】:

我有一个带有模块和用户窗体的 VBA 项目。我想在我的用户表单中使用我的模块中的一些变量。

是否有必要在全局范围内声明这些变量?我不喜欢全局变量,因为它们在代码执行后会留在内存中,而且我必须在宏开始时一一重置这些变量。我不能使用 End 关键字从内存中清除变量,因为我需要记住其中的一两个变量。人们通常是怎么做的?

编辑:有没有办法在不创建全局变量的情况下将变量从用户窗体传递到模块?

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    在您的用户表单中创建一个公共属性,并使用该属性将变量传递到表单中。 Useforms 只是类模块,除了它们有一个用户界面组件。示例:在您的用户表单的代码模块中

    Option Explicit
    
    Private msLocalVar As String
    
    Public Property Get LocalVar() As String
        LocalVar = msLocalVar
    End Property
    
    Public Property Let LocalVar(sLocalVar As String)
        msLocalVar = sLocalVar
    End Property
    
    Private Sub CommandButton1_Click()
    
        Me.LocalVar = Me.LocalVar & " more strings attached"
    
        Me.Hide
    
    End Sub
    

    在标准模块中

    Sub ShowForm()
    
        Dim sLocalVar As String
        Dim ufUserForm1 As UserForm1
    
        sLocalVar = "Some string"
    
        Set ufUserForm1 = New UserForm1
        ufUserForm1.LocalVar = sLocalVar 'pass in variable
        ufUserForm1.Show
    
        'This executes after the .Hide in the form
        Debug.Print ufUserForm1.LocalVar
    
        'Close out the form - previously just hidden
        Unload ufUserForm1
    
    End Sub
    

    【讨论】:

    • 是否可以在不创建全局变量的情况下将变量从用户窗体传递到模块?
    【解决方案2】:

    您可以这样做的一种方法是像这样声明公共变量:

    Public strvar as String
    Sub Abfrage()
    'Your Code
    End Sub
    

    但如果您不喜欢这种方式,您可以插入一个新的 Excel 工作表,将新工作表的属性设置为“2 - xlSheetVeryHidden”,然后您可以在该工作表的单元格中写入值并读取它们从您的用户窗体中。

    因此您将没有全局变量,但所有值都在该表上。然后,如果需要,您可以从该表中取出值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-26
      • 2020-11-30
      • 1970-01-01
      • 2019-05-27
      • 2019-02-21
      • 1970-01-01
      • 2017-09-01
      • 2010-12-30
      相关资源
      最近更新 更多