【问题标题】:VBA Excel spellchecking for protected workbook受保护工作簿的 VBA Excel 拼写检查
【发布时间】:2020-02-26 11:27:47
【问题描述】:

我想为我的 Excel 工作簿运行自动拼写检查。

之前我使用了这个查询中解释的方法:

Spell check an Excel sheet in VBA

一切似乎都很好,虽然最后我得到了一个错误:

运行时错误“1004”: Range 类的 CheckSpelling 方法失败

但是,我的拼写检查似乎已经完成,因为我不再有相同的错误。不幸的是,这很尴尬,因为调试器显示错误,我无法在我的工作簿上运行另一个 VBA 代码。

我在这里找到了与受保护工作表的拼写检查相关的代码:

https://www.computergaga.com/blog/spell-check-a-protected-excel-worksheet/

最后我准备了自己的代码,包括它们两个:

 Sub Spellcheck3()
 For Each sh In Worksheets
 Sheets(sh.Name).Cells.Unprotect "excel"
 ActiveSheet.CheckSpelling
 Sheets(sh.Name).Cells.Protect "excel"
 Next
 End Sub

不幸的是,我收到了错误: 对象不支持此属性或方法。

调试线比较粗:

   Sheets(sh.Name).Cells.Unprotect "excel"

也许我应该根据以下查询在每个工作表上定位一组单元格: Excel - VBscript for Spellcheck

我想对最后的注释进行正确的拼写检查,以确保一切都已正确完成。我的工作簿中有一些单元格受到保护,这就是调试器出现的原因。

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    请注意,ActiveSheet 不是您取消保护 Sheets(sh.Name)Cells 的工作表,因为没有方法 .Unprotect 这就是您收到错误的原因

    对象不支持此属性或方法。

    应该是

    Sub Spellcheck3()
        For Each sh In Worksheets
            sh.Unprotect "excel"
            sh.CheckSpelling
            sh.Protect "excel"
        Next sh
    End Sub
    

    不惜一切代价避免使用ActiveSheet(另请参阅How to avoid using Select in Excel VBA)。

    还要注意Sheets(sh.Name) 有点矫枉过正。您尝试获取工作表sh 的名称sh.Name,然后获取具有该名称的工作表Sheets(sh.Name),但您已经在sh 中获得了该工作表。

    【讨论】:

    • 您好,谢谢,这会很糟糕,但现在我收到错误“您提供的密码不正确”。我的密码是“秘密”。我根据每张纸的密码设置(不包括第一张)将 sh.Unprotect "Secret" 放入我的代码中。 Const pw As String = "Secret" 那么我怎样才能排除不受保护的工作表呢?
    • 我现在知道了。它有效,尽管现在我必须弄清楚如何像以前一样保护我的床单从第 1 行到第 10 行。谢谢。
    • @MariuszKrukar 细胞有一个Locked 属性,看看Range.Locked property。此属性设置为True 的范围将在sh.Protect 之后受到保护,但具有Locked = False 的单元格将不受sh.Protect 的保护。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-28
    相关资源
    最近更新 更多