Excel 将公共变量传输到其他工作表时出现问题

Excel 将公共变量传输到其他工作表时出现问题,excel,vba,variables,public,transfer,Excel,Vba,Variables,Public,Transfer,我正在清理宏(excel中的20个VBA模块),这些宏基于10个不同的excel文件和几个选项卡创建一个总体项目报告 我想简化我的数据交换代码 发件人: Set InitRNG = Workbooks("Master - PSSR.xlsm").Worksheets("PSSRList").Range("A2:C" & LastRow) Set TargetRNG = Workbooks("Master - turnover Report.xlsm").Worksheets("Lib_P

我正在清理宏(excel中的20个VBA模块),这些宏基于10个不同的excel文件和几个选项卡创建一个总体项目报告

我想简化我的数据交换代码

发件人:

Set InitRNG = Workbooks("Master - PSSR.xlsm").Worksheets("PSSRList").Range("A2:C" & LastRow)
Set TargetRNG = Workbooks("Master - turnover Report.xlsm").Worksheets("Lib_PSSR").Range("A2:C" & LastRow)
Call TransfRange(InitRNG, TargetRNG)
致:

所以我必须将简化工作簿和工作表名称声明为public 容易做,但不起作用

下面是我做的简单测试

在此工作簿中:

Option Explicit

Public WBmaster As Workbook
Public WSMgraph As Worksheet
Public WSMminitables As Worksheet
Public WSMtable As Worksheet
Public x As String

Sub Workbook_Open()

Set WBmaster = Workbooks("Master - Turnover report.xlsm")

Set WSMgraph = WBmaster.Worksheets("4graph")
Set WSMminitables = WBmaster.Worksheets("MiniTables")
Set WSMtable = WBmaster.Worksheets("Table")


x = "blabla"
MsgBox "x=" & x

End Sub
工作正常,“x=blabla”出现

然后是主宏,在一个模块中

Sub Main()
MsgBox "x=" & x
End Sub
答案是“x=” 失去了价值。。。。
我做错了什么

试着在普通模块而不是worbook模块中声明
x
。变量只在运行中使用,在
Workbook\u Open
事件中给出一个变量值,如果
Main()
过程没有在同一事件上运行,它将清空所有变量。您需要在代码的同一“运行”中为变量赋值,每次运行都会重置变量。如果你需要在两次跑步之间拿东西,找一张隐藏的床单,把你需要的东西拿在那里。。正如@SJR所说,在普通模块的顶部声明
x
Sub Main()
MsgBox "x=" & x
End Sub