2017-02-17 126 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