发布
社区首页 >问答首页 >如何使用宏命名未来动态创建的工作表上的范围?

如何使用宏命名未来动态创建的工作表上的范围?
EN

Stack Overflow用户
提问于 2015-06-23 04:03:49
回答 2查看 1.2K关注 0票数 1

我想知道是否可以使用宏来命名工作表上还不存在但将来会出现的范围。

在我试图使用的实例中,未来的电子表格是使用一个Worksheet_Change事件动态创建的,其中新表的名称被键入到一个列表中。(如果相关,我可以包括用于此的宏)

我已经研究了几个想法:

我尝试过使用=Indirect,就像这里在StackOverflow上指出的那样。

工作表名称已填充到A2中,所需的单元格位于新页上的B30中:=INDIRECT("'"&$A2&"'!"&B30)),但这不能工作,因为:

由于工作表可以命名为任何内容,因此此解决方案使用绝对引用,而不是相对引用。相对引用是首选的,因为引用的单元格可以在插入/删除的行中向上或向下移动。

我也尝试使用宏来定义一个命名的范围。以下宏在定义工作表名称时工作(在本例中,是在“主”工作表上)。它找到一个单元格值,并将右边的单个单元格范围6命名为"Total"+Sheetname (在本例中为"TotalMaster")。

我感到困惑的部分是如何在宏观上参考未来的报表。这是进一步复杂的事实,可能有任何数量的新床单。我还希望能够动态地将范围命名为"Total"+Sheetname

代码语言:javascript
代码运行次数:0
复制
Sub MakeName()
Dim Sht As String

Sht = ActiveSheet.Name

  Sheets("Master").Range("A1").Select
    Cells.Find(What:="TOTAL MD (RES)", After:=ActiveCell, LookIn:=xlFormulas, _
    LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
    MatchCase:=False).Activate
  ActiveCell.Offset(0, 6).Select
  ActiveWorkbook.Names.Add Name:="Total" & Sht, RefersTo:=Selection

End Sub

总结我的问题:

  1. 如何编辑宏来命名未来页面上的范围?我想这可以合并到一个worksheet_change事件中,这样当一个新的sheetname被添加到sheets列表中时,宏就会在新页面上运行吗?
  2. 如何编辑这些代码部分以引用新创建的工作表,而不是活动工作表? Sht = ActiveSheet.Name & ActiveWorkbook.Names.Add Name:="Total" & Sht
EN

回答 2

Stack Overflow用户

发布于 2015-06-23 04:26:38

使用Workbook_NewSheet事件。如果添加了图表表(而不是工作表),则应该注意确保代码不会被触发。类似于:

代码语言:javascript
代码运行次数:0
复制
Private Sub Workbook_NewSheet(ByVal Sh As Object)
    On Error GoTo ignore_me
    Dim ws As Worksheet
    Set ws = Sh
    ActiveWorkbook.Names.Add Name:="Total" & ws.Name, RefersTo:=ws.Range("A1")
    Exit Sub
ignore_me:
    'must be a chart sheet added -- take no action
End Sub
票数 1
EN

Stack Overflow用户

发布于 2015-06-23 04:38:42

这就是你想要的吗?

代码语言:javascript
代码运行次数:0
复制
Private Sub Workbook_NewSheet(ByVal Sh As Object)
    If Sh.Type <> -4167 Then Exit Sub

    Dim aCell As Range, rng As Range

    Set aCell = ThisWorkbook.Sheets("Master").Cells.Find(What:="TOTAL MD (RES)", _
                                                         LookIn:=xlFormulas, _
                                                         LookAt:=xlPart, _
                                                         SearchOrder:=xlByRows, _
                                                         SearchDirection:=xlNext, _
                                                         MatchCase:=False)

    If Not aCell Is Nothing Then Set rng = aCell.Offset(, 6)

    If Not rng Is Nothing Then _
    ThisWorkbook.Names.Add Name:="Total" & Sh.Name, RefersTo:=rng
End Sub
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30993656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档