【问题标题】:How to use array of addresses to lock cells in VBA如何使用地址数组锁定 VBA 中的单元格
【发布时间】:2020-04-28 17:03:54
【问题描述】:

我在 Excel 电子表格中有一个单元格列表,我从中定义了一个数组。 我想遍历这个列表并将相应的单元格设置为解锁。但是,我不断收到“错误:需要对象”(翻译自德语)。有人可以帮忙吗?

Sub LockCells()

Dim CellList as Variant
CellList = Array("A2", "A8", "B4")

For Each cell in CellList
    Sheets("MySheet").Range(cell).Locked = False
Next cell

End Sub

(如果我将单元格硬编码为数组元素之一,则循环内的行有效。)

【问题讨论】:

  • 无复制...但最好使用For 循环来迭代数组而不是For Each 循环。
  • 总是使用Option Explicit,见this explanation——所以在使用之前定义Dim cell As Variant

标签: arrays excel vba loops


【解决方案1】:

请尝试下一个代码:

Sub testRangeFromArray()
  Dim CellList As Variant
  CellList = Array("A2", "A8", "B4")
  Sheets("MySheet").Range(Join(CellList, ",")).Locked = False
End Sub

或直接:

Sheets("MySheet").Range("A2, A8, B4").Locked = False

但是,如果您喜欢迭代,请使用(声明迭代变量,如Variant):

Sub testRangeFromArray_()
  Dim CellList As Variant, El As Variant
  CellList = Array("A2", "A8", "B4")
  For Each El In CellList
     Sheets("MySheet").Range(El).Locked = False
  Next
End Sub

【讨论】:

  • 谢谢。使用第一个变体,我现在收到错误消息“无法设置 Range 类的 Locked 属性”,尽管我在代码中使用了 Worksheet("MySheet").Unprotect。
  • @painfulenglish:这与代码工作方式无关……Worksheet("MySheet") 没有意义。它必须是Worksheets("MySheet")。但是,也许你只在这里犯了错误。请尝试:Sheets("MySheet").Range("A2").Locked = False。它没有返回相同的错误吗?目视检查工作表是否未受保护。您的真实工作表名称是“MySheet”吗?
  • 这是一个错字(我没有复制/粘贴代码)。我发现了问题:我想解锁的一个单元格是一个已连接的单元格。使用“B4:D4”而不是“B4”让一切正常!
【解决方案2】:

只需使用CStr()将单元格转换为字符串

Sheets("MySheet").Range(CStr(cell)).Locked = False

【讨论】:

  • 但是如果你在循环中添加Debug.Print Typename(cell),结果已经是String了。
猜你喜欢
  • 2011-03-03
  • 2013-06-11
  • 1970-01-01
  • 2020-12-06
  • 1970-01-01
  • 1970-01-01
  • 2016-04-10
  • 2020-11-30
相关资源
最近更新 更多