我想遍历工作表中的行,并将一列(E 列)的名称框分配给另一列(B 列)中相应行的值。
我希望以这种方式完成它,因为对于将对此脚本进行长期维护的附录,原理将保持不变。例如,如果我要手动执行此操作,我将激活单元格“E2”并单击名称框,然后输入“Coil_Width”,这是单元格“B2”的值。这会将名称正确地添加到名称管理器中,我可以通过在该单元格的公式栏中键入内容来动态更改该值。我尝试通过 eCell.Name = (etc) 属性进行分配,但似乎它对单元格的作用与对范围属性的作用不同,因为我收到应用程序定义的错误 (1003)。
此外,使用标准
ActiveWorkbook.Names.Add Name:=bCell.Value, RefersTo:= eCell.Address()
只需将名称添加到名称管理器并将 RefersTo 设置为“$E$2”或任何单元格(我认为这是正确的),但值也会设置为“E2”(即使在该单元格的公式栏中手动输入值也无法更改。此外,该单元格的名称框仍显示为“E2”。
以下是一些示例代码:
For Each bCell In thisWkSht.Range("B:B").Cells
'For Each bCell In thisWkSht.Range("B:B:) - this is the changed line
If bCell.Value = "" Then
'Do Nothing
ElseIf bCell.Value = "Variables" Then
'Do Nothing
'This allows me to skip the first row without much hassle
Else
Set eCell = bCell.Offset(0, 3).Cells
'Set eCell = bCell.Offset(0, 3) - this is the other changed line
eCell.Name = bCell.Value ' This line now correctly assigns the value from my
' B row and column to the name of my E row cell
End If
Next
我的结果表明我可以正确访问 bcell.Value 属性,但在 bCell.Name.Name 期间会中断。在我看来,我应该能够执行类似 eCell.Name = bCell.Value 或类似操作,但除了应用程序定义的错误之外,我还没有收到任何其他信息。
我目前坚持使用单元格方法,因为我不确定如何在 For Each 语句中处理不断变化的范围选择;即我可以理解如何将我的 bCell 定位到整个范围(“B:B”),但我不知道如何设置我的 eCell 以便它引用的范围实际上是 bCell 偏移三列的范围。
我是否忽略了有关这些属性的一些明显的东西?
答案1
您只需更改此行:
Set eCell = bCell.Offset(0, 3).Cells
对此:
Set eCell = bCell.Offset(0, 3)