Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA-不在模块之间传递的公共变量_Vba_Excel - Fatal编程技术网

Excel VBA-不在模块之间传递的公共变量

Excel VBA-不在模块之间传递的公共变量,vba,excel,Vba,Excel,我试图将公开声明的变量值从userform传递回代码最初启动的模块。我可以在userform中打印变量的值,但当代码跳回起始模块时,它不会持久化。 Option Explicit在两边都声明了,我也声明了单个变量(忽略var2-var6,因为在我解决这个单一问题之前,它们不会被使用) 代码路径从下面的第一部分开始,跳转到“StatSelection.Show”处的userform,然后跳回userform子部分的末尾。第一个debug.print提供变量,但第二个为空 主要代码是: Option

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

代码路径从下面的第一部分开始,跳转到“StatSelection.Show”处的userform,然后跳回userform子部分的末尾。第一个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
选项显式
公共var1作为字符串
亚纳米级2红外光谱结果()
'
'非巨型宏
'
'
'加载第1轮文件
名称作为变体
作为工作簿的Dim nngr1r
ChDir“D:\Users\stefan.bagnato\Desktop\No Name Game”
r1Name=Application.GetOpenFilename
如果r1Name为False,则
Set nngr1r=工作簿。打开(r1Name)
如果结束
'加载前一周的文件
Dim r1rName作为变体
将wps设置为工作簿
ChDir“D:\Users\stefan.bagnato\Desktop\Weekly Performance Summary”
r1rName=Application.GetOpenFilename
如果r1rName为False,则
设置wps=工作簿。打开(r1rName)
如果结束
'创建单选按钮以选择第1周统计
StatSelection.Show
'解析B列中的名称,并将相应的数据粘贴到C列中
nngr1r.激活
Debug.Print var1
ActiveWorkbook.Worksheets(“Sheet1”)。Columns(2)。Find(“Adam”)。Offset(N,1)=var1
端接头
用户表单为:

    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
选项显式
公共var1作为字符串
子选项按钮1\u单击()
将wps设置为工作簿,将x设置为字符串
对于工作簿中的每个wps
如果wps.name ThisWorkbook.name,则x=wps.name
下一个wps
工作簿(x)。激活
var1=格式((ActiveWorkbook.Worksheets(“Sheet1”).Range(“F4”),“hh:mm:ss”)
var2=格式((ActiveWorkbook.Worksheets(“Sheet1”).Range(“F5”),“hh:mm:ss”)
var3=格式((ActiveWorkbook.Worksheets(“Sheet1”).Range(“F6”),“hh:mm:ss”)
var4=格式((ActiveWorkbook.Worksheets(“Sheet1”).Range(“F7”),“hh:mm:ss”)
var5=格式((ActiveWorkbook.Worksheets(“Sheet1”).Range(“F9”),“hh:mm:ss”)
var6=格式((ActiveWorkbook.Worksheets(“Sheet1”).Range(“F10”),“hh:mm:ss”)
Debug.Print var1
我,藏起来
端接头

从UserForm模块中删除公共变量声明,并仅在标准模块中声明。

@sbagnato很高兴它起作用。请花一分钟接受答案,将您的问题标记为已解决。更好的是,只在Userform中声明var1,并像这样使用:With StartSelection.Show Msgbox.var1 ENdWith@jkpieterse实际上没有太多的改进,仍然使用默认实例,因此会遇到与使用块时没有时完全相同的问题/错误。请参阅,永远不要假设,然后张贴东西:-)你当然是对的。