如何使用其他工作簿中的sub

时间:2013-08-28 17:59:39

标签: excel vba error-handling

在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

2 个答案:

答案 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)

一样