我的情况是我有一些合并的单元格,它们必须保留为合并的单元格。我知道合并单元格会导致 VBA 出现问题,但在这种情况下这是不可避免的。
我正在编写一些代码来保护工作簿中的所有工作表,但保持具有特定填充的单元格解锁。合并的单元格在尝试解锁单元格时当然会导致问题。
因此,我的代码检查单元格是否具有正确的填充,然后检查单元格是否被合并。如果合并,则 MergeArea 地址存储在字符串数组中,合并后的单元格未合并然后解锁。
在检查了这些填充单元格的相关区域后,我设置了一个循环来重新合并存储在数组中的所有单元格区域。
如果我为工作簿中的任何一张工作表运行它,这一切都很好(即:在 ActiveWorkbook.Worksheets 中没有 For Each WS)。但是,当我添加 For Each WS 循环时,它开始错误地合并工作表上的单元格。
代码如下:
Sub ProtectSheets()
Application.ScreenUpdating = False
Dim LRow As Integer, count As Integer
Dim reMerge() As String
Dim WS As Worksheet
For Each WS In ActiveWorkbook.Worksheets
count = 0
Erase reMerge
With WS
LRow = .Range("h" & .Rows.count).End(xlUp).Row
For Each c In Range("A1:AF" & LRow)
If c.Interior.Color = RGB(253, 233, 217) Then '~~ Check for cell fill
If c.MergeCells = True Then '~~ Check to see if merged
ReDim Preserve reMerge(count)
reMerge(count) = c.MergeArea.Address '~~Store mergearea address in array
count = count + 1
c.MergeCells = False
End If
c.Locked = False
End If
Next c
For i = LBound(reMerge) To UBound(reMerge) '~~ Remerge all cells that were originally merged
.Range(reMerge(i)).Merge
Next i
End With
WS.Protect Password:="xxxx", userinterfaceonly:=True
Next WS
Application.ScreenUpdating = True
End Sub