2016-05-17 54 views
2

我想獲取每個指定單元格的值。我從下面的代碼開始。 它能夠列出名稱的單元格,但不顯示正確的值。在變量n.value中,我得到了一個參考,如=Orders!$G$8,而我期待25美元,因爲25美元是細胞真正包含的。如何遍歷指定的單元格和每個列表的值

的問題是:

如何獲得的價值使用「名稱」集合中的for循環包含?

代碼:

Sub ListVarsWithValue() 
    Dim n As Name 
    Dim Count As Integer 
    Dim s As String 
    s="" 
    For Each n In ActiveWorkbook.Names 
     s = s + n.Name + "=" + n.Value + chr(10) '<-- n.value not OK 
    Next n 
    MsgBox s 
End Sub 
+1

是名稱單元格的範圍或單元格? – Sorceri

+0

好問題。在這種情況下,名稱是指單個單元格。但是,知道如何知道它是否指向一個範圍會很好。也許我可以添加一個IF語句來檢查RefresToRange? – NoChance

+0

您確定它不是ActiveSheet而不是ActiveWorkBook嗎? – mhyst

回答

2

名稱代表一定範圍的單元格的名稱。當你在你的工作簿上運行這個工具時,你將得到你不知道的Print_Areas和xlfn.countifs_以及其他奇怪的名字對象。此外,如果您的範圍不止一個單元格,則範圍(n.value).value將不起作用。有兩個很多未知因素試圖爲每個名字提供價值。

我會在你的小組中測試一下,以確保有一個值。這是快速和骯髒的,但你明白了。

Sub sdf() 
On Error Resume Next ''shouldn't use this but demonstrates how to get what you need 
For Each n In ActiveWorkbook.Names 
If Not IsError(Range(n.Value).Value) Then ''just try something like this 
Debug.Print n.Name & n.Value & Range(n.Value).Value 
End If 
Next 
End Sub 
+1

這確實是一個好點。謝謝。 – NoChance

+2

你的回答比我的好。 –

3

這是因爲名稱的價值是公式的形式增強地址..............你需要:

Sub ListVarsWithValue() 
    Dim n As Name 
    Dim Count As Integer 
    Dim s As String 
    s = "" 
    For Each n In ActiveWorkbook.Names 
     s = s & n.Name & "=" & n.Value & "-" & Range(n.Value).Value & vbCrLf 
    Next n 
    MsgBox s 
End Sub 

enter image description here

的邏輯是:

Range(n.Value).Value就是這樣:
Range("Sheet4!$B$4").Value就像:
bee這是實際的單元格內容!

+0

優秀的答案,謝謝。我認爲屬性名稱「價值」有點誤導... – NoChance

+0

@NoChance考慮標記** EoinS **的答案作爲最佳答案。 –

+0

我會的。他的回答確實指出了一個重要的觀點。你的評論很美(我現在沒有其他描述!)。謝謝。 – NoChance

相關問題