在Excel中向名称添加注释

在Excel中向名称添加注释,excel,vba,Excel,Vba,我最近发现了一些让我有点困惑的事情: 我使用vba在工作表上为一个范围指定了一个特定的名称: wks.Names.Add name:="databases", RefersTo:="=" & "$F$7:$F$" & j 这对我来说非常好,名称可以在名称管理器中看到,并具有正确的引用 在下一行代码中,我想使用 ActiveWorkbook.Names("databases").Comment = "created automatically by <sub> on

我最近发现了一些让我有点困惑的事情:

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

wks.Names.Add name:="databases", RefersTo:="=" & "$F$7:$F$" & j
这对我来说非常好,名称可以在名称管理器中看到,并具有正确的引用

在下一行代码中,我想使用

ActiveWorkbook.Names("databases").Comment = "created automatically by <sub> on " & Now()
ActiveWorkbook.Names(“数据库”).Comment=“自动创建人”&Now()

将此注释添加到名称时,名称的引用将更改,并且名称不再起作用。我很想知道为什么会发生这种情况。

试试下面的代码:

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
Sub-DefandModNames()
'
将MyName设置为名称
将工作作为工作表

设置wks=Worksheets(“Sheet1”)”尝试以下代码:

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
Sub-DefandModNames()
'
将MyName设置为名称
将工作作为工作表

Set wks=Worksheets(“Sheet1”)”我无法重新创建该问题,但我建议在声明中更加明确,以避免歧义

例如,您的
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 
Public子示例()
将WkBk设置为Excel.工作簿
将WkSht设置为Excel.工作表
将Nm设置为Excel.Name
Set WkBk=应用程序工作簿(“Book1”)
设置WkSht=WkBk.工作表(“数据库列表”)
设置Nm=WkSht.Names.Add(名称:=“数据库”,参考:=“=”&WkSht.Name&“!$F$7:$F$20”)
Nm.Comment=“由上自动创建”&Now()
设置Nm=nothng
设置WkSht=Nothing
设置WkBk=Nothing
端接头

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

例如,您的
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 
Public子示例()
将WkBk设置为Excel.工作簿
将WkSht设置为Excel.工作表
将Nm设置为Excel.Name
Set WkBk=应用程序工作簿(“Book1”)
设置WkSht=WkBk.工作表(“数据库列表”)
设置Nm=WkSht.Names.Add(名称:=“数据库”,参考:=“=”&WkSht.Name&“!$F$7:$F$20”)
Nm.Comment=“由上自动创建”&Now()
设置Nm=nothng
设置WkSht=Nothing
设置WkBk=Nothing
端接头

我已经能够在Excel 2016中重现这个问题。Excel 2010和2013中都不会出现这种情况。这是.Comment实现中的一个bug

解决办法:

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
sRefersTo=“Sheet1!$a$3”
Set MyName=.Names.Add(sName,sRefersTo)
用我的名字
.Comment=“由上自动创建”&Now()
“.RefersTo已更改为Sheet1!”R3C1'(注意额外的“”)
.referesto=sRefersTo'此问题通过重新设置进行修复
以

我已经能够在Excel 2016中重现这个问题。Excel 2010和2013中都不会出现这种情况。这是.Comment实现中的一个bug

解决办法:

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
sRefersTo=“Sheet1!$a$3”
Set MyName=.Names.Add(sName,sRefersTo)
用我的名字
.Comment=“由上自动创建”&Now()
“.RefersTo已更改为Sheet1!”R3C1'(注意额外的“”)
.referesto=sRefersTo'此问题通过重新设置进行修复
以

插入注释会导致vba错误,但注释插入正确。 所以:在注释插入代码行之前插入“出错时继续下一步”,它就可以工作了。 你好
Rahancrau插入注释会导致vba错误,但注释插入正确。 所以:在注释插入代码行之前插入“出错时继续下一步”,它就可以工作了。 你好
Rahancrau

当你试图使用它时,它不起作用,你在
wks
对象中提到的工作表上吗?我只是试图从你展示的内容中重新创建它,它工作正常,这意味着你没有展示的内容中存在其他问题。尝试Shai Rado的想法“名称的引用已更改,名称不再工作”它将更改为什么?它有效吗?即,如果您使用其更改为的名称,它有效吗?或者它实际上已损坏?我只使用一个工作簿,所有工作表都在该工作簿中。ActiveWorkbook.Names.Add name:=“数据库”,referesto:=“=”&“$F$7:$F$”&j-1 ActiveWorkbook.Names(“数据库”).Comment=由“&Now()自动创建将名称更改为=Start!'R7C6':R20C6'是否在Excel或VBA中检查名称的属性?在Excel中,预先输入工作表名称是正常行为;在Excel中,如果工作表设置为使用R1C1表示法而不是A1表示法(检查文件),则可能会看到显示的内容► 选择权► 公式► 使用公式当你试图使用它,但它不起作用时,你是否在
wks
对象中提到的工作表上?我只是尝试从你展示的内容中重新创建它,效果很好,这意味着你没有展示的内容中存在其他问题。试试Shai Rado的想法。”名称的引用已更改,名称不再有效“它更改为什么?它是否有效,即如果您使用名称,它更改为是否有效或它是否实际已损坏?我只使用一个工作簿,所有工作表都在该工作簿中。ActiveWorkbook.Names.Add name:=“数据库”,请参考:=“=”&“$F$7:$F”$“&j-1 ActiveWorkbook.Names(“databases”).Comment=由上自动创建“&Now()将名称更改为=Start!'R7C6”:R20C6”是否在Excel或VBA中检查名称的属性?在工作表名称前加前缀是正常行为;在Excel中,如果工作表设置为使用R1C1 no,则可能会看到显示的内容