如何遍历工作表范围内的每个单元格并根据正则表达式匹配解锁它们

How to iterate through each cell in a worksheet range and unlock them based on a Regex match

我已经尝试并未能找到一个函数的语法来循环遍历工作表中的每个单元格并将其地址与正则表达式匹配,并根据肯定匹配解锁单元格,但似乎 IXLCell 地址不能被转换为字符串? 这是我一直在使用的功能:

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 循环。 显然语法不正确,但你明白我的意思。

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)

我不确定我是否理解正确你的问题,但循环遍历我经常使用的单元格的方法是:

For ic 1 to 5         ' i column - in range from A to E
    For ir 1 to 20    ' i row
        wSheet.Cells(ir, ic).Value = "Col=" & ic & "  row=" & ir
    Next ir
Nect ic

您的 NeedsToBeUnlocked 函数是使用 IXLCell 类型的参数声明的,但您使用 IXLAddress 类型的参数调用它。将您的呼叫更改为

If NeedsToBeUnlocked(c) Then

并在函数更改中将单元格地址作为字符串获取

Dim address As String = CType(cell.Address, String)

Dim address As String = cell.Address.ToString()

另一种不使用 RegEx 的方法是定义一个范围数组并循环这些范围:

Dim ranges As String() = { "B5:H5", "C6:H6", "H9", ... }

For Each range as String in ranges
    xlWS.Range(range).Style.Protection.SetLocked(false)
Next