我试图找到函数的语法,使其循环遍历工作表中的每个单元格,并将其地址与Regex匹配,并根据正匹配解锁单元格,但似乎无法将IXLCell地址转换为String?这就是我一直在做的工作:
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)发布于 2015-12-07 11:47:49
另一种不使用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发布于 2015-12-07 10:14:12
我不确定我是否正确地理解了你的问题,但我经常使用的一种方法是:
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发布于 2015-12-07 11:18:58
您的NeedsToBeUnlocked函数是用IXLCell类型的参数声明的,但是使用IXLAddress类型的参数来调用它。将您的电话更改为
If NeedsToBeUnlocked(c) Then并将单元格的地址作为函数更改中的字符串获取。
Dim address As String = CType(cell.Address, String)至
Dim address As String = cell.Address.ToString()https://stackoverflow.com/questions/34125305
复制相似问题