我如何使用不同的工作簿中的一个子

在PERSONAL.XLSB工作簿中,我有这样的代码:

Public Sub Password(ByVal Target As Range) a = "" For n = 1 To Len(Target) a = a & "*" Next n Target.NumberFormat = """" & a & """;""" & a & """;""" & a & """;""" & a & """" End Sub 

在我的新工作簿中,我有这样的代码:

 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = Info.Range("AA9").Address Then Workbooks("PERSONAL.XLSB").Password Target End If End Sub 

我不断收到一个错误,说: Compile error: Invalid use of property

以下是从个人工作簿中运行macros的方法:

 Application.Run "PERSONAL.XLSB!Password", Target 

[编辑]值得注意的是,而不是一个循环来build立*string,你可以这样做:

 Public Sub Password(ByVal Target As Range) Dim sMask as String sMask = Mid(WorksheetFunction.Rept(";""" & String(Len(Target.Value), "*") & """", 4), 2) Target.NumberFormat = sMask End Sub 

tigeravatar显示的Application.Run方法工作良好(即在运行时解决所有问题),并且是快速调用某个过程的最简单方法。

如果您访问大量程序或使用多个函数或子程序,则可以添加对Personal.xlsb项目名称的引用(通过“工具”>“引用”)。 您应该将默认的“VBAProject”中的Personal.xlsb的VBA项目代码名称重命名为“PersonalLibrary”之类的独特内容。 然后,您将引用添加到PersonalLibrary。

然后,您可以完全访问标准模块,任何工作表和类中的所有公共函数和子集,尽早绑定到类并访问字段,属性和事件。

这另外带有智能感知和标准编译时间检查的好处,如检查方法签名(也就是说,函数或子函数的参数对应于应该是什么)和静态types。

(注意,对于类,您将需要使用Personal.xlsb的标准模块中的函数来返回任何类的实例,因为它们不是由外部项目“创造”的)

在你的情况下,你可以访问它,一旦添加引用,就像PersonalLibrary.Password(target)