跨多个模块的文件名

时间:2019-01-28 20:58:22

标签: excel vba

我有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”)。值

我更新了所有模块以使用此功能,现在我只需要更新设置表,它就会填充其余模块。

2 个答案:

答案 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会产生:

img1

答案 1 :(得分:2)

仅提供@dwirony's excellent answer的替代方法-从语义上说,文件名不是ConstConst 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的单元格的内容。