4

在 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

4

2 回答 2

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
于 2013-08-28T18:15:02.963 回答
4

tigeravatar 显示的 Application.Run 方法可以很好地动态运行(即一切都在运行时解决),并且是快速调用某些过程的最简单方法。

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

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

这还带来了智能感知和标准编译时检查的好处,例如检查方法签名(也就是说,函数或子的参数对应于它应该是什么)和静态类型。

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

在您的情况下,您可以在添加参考后访问它,就像PersonalLibrary.Password(target)

于 2013-08-28T19:13:12.730 回答