Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 在单独的工作簿模块中未识别公共变量?_Excel_Vba - Fatal编程技术网

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上的当前用户的