调用 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
当执行程序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