调用 public 过程时出现运行时错误 438

Runtime error 438 when calling a public procedure

当执行程序protectAllWorksheets时,出现运行时错误438,我不明白为什么。

Public Sub protectAllWorksheets()
    Dim ws As Worksheet
    
    For Each ws In ThisWorkbook.Worksheets
        protectWorksheet (ws)            <------------- Runtime Error 438
    Next ws
End Sub

Public Sub protectWorksheet(ws As Worksheet)
    ws.Protect Password:=strPassword, UserInterFaceOnly:=True
End Sub

Rubberduck 的代码检查也在这一行引发了 2 个错误:

如果我用protectWorksheet中的代码替换错误行(所以直接执行而不是调用子过程),代码执行顺利。对于参数中需要 'Worksheet' 或 'Workbook' 的每个子过程调用都会发生同样的事情。

在局部变量 Window 中,当我打开 ws 属性时,它会打开 Outlook 并尝试创建一个配置文件(因为我没有) .然而 ws 的名称和其他属性是正确的,因此 ws 实际存在并指向 ThisWorkbook 的第一个 sheet。真是奇怪的行为。

我在互联网上搜索,查看了 Microsoft 文档,但我无法弄清楚是什么原因导致了这里的错误。

复制自@BigBen 评论:

去掉括号:protectWorksheet ws