使用 VBA 在 Excel 中命名单元格名称框

使用 VBA 在 Excel 中命名单元格名称框

我想遍历工作表中的行,并将一列(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)

相关内容