【问题标题】:Excel VBA - Public variable not passing between modulesExcel VBA - 公共变量不在模块之间传递
【发布时间】:2017-10-25 02:09:41
【问题描述】:

我试图将一个公开声明的变量的值从用户窗体传递回代码最初启动的模块。我可以在用户窗体中打印变量的值,但是当代码跳回起始模块时它不会持续存在。 Option Explicit 在两边都声明了,我也声明了单个变量(忽略 var2 - var6,因为在我解决这个单一问题之前它们不会被使用)。

代码路径从下面的第一部分开始,跳转到“StatSelection.Show”处的用户表单,然后在用户表单子的末尾跳回。第一个 debug.print 提供了变量,但第二个是空白的..

主要代码是:

Option Explicit

Public var1 As String

Sub NoNameGame2FirstRoundResults()
'
' NoNameGame Macro
'
'
'Load Round 1 file
    Dim r1Name As Variant
    Dim nngr1r As Workbook
    ChDir "D:\Users\stefan.bagnato\Desktop\No Name Game"
    r1Name = Application.GetOpenFilename
    If r1Name <> False Then
        Set nngr1r = Workbooks.Open(r1Name)
    End If

'Load previous week's file
    Dim r1rName As Variant
    Dim wps As Workbook
    ChDir "D:\Users\stefan.bagnato\Desktop\Weekly Performance Summary"
    r1rName = Application.GetOpenFilename
    If r1rName <> False Then
        Set wps = Workbooks.Open(r1rName)
    End If

'Create radio buttons to select week 1 stat
    StatSelection.Show

'Parse Column B for names, and paste corresponding data in column C
nngr1r.Activate

Debug.Print var1

ActiveWorkbook.Worksheets("Sheet1").Columns(2).Find("Adam").Offset(N, 1) = var1

End Sub

用户表单是:

    Option Explicit

Public var1 As String

Sub OptionButton1_Click()
    Dim wps As Workbook, x As String
    For Each wps In Workbooks
    If wps.name <> ThisWorkbook.name Then x = wps.name
    Next wps
    Workbooks(x).Activate

    var1 = Format((ActiveWorkbook.Worksheets("Sheet1").Range("F4")), "hh:mm:ss")
    var2 = Format((ActiveWorkbook.Worksheets("Sheet1").Range("F5")), "hh:mm:ss")
    var3 = Format((ActiveWorkbook.Worksheets("Sheet1").Range("F6")), "hh:mm:ss")
    var4 = Format((ActiveWorkbook.Worksheets("Sheet1").Range("F7")), "hh:mm:ss")
    var5 = Format((ActiveWorkbook.Worksheets("Sheet1").Range("F9")), "hh:mm:ss")
    var6 = Format((ActiveWorkbook.Worksheets("Sheet1").Range("F10")), "hh:mm:ss")


    Debug.Print var1

    Me.Hide
End Sub

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    从用户窗体模块中删除公共变量声明并仅在标准模块上声明它。

    【讨论】:

    • @sbagnato 很高兴它成功了。请花一点时间接受答案,将您的问题标记为已解决。
    • 更好的是,只在用户窗体中声明 var1 并像这样使用:With StartSelection .Show Msgbox .Var1 ENd With
    • @jkpieterse 并没有好多少,仍然可以使用默认实例,因此会遇到与没有 With 块完全相同的问题/错误。
    • 看,永远不要假设然后发布东西:-)你当然是对的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-21
    • 2020-05-16
    • 1970-01-01
    • 1970-01-01
    • 2014-03-15
    相关资源
    最近更新 更多