[英]VBA Excel : share variables across modules, sheets and workbooks
我正在尝试跨多个模块、工作表和工作簿访问变量。 我什至无法在同一个工作簿中的模块之间共享它们……我想知道缺少什么。 在这种情况下,我想打开一个文件,然后跨模块共享其名称,以便通过其他功能对其进行操作。
运行此过程"Sub get_workbook_and_sheets_names_S"
时,它要求运行一个宏(我选择了Sub myMain
),但后来我只得到了宏 output。
Sub myMain()
Dim i As Integer
Static v_sheet_name_S As Variant
Static v_workbook_name_S As Variant
'Call f_FSOGetFileName_S
With Application.Workbooks(f_FSOGetFileName_S)
v_workbook_name_S = .Name
Debug.Print "this is WORKBOOK : " & v_workbook_name_S
For i = 1 To .Sheets.Count
v_sheet_name_S = .Sheets(i).Name
Debug.Print "this is workbook SHEET : " & v_sheet_name_S
Next
End With
'Call f_FSOGetFileName_T
End Sub
Function f_FSOGetFileName_S() 'OPEN SOURCE FILE
Dim v_strFile_S As String
Dim v_FileName_S As String
Dim v_FSO_S As New FileSystemObject
Dim v_FileNameWOExt_S As Variant
Set v_FSO_S = CreateObject("Scripting.FileSystemObject")
'get file full path
v_strFile_S = Application.GetOpenFilename(filefilter:="Excel files,*.x*", Title:="select SOURCE file")
Workbooks.Open Filename:=v_strFile_S
'Get File Name
v_FileName_S = v_FSO_S.GetFileName(v_strFile_S)
'Get File Name no Extension
v_FileNameWOExt_S = Left(v_FileName_S, InStr(v_FileName_S, ".") - 1)
f_FSOGetFileName_S = v_FileName_S 'FUNCTION RESULT
End Function
Sub get_workbook_and_sheets_names_S(v_workbook_name_S, v_sheet_name_S)
Debug.Print "Source workbook name : " & v_workbook_name_S
Debug.Print "Source sheet name : " & v_sheet_name_S
End Sub
为了创建Global
变量,请按以下方式进行:
Public
变量: Public v_workbook_name_S As String
可以从已声明它的工作簿的所有模块访问/使用此变量。 你应该简单地使用:
Debug.print v_workbook_name_S
当然,变量必须事先收到一个值......
Private
)。 在标准模块中:Sub setGobVarStr()
v_workbook_name_S = "myString"
End Sub
Sub testReadGlobalVar()
Dim wbName As String, myName As String
wbName = "Teste Forum StackOverflow Last.xlsm"
myName = Application.Run("'" & wbName & "'!getWbName")
Debug.Print myName
End Sub
当然,全局变量应该事先收到一个值。 如果没有,代码将返回一个VBNullString
,无论如何......
注意:
您不能在 colling Sub
/ Function
中声明相同的变量,在这种情况下,代码不会引发任何错误,但它会重写全局变量并返回一个VBnullString
,太...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.