Excel 在单独的工作簿模块中未识别公共变量?
我试图声明一个公共变量Excel 在单独的工作簿模块中未识别公共变量?,excel,vba,Excel,Vba,我试图声明一个公共变量strFileDate,我想存储一个输入框值,以便以后打开另一个工作簿(单独的wb)并在该新wb中运行宏时引用。我声明了一个公共变量,如下所示: Public strFileDate as string Option Explicit Sub Update_Data() Dim strFileDate As String: strFileDate = InputBox("Enter Folder Date (mm.dd.yy)", Default:=Format("m
strFileDate
,我想存储一个输入框值,以便以后打开另一个工作簿(单独的wb)并在该新wb中运行宏时引用。我声明了一个公共变量,如下所示:
Public strFileDate as string
Option Explicit
Sub Update_Data()
Dim strFileDate As String: strFileDate = InputBox("Enter Folder Date (mm.dd.yy)", Default:=Format("mm.dd.yy"))
...
end sub
每当我打开包含
open\u Separate\u File
的工作簿时,它会说strFileDate
没有定义,我认为这是由于两个模块顶部的选项Explicit
标签造成的。有没有一种方法可以避免忽略选项Explicit
?通常,变量的值保留时间不能超过宏的运行时间。所有类型的Excel操作都可以清除保存的变量,例如保存工作簿,如果不显式使用get/set宏(由于变量值可能被清除,因此可能无法工作),您将永远无法跨工作簿访问这些变量
保存此类数据的最佳方法是使用SaveSetting
和GetSetting
函数
在第一个工作簿中,您可以保存用户输入的值saved,如下所示:
Dim strFileDate As String
strFileDate = InputBox("Enter Folder Date (mm.dd.yy)", Default:=Format("mm.dd.yy"))
SaveSetting "ExampleAppName", "ExampleSectionName", "FileDate", strFileDate
Dim strFileDate As String
strFileDate = GetSetting("ExampleAppName", "ExampleSectionName", "FileDate")
在第二个工作簿中,您将访问该值,如下所示:
Dim strFileDate As String
strFileDate = InputBox("Enter Folder Date (mm.dd.yy)", Default:=Format("mm.dd.yy"))
SaveSetting "ExampleAppName", "ExampleSectionName", "FileDate", strFileDate
Dim strFileDate As String
strFileDate = GetSetting("ExampleAppName", "ExampleSectionName", "FileDate")
如果要在运行完第二个工作簿中的任何内容后进行清理,请使用以下命令将其删除:
DeleteSetting "ExampleAppName", "ExampleSectionName", "FileDate"
通常,不能依赖变量在宏运行时保持其值的时间。所有类型的Excel操作都可以清除保存的变量,例如保存工作簿,如果不显式使用get/set宏(由于变量值可能被清除,因此可能无法工作),您将永远无法跨工作簿访问这些变量 保存此类数据的最佳方法是使用
SaveSetting
和GetSetting
函数
在第一个工作簿中,您可以保存用户输入的值saved,如下所示:
Dim strFileDate As String
strFileDate = InputBox("Enter Folder Date (mm.dd.yy)", Default:=Format("mm.dd.yy"))
SaveSetting "ExampleAppName", "ExampleSectionName", "FileDate", strFileDate
Dim strFileDate As String
strFileDate = GetSetting("ExampleAppName", "ExampleSectionName", "FileDate")
在第二个工作簿中,您将访问该值,如下所示:
Dim strFileDate As String
strFileDate = InputBox("Enter Folder Date (mm.dd.yy)", Default:=Format("mm.dd.yy"))
SaveSetting "ExampleAppName", "ExampleSectionName", "FileDate", strFileDate
Dim strFileDate As String
strFileDate = GetSetting("ExampleAppName", "ExampleSectionName", "FileDate")
如果要在运行完第二个工作簿中的任何内容后进行清理,请使用以下命令将其删除:
DeleteSetting "ExampleAppName", "ExampleSectionName", "FileDate"
我会读一读@BigBen这是说非私有变量声明自动在公共范围内,那么是不是
option explicit
导致了这个错误?在那篇文章中,我没有看到“如果您将模块级变量声明为public,那么它对项目中的所有过程都可用”的声明。重点是“在项目中”。@BigBen啊,明白了,错过了这一部分。既然这个变量试图在一个单独的工作簿模块中声明,我需要再次声明它吗?我试图避免这种情况的唯一原因是,我不希望用户必须在输入框中键入日期,twice@bigben我是否可以像全局strFileDate那样声明为string
@BigBen这是说非私有变量声明自动在公共范围内,那么是不是option explicit
导致了这个错误?在那篇文章中,我没有看到“如果您将模块级变量声明为public,那么它对项目中的所有过程都可用”的声明。重点是“在项目中”。@BigBen啊,明白了,错过了这一部分。既然这个变量试图在一个单独的工作簿模块中声明,我需要再次声明它吗?我试图避免这种情况的唯一原因是,我不希望用户必须在输入框中键入日期,twice@bigben我会像Global strFileDate那样声明为string
吗?当你说ExampleAppName
、ExampleSectionName
和FileDate
时,你的意思是workbook\u name
,模块名
,我仍然对文件日期
感到困惑?这是个好方法,但是,a)如果用户没有权限写入注册表,b)两个人试图同时访问和保存怎么办?@NidenK这些只是示例,你可以使用任何你想要的字符串(通常,它会描述你的应用程序的名称)。设置/获取数据时,它必须是完全相同的字符串集。FileDate
也可以是您想要的任何字符串,它只是对您存储的数据的描述。@KostasK。如果您在Windows上运行此任务,您只需拥有读取/写入HKEY\U当前用户的权限即可。
。我从未见过任何组权限estrictive不允许这样做,因为许多Windows应用程序都依赖它。就两个人同时这么做而言,这是特定于给定计算机上的当前用户的;据我所知,Windows从来不会让用户登录同一台计算机两次。@JoshEller我添加了这些内容,我仍然得到一个变量未定义
当其他工作簿打开且模块即将运行时出错;这让我回到了我的原始问题:当你说ExampleAppName
、ExampleSectionName
和FileDate
时,你是说工作簿名称
,模块名称
,我仍然对FileDate
感到困惑吗ood方法但是,a)如果用户没有权限写入注册表,b)两个人试图同时访问和保存怎么办?@NidenK这些只是示例,你可以使用任何你想要的字符串(通常,它会描述你的应用程序的名称)。设置/获取数据的字符串集必须完全相同FileDate
也可以是您想要的任何字符串,它只是对您正在存储的数据的描述。如果您在Windows上运行此功能,则只需具有读/写HKEY\U CURRENT\U USER
的权限即可。我从未见过一个组权限限制如此之严格以至于不允许,因为许多Windows应用程序都依赖它。就两个人同时做这件事而言,这是特定于给定ma上的当前用户的