Я пробовал и не смог найти синтаксис для функции, которая будет циклически перебирать каждую ячейку на листе и сопоставлять ее адрес с Regex, и разблокировать ячейку на основе положительного совпадения, но кажется, что адреса IXLCell не могут быть переданы в строки? Это функция Я работаю с:Как перебирать каждую ячейку в диапазоне рабочих листов и разблокировать их на основе соответствия Regex
Private Function NeedsToBeUnlocked(cell As IXLCell) As Boolean
Dim returnValue = False
Dim address As String = CType(cell.Address, String)
Dim reg As Regex = New Regex("^B5|[CDEFGH][56]|H9|[CDEFGH]12|[CDEFGH]4[5-9]|[CDEFGH]5[012]|[GH]6[6-9]|[GH]78[0-7]|[GH]88|[GH]9[0,6-9]|H1[47]|H2[1278]$|H3[01347]|[BCDFGH]16[246]|[CDEFGH]15[789]|[CDEFGH]160|E16[24]|[GH]10[0-9]|[GH]11[012]|G129|[GH]13[01]|H11[789]|H12[012,6-9]|H13[289]|H14[0-5,78]$")
Dim match As Match = reg.Match(address)
If match.Success Then
returnValue = True
End If
Return returnValue
End Function
и это для каждого цикла. Очевидно, что синтаксис неверен, но вы получаете мой дрейф.
For Each c As IXLCell In xlWS.Range("A1", "I177").Cells
If NeedsToBeUnlocked(c.Address) Then
c.Style.Protection.SetLocked(False)
End If
Next
Это моя наивная попытка не просто использовать ряд прямых утверждений, подобных этому. Должен быть лучший способ?
xlWS.Range("B5", "H5").Style.Protection.SetLocked(False)
xlWS.Range("C6", "H6").Style.Protection.SetLocked(False)
xlWS.Cell("H9").Style.Protection.SetLocked(False)