Excel VBA-不在模块之间传递的公共变量
我试图将公开声明的变量值从userform传递回代码最初启动的模块。我可以在userform中打印变量的值,但当代码跳回起始模块时,它不会持久化。 Option Explicit在两边都声明了,我也声明了单个变量(忽略var2-var6,因为在我解决这个单一问题之前,它们不会被使用) 代码路径从下面的第一部分开始,跳转到“StatSelection.Show”处的userform,然后跳回userform子部分的末尾。第一个debug.print提供变量,但第二个为空 主要代码是:Excel VBA-不在模块之间传递的公共变量,vba,excel,Vba,Excel,我试图将公开声明的变量值从userform传递回代码最初启动的模块。我可以在userform中打印变量的值,但当代码跳回起始模块时,它不会持久化。 Option Explicit在两边都声明了,我也声明了单个变量(忽略var2-var6,因为在我解决这个单一问题之前,它们不会被使用) 代码路径从下面的第一部分开始,跳转到“StatSelection.Show”处的userform,然后跳回userform子部分的末尾。第一个debug.print提供变量,但第二个为空 主要代码是: Option
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实际上没有太多的改进,仍然使用默认实例,因此会遇到与使用块时没有时完全相同的问题/错误。请参阅,永远不要假设,然后张贴东西:-)你当然是对的。