Excel 如何使用不同工作手册中的sub

Excel 如何使用不同工作手册中的sub,excel,vba,error-handling,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

在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
在我的新工作簿中,我有以下代码:

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

我一直收到一个错误,上面写着,
编译错误:属性使用无效

以下是如何从个人工作簿运行宏:

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

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

如果您想访问许多过程,或者使用不止一个函数或子函数,可以添加对Personal.xlsb项目名称的引用(通过工具>引用)。您应该将Personal.xlsb的VBA项目代码名称从默认的“VBAProject”重命名为“PersonalLibrary”或其他唯一的名称。然后将引用添加到PersonalLibrary

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

此外,还有intellisense和标准编译时检查的好处,如检查方法签名(也就是说,函数或子函数的参数对应于它应该是什么)和静态类型

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

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