2017-02-17 141 views
0
名称

我最近观察到的东西,弄得我一点点:添加注释要在Excel

我使用VBA了一系列对我表一个特定的名称:

wks.Names.Add name:="databases", RefersTo:="=" & "$F$7:$F$" & j 

这对我的作品完全罚款并且名称可以在名称管理器中以正确的参考显示。

在使用

ActiveWorkbook.Names("databases").Comment = "created automatically by <sub> on " & Now() 

当添加到名称此评论的下一行代码我要评论添加到该名称,名称的参考值发生改变名称不工作了。我真的很感兴趣,为什么会发生。

+0

当您尝试使用它,它不工作,你在'wks'对象所引用的表上? – YowE3K

+0

我只是试图从你已经显示的内容中重新创建它,并且它运行良好,这意味着其他问题是你未显示的问题。尝试Shai Rado的想法 –

+0

“名称的参考被改变,名称不再有效”它会改变什么?并且它的工作原理,即如果你使用它的名称改变它的工作或实际上是否损坏? –

回答

2

我已经能够重现该问题,在Excel 2016年它不会在Excel 2010中,也没有发生2013年。它是在一个错误。评论实施。

一种解决方法:

sRefersTo= "Sheet1!$a$3" 
Set MyName = .Names.Add(sName, sRefersTo) 
With MyName 
    .Comment = "created automatically by <sub> on " & Now() 
     ' .RefersTo has been changed to Sheet1!'R3C1' (note the extra '') 
    .RefersTo= sRefersTo ' This fixes by re-setting 
End With 
+0

谢谢雷,像一个魅力工作(虽然,我不得不将“。名称”改为“名称”)。 –

0

尝试像下面的代码:

Sub DefandModNames() 
' 
Dim MyName As Name 
Dim wks As Worksheet 

Set wks = Worksheets("Sheet1") '<-- modify "Sheet1" to your sheet's name 
'j = 10 '<-- for my tests only 

With ActiveWorkbook 
    Set MyName = .Names.Add(Name:="databases", RefersTo:="=" & wks.Name & "!$F$7:$F$" & j) 
    With MyName 
     .Comment = "created automatically by <sub> on " & Now() 
    End With 
End With  

End Sub 
+0

是不是将创建工作簿范围名称,而不是工作表范围的名称? – YowE3K

+0

@ YowE3K是的,我认为这是PO之后(阅读他的最后一行,他得到他的错误)。我想他是在'wks'中创建它,只是因为他想要命名范围来获取这张表的范围。 –

+0

我可以复制OP描述的行为的唯一方法是,如果多个工作表已设置为'databases'范围(这意味着添加评论的名称可能不是他们期望的名称更改),然后他们尝试在没有定义名称的其他工作表上使用该名称。我不确定工作表范围名称的使用是否是故意的,还是OP的错误。 – YowE3K

0

我无法重新创建这个问题,但我会建议为你的声明更明确,以避免歧义。

例如您的wks可参照所谓的DB_Data表和命名的区域工作正常,但ActiveWorkbook指的是活跃在当时的工作簿,它可能不是工作簿wks在不在。

由于是明确你确切地知道你正在处理即

Public Sub Sample() 
Dim WkBk As Excel.Workbook 
Dim WkSht As Excel.Worksheet 
Dim Nm  As Excel.Name 

Set WkBk = Application.Workbooks("Book1") 
    Set WkSht = WkBk.Worksheets("DB_List") 
     Set Nm = WkSht.Names.Add(Name:="databases", RefersTo:="=" & WkSht.Name & "!$F$7:$F$20") 
      Nm.Comment = "Created automatically by <sub> on " & Now() 
     Set Nm = nothng 
    Set WkSht = Nothing 
Set WkBk = Nothing 

End Sub 
+0

尝试在我的代码中设置一个注释并将注释名称更改为: '= Start!'R7C6':R20C6'' – Andi

+0

您可能已经注意到R1C1和A1符号“Start!”定义了工作表名称(Start)并且对于这两种表示法都是通用的,'R7C6:20C6'是R1C1表示法,'F7:F20'是A1表示法,但它们都涉及相同的范围。我在'RefersTo'设置中对我的示例做了一些小改动,现在它指定表单名称更明确(我的错误!)。尝试一下。 –

+0

试过了,它会产生同样的问题。在评论产生评论的行时,它完美地工作(就像我的代码一样)。设置注释时,名称的引用变为“R7C6:20C6”。 – Andi