在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
答案 0 :(得分:5)
以下是您从个人工作簿中运行宏的方法:
Application.Run "PERSONAL.XLSB!Password", Target
[编辑] 值得注意的是,您可以这样做而不是构建*字符串的循环:
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
答案 1 :(得分:4)
tigeravatar显示的Application.Run方法运行良好(即一切都在运行时解析),是快速调用某些过程的最简单方法。
如果要访问许多过程,或使用多个函数或子函数,则可以添加对Personal.xlsb项目名称的引用(通过工具>引用)。您应该将Personal.xlsb的VBA项目代码名称从默认的“VBAProject”重命名为“PersonalLibrary”之类的独特内容。然后添加对PersonalLibrary的引用。
然后,您可以完全访问标准模块,任何工作表和类中的所有公共函数和子函数,早期绑定到类以及访问字段,属性和事件。
此外还具有智能感知和标准编译时检查的好处,例如检查方法签名(也就是说,函数或子的参数对应于它应该是什么)和静态类型。
(注意,对于Classes,您需要使用Personal.xlsb的标准模块中的函数来返回任何类的实例,因为它们不能由外部项目“创建”)
在您的情况下,您可以在添加引用后访问它,就像PersonalLibrary.Password(target)