我正在Ribbon *.xlam(file 1)中运行一个查找函数,该函数打开一个包含所有项目宏的远程 *.xlsm文件(file 2),然后在远程数据库(file 3)上运行查找代码。
File 2创建了一个变量“Confirm”字符串,当显示为Msgbox时效果很好-但msgbox是模态的,会停止代码。这意味着当file 2保持打开时,其他用户将无法对file 3进行写访问。
为了解决这个问题,我在file 1上创建了一个Userform来模仿file 2中的msgbox。一切正常,file 2和3按预期打开和关闭,但file 2的变量“Confirm”没有传递到file 1的Userform标签。
压缩代码如下。任何帮助是非常感谢!
File 1 *.xlam代码:
Public Confirm As String
个字符
File 2只是简单地创建字符串,我可以证明它与msgbox一起工作。这只是该代码的一部分:
Public Confirm As String
For i = 3 To LastrowDBase
If DBase.Cells(i, 2) = SUBPN And DBase.Cells(i, 5) = "SomeText" Then
Confirm = Confirm & " - " & DBase.Cells(i, 3) & " - Flag: " & DBase.Cells(i, 7) & " - " & DBase.Cells(i, 6) & vbCrLf
End If
Next i
MsgBox Confirm
的字符串
然后回到File 1,Userform代码:
Option Explicit
Private Sub UserForm_Initialize()
Label1.Caption = Confirm
End Sub
Private Sub CommandButton01_Click()
Unload ViewSub_Details
End Sub
型
3条答案
按热度按时间41ik7eoe1#
你不能直接从不同的工作簿中读取一个变量,而不引用相应的工作簿,并且工作簿中没有相同的变量。但是你可以不引用工作簿,即使讨论中的变量被声明为
Private
,调用一个Public
函数返回相应的变量:1.在需要读取变量的工作簿的一个标准模块中,复制下一段代码:
字符串
然后运行
GiveMyVarValue
,为相应的变量给予一个值(当然,您可以使用现有的过程/变量,但要注意将其作为GetMyvar
函数的返回值。1.使用活动工作簿中的下一个代码,从其他工作簿中读取变量:
型
请在测试上述建议的解决方案后发送一些反馈,我在需要时使用了很多次。
cyej8jka2#
您不能访问项目外部的变量(项目基本上是您的Excel文件)。您的
confirm
变量是不同的变量,file1不能访问file2的confirm
。关键字public
意味着该变量在file2的整个项目中是全局的(因此file2的所有模块都可以访问它),但对任何其他运行的JavaScript代码都不是公共的。但是,您可以做的是提供
confirm
字符串作为函数的结果:字符串
你可以使用
Application.Run
调用这个函数:型
aamkag613#
这些引用来自Excel帮助文件
使用Public语句声明的Public变量对所有应用程序中所有模块中的所有过程可见,除非Option Private Module生效。在这种情况下,变量仅在其所在的项目中是公共的。
referenced project从正在处理的当前项目中直接创建链接的项目。由当前项目的直接引用项目之一引用的项目称为间接引用项目。当前项目无法访问其公共变量,除非通过其项目名称进行限定。项目之间的直接和间接引用的任何组合都是有效的,只要它们不导致一个完整的循环。
referencing project当前项目。创建项目链接的方式取决于宿主应用程序。例如,要直接引用Microsoft Excel中的项目,请从工具菜单的引用对话框中选择项目。直接引用项目中的公共变量对直接引用项目可见,但直接引用项目中的公共变量对直接引用的项目不可见。
定义公共模块级作用域如果将模块级变量声明为public,则该变量可用于项目中的所有过程。
strMsg
可以由项目中任何模块中的任何过程使用。
包括在模块的声明部分中。
公共strMsg作为字符串
默认情况下,除事件过程外,所有过程都是公共的。当Visual Basic创建事件过程时,Private关键字将自动插入到过程声明之前。对于所有其他过程,如果不希望过程是公共的,则必须使用Private关键字显式声明该过程。
您可以从引用项目中使用标准模块或类模块中定义的公共过程、变量和常量。但是,您必须首先设置对定义它们的项目的引用。
在标准或类模块(如表单模块或报表模块)之外的其他模块中定义的公共过程、变量和常量对于引用项目来说是不可用的,因为这些模块对于它们所在的项目来说是私有的。