在Excel中为名称添加注释

问题描述 投票:0回答:3

我最近观察到一些让我困惑的事情:

我使用vba在工作表上给出了一个特定名称的范围:

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

这对我来说完全没问题,可以在名称管理器中看到正确引用的名称。

在下一行代码中,我想使用添加注释到此名称

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

将此注释添加到名称时,将更改名称的引用,并且名称不再起作用。我真的很感兴趣为什么会这样。

excel vba
3个回答
2
投票

我已经能够在Excel 2016中重现该问题。它不会在Excel 2010或2013中发生。这是.Comment实现中的错误。

解决方法:

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
投票

尝试类似下面的代码:

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
投票

我无法重新创建问题但我建议在声明中更明确以避免歧义。

例如,你的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 
© www.soinside.com 2019 - 2024. All rights reserved.