【问题标题】:Excel macro loop thru column to assign cell name boxExcel 宏循环通过列分配单元格名称框
【发布时间】:2012-11-08 12:32:25
【问题描述】:

我想用相邻单元格的值填充单元格的名称框。这个宏有效。

Sub NameBox()
   ' populates name box w/ value from adjacent cell
   ActiveCell.Name = ActiveCell.Offset(0, -1).Value
   ' steps down to next cell
   ActiveCell.Offset(1, 0).Select
End Sub

我分配一个击键并遍历列中的每个单元格,这很容易,但我认为可以通过循环来改进它。

我试过了。

Sub NameBoxLoop()
   Dim cel As Range
   For Each cel In Range("C:C").Cells
      If cel.Value <> "" Then
         cel.Name = cel.Offset(0, -1).Value
      End If
   Next cel
End Sub

但我得到以下调试错误

cel.Name = 应用程序定义或对象定义的错误

循环逻辑看起来是正确的,如果我用 cel.Value 替换变量 cel.Name 循环将完成。

搜索没有提供 cel.Name 错误的答案。感谢您提供解决此错误的任何帮助。

【问题讨论】:

    标签: excel loops vba


    【解决方案1】:

    您的公式有效。但也许你的环境不是最佳的,因为你没有纠错 - 并且名称有限制。

    所以我猜你在 B 列中没有值,或者 B 列中的值已经被用作其他单元格的名称。

    在这两种情况下,您的循环都会中断。

    无论如何都要尝试循环,但请考虑对您的代码进行错误证明:

    Sub NameBoxLoop()
       On Error Resume Next
       Dim cel As Range
       For Each cel In Range("C:C").Cells
          If cel.Value <> "" Then
             cel.Name = cel.Offset(0, -1).Value
          End If
       Next cel
    end sub
    

    编辑:

    作为建议,您可能需要考虑使用 Names 列表。

    这是一个来自 excel-help 的示例:

    ActiveWorkbook.Names.Add Name:="test", RefersTo:="=sheet1!$a$1:$c$20"
    

    还有一些对象成员:

    • 添加
    • 项目
    • 计数

    【讨论】:

    • 你打败了我 - 我敢打赌,挑战是你的循环试图为单元格分配相同/空白的名称
    • 做到了。谢谢您的帮助。我仍然是这方面的黑客,看起来我需要更好地处理错误纠正的最佳实践。我还将花一些时间试图找出确切的错误是什么。虽然它可能只是如第二个回复所建议的那样,为单元格分配空白名称。
    • @PeterPerreault 使用调试器、BreakPoints 和 Debug.Print 或变量查看器来了解正在发生的事情;)
    猜你喜欢
    • 2011-11-22
    • 1970-01-01
    • 1970-01-01
    • 2012-08-29
    • 1970-01-01
    • 2014-02-05
    • 2020-02-20
    • 1970-01-01
    • 2014-08-01
    相关资源
    最近更新 更多