使用vba解锁受保护的Excel工作表中的特定区域

时间:2017-08-07 07:19:16

标签: excel vba excel-vba

我必须在Excel工作表中解锁特定范围(D6:BC116)。它应该能够让其他人编辑这个特定区域。所以它应该为他们解锁。 起初我手动保护整张纸,没有任何代码。之后我想取消保护特定区域进行编辑。但总有一些问题。我有这两个代码。第一个代码具有隐藏属性,它只隐藏空单元格。其他代码我试图在保护整个工作表后取消保护我要编辑的特定区域。 由于隐藏属性,我不确定问题是否在第一个代码中?我不确定他们是否处于关系中?

package au.com.scraper;
import java.net.Authenticator;
import java.net.PasswordAuthentication;
public class ProxyAuthenticator extends Authenticator
{
    public ProxyAuthenticator(String user, String password)
    {
        this.user = user;
        this.password = password;
    }
    protected PasswordAuthentication getPasswordAuthentication()
    {
        return new PasswordAuthentication(user, password.toCharArray());
    }
    private String user;
    private String password;
}

当我执行此操作时,我总是得到"索引超出范围"

谢谢!

1 个答案:

答案 0 :(得分:2)

我认为你需要在解锁之前取消保护。 像这样:

 With Worksheets("Sheet1")
 .Unprotect "MyLongAndSecurePassword"
 .Range("D6:BC116").Locked = False
 .Protect
 End with

关于代码的第一部分 - 确保使用未命名为cell的变量,因为VBEditor使用了cell。将变量命名为rngCellmyCell或除cell以外的任何其他内容。并声明如下:Dim rngCell as Range

最后一点 - 锁定您的工作表并尝试隐藏和取消隐藏行。可能吗?如果没有,您就知道错误的原因。

修改

要检查工作表是否受保护,请在 Worksheet_Change 中尝试此操作:

Private Sub Worksheet_Change(ByVal Target As Range)

    If Worksheets("Sheet1").ProtectContents Then Exit Sub

    For Each cell In Range("B6:B112")
        If cell.Value <> "" Then
            cell.EntireRow.Hidden = False
        Else
            cell.EntireRow.Hidden = True
        End If
    Next cell

End Sub