我有5个包含相同文件名的不同模块。示例将是具有此代码的模块1-5 sFile =“ CIP Split.xlsx的数据文件” 我想一次为所有模块更新此文件名,但无法弄清楚该怎么做。
曾尝试将其公开,但可能未正确完成
Sub ALL_Run_First()
Application.ScreenUpdating = False
Dim Wb As Workbook
Dim usedrng As Range, lastrow As Long
Dim sFile As String
Set usedrng = ActiveSheet.UsedRange
lastrow = usedrng(usedrng.Cells.Count).Row
sFile = "Data File for Test Split.xlsx"
sFile1 = "Test Template.xlsm"
Application.DisplayAlerts = False
If CheckFileIsOpen(sFile) = False Then
Workbooks.Open stPath & sFile, UpdateLinks = False
End If
Application.DisplayAlerts = True
当我尝试执行公共const时,找不到文件。 模块1-5具有相同的代码,因此,当我更改文件名(通常每年一次)时,我希望它更新所有模块
非常感谢大家的帮助!我创建了一个隐藏的设置表,并在代码中引用了该表。
sFile = ThisWorkbook.Sheets(“ Settings”)。Range(“ A2”)。Value
SFile1 = ThisWorkbook.Sheets(“设置”).Range(“ A3”)。值
我更新了所有模块以使用此功能,现在我只需要更新设置表,它就会填充其余模块。
答案 0 :(得分:3)
您正在寻找的是Public Const
-见下文:
模块1:
Public Const mystring = "Hello!"
Sub Test()
'There's nothing here!
End Sub
模块2:
Sub Test2()
MsgBox mystring
End Sub
运行Test2
会产生:
答案 1 :(得分:2)
仅提供@dwirony's excellent answer的替代方法-从语义上说,文件名不是Const
(Const Pi = 3.14159
是一个),...尤其是如果需要更新的话每年!
该值为 data ,而不是 code 。最好的解决方案是将其完全从代码中删除。实现此目的的一种方法可能是(隐藏)“设置”表,其中包含一个特定的命名单元格(例如DataFilePath
),其中包含要使用的文件名。
然后可以将该“设置”工作表命名(将其(Name)
属性设置为SettingsSheet
),然后在该工作表的代码隐藏中,可以公开一个公共属性,该属性可为您提供价值该单元格的地址:
Public Property Get DataFilePath() As String
DataFilePath = Me.Range("DataFilePath").Value
End Property
现在在5个硬编码文件名的地方,将其替换为SettingsSheet.DataFilePath
。
下次需要更改文件名时,无需修改任何代码-仅需修改此DataFilePath
工作表上名为SettingsSheet
的单元格的内容。