在尝试设置具有锁定和未锁定单元格的范围的值时,Excel 2016不会在任何单元格中写入数据

时间:2015-10-15 17:29:50

标签: excel excel-vba excel-2016 office-2016 vba

我有一个带有一个空白工作表的Excel工作簿,以便工作表受到保护,并且保护少数单元格,例如A1,A3和A4设置为解锁而单元格A2的设置为已锁定。 我想只在未锁定的单元格中写入数据而不更改锁定单元格中的任何内容。我已经写了这个宏。

Sub WriteValue()
    On Error GoTo ErrHandler
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets(1)

    Dim oCell As Range
    Set oCell = ws.Range("A1")

    Dim ValueArray() As Variant
    ReDim ValueArray(3, 0)

    ValueArray(0, 0) = "A1"
    ValueArray(1, 0) = "A2"
    ValueArray(2, 0) = "A3"
    ValueArray(3, 0) = "A4"

    oCell.Resize(UBound(ValueArray) + 1, 1).Value2 = ValueArray
    MsgBox "Success"
    Exit Sub
ErrHandler:
     Debug.Print Err.Description
End Sub

当在excel 2013中执行宏时,它会抛出"应用程序定义的错误或对象定义的错误"由于单元格A2被锁定且纸张受到保护,但它仍然将数据写入未锁定的单元格A1,A3和A4中。 当我在Excel 2016中运行相同的宏时,它会抛出"应用程序定义的错误或对象定义的错误"但不要在未锁定的单元格中写入任何数据。

为了在Excel 2016中实现上述Excel 2013行为,我可以循环遍历每个单元格以检查单元格是否在向其写入数据之前被锁定,但如果单元格数量很大,那将非常耗时。 在excel 2016中还有其他方法可以实现这一目标吗?

0 个答案:

没有答案