【问题标题】:Excel Macro to name ranges according to the name of the worksheet Tab nameExcel 宏根据工作表名称命名范围选项卡名称
【发布时间】:2016-06-29 16:08:31
【问题描述】:

我有以下代码,我试图根据工作表选项卡名称来命名整个 A 和 B 列范围。我希望将每个工作表中的每个 A:B 单元格区域命名为 RoomCode_ + excel 工作表选项卡的名称。

例如,如果我有 3 张名为 XYZ、ABC 和 DEF 的工作表,那么这 3 张工作表的单元格范围名称应分别为:

RoomCode_XYZ
RoomCode_ABC
RoomCode_DEF

我通常会通过突出显示单元格范围并键入我想要的范围名称来手动执行此操作,但是我有超过 150 个选项卡,并且希望能够通过此过程自动完成所有操作。

Sub nameRanges()

Set wbook = ActiveWorkbook

For Each sht In wbook.Worksheets
    sht.Activate

RangeName = "RoomCode_" + ActiveSheet.Name
  CellName = "A:B"

  Set cell = ActiveWorksheets.Range(CellName)
  ActiveWorksheets.Names.Add Name:=RangeName, RefersTo:=cell

  Next sht

End Sub

【问题讨论】:

  • 我相信工作表和范围的命名规则是不同的,例如,如果工作表/选项卡的名称中有空格,您就会遇到问题。

标签: vba excel


【解决方案1】:

只需进行一些重构即可获得所需的内容。最重要的是直接处理对象并消除Active... 的东西。

另外ActiveWorksheets 在任何方面都不是正确的语法。

Sub nameRanges()

    Dim wbook As Workbook
    Set wbook = ThisWorkbook

    Dim sht As Worksheet

    For Each sht In wbook.Worksheets

        Dim RangeName As String, CellName As String

        RangeName = "RoomCode_" + sht.Name
        CellName = "A:B"

        Dim cell As Range

        Set cell = sht.Range(CellName)

        sht.Names.Add Name:=RangeName, RefersTo:=cell


    Next sht

End Sub

【讨论】:

    【解决方案2】:

    这是另一种方式:

    Option Explicit
    
    Sub nameRanges()
    
    Dim sht As Worksheet
    Dim RangeName As String
    Dim cell As String
    
    For Each sht In ActiveWorkbook.Worksheets
        RangeName = "RoomCode_" + sht.Name
        cell = "=" & sht.Name & "!" & "A:B"
        Names.Add Name:=RangeName, RefersTo:=cell
    Next sht
    
    End Sub
    

    【讨论】:

      【解决方案3】:

      我认为您希望将名称添加到工作簿名称集合中。现在的情况下,您仍然必须先引用单个工作表,然后才能访问名称。

      WorkSheets("RoomCode").Range("RoomCode_XYZ")

      通过将名称添加到工作簿中,您将能够访问任何 ActiveSheet。

      范围("RoomCode_XYZ")

      Sub nameRanges()
      
          Dim wbook As Workbook
          Set wbook = ThisWorkbook
      
          Dim sht As Worksheet
      
          For Each sht In wbook.Worksheets
      
              Dim RangeName As String, CellName As String
      
              RangeName = "RoomCode_" + sht.Name
              CellName = "A:B"
      
              Dim cell As Range
      
              Set cell = sht.Range(CellName)
      
              ThisWorkBook.Names.Add Name:=RangeName, RefersTo:=cell
      
      
          Next sht
      
      End Sub
      

      【讨论】:

        猜你喜欢
        • 2011-02-08
        • 2015-08-06
        • 1970-01-01
        • 2014-09-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-08
        相关资源
        最近更新 更多