2014-03-13 180 views
0

對於工作表「大小選擇」中範圍爲C4:C53內容的每個單元格,我想創建一個新的命名範圍,並且該範圍的名稱應該與該範圍的內容相同細胞。Excel VBA - 定義命名範圍

每個命名範圍應該是公式驅動的,並且具有一個取決於單元格行的變量。

我試過編碼這個,但不斷收到錯誤;你能否看看並幫我解決這個問題?

Private Sub Worksheet_Change(ByVal Target As Range) 

    If Not Intersect(Target, Range("A1:F20000")) Is Nothing Then 

    Dim i As Integer 
    Dim range_name As String 


    For i = 4 To 53 

    If Sheets("Size Selection").Cells(i, 3) <> "" Then 

    Range(range_name).Formula = "=OFFSET('Size Selection'!$F$" & i & ", 0, 0, 1, COUNT(IF('Size Selection'!$F$" & i & ":$AZ$" & i & "="", "", 1)))" 

    Range(range_name).Name = Sheets("Size Selection").Cells(i, 3) 

    End If 

    Next 

    End If 

End Sub 

非常感謝您的幫助!

+0

'range_name'每次都是一個空字符串。您需要正確填充它。 – Kapol

+0

如何?我是VBA新手。 – jcv

回答

1

基於在下面的討論您的意見,這就是我認爲你是後:

Private Sub Worksheet_Change(ByVal Target As Range) 

    If Not Intersect(Target, Range("A1:F20000")) Is Nothing Then 

    Dim i As Integer 
    Dim range_name As String 


    For i = 4 To 53 

     If Sheets("Size Selection").Cells(i, 3) <> "" Then 

     ActiveWorkbook.Names.Add _ 
      Name:= Sheets("Size Selection").Cells(i, 3).Text, _ 
      RefersToR1C1:="=OFFSET('Size Selection'!$F$" & i & ", 0, 0, 1, COUNT(IF('Size Selection'!$F$" & i & ":$AZ$" & i & "="", "", 1)))" 

     End If 

    Next 

    End If 

End Sub 

可能是錯誤的RefersToR1C1一部分,但它至少現在應該對你有意義如何進行。

希望這樣做的竅門!

+0

謝謝約翰。我已經實現了你的建議,但不是命名範圍,而是將單元格重命名爲N/A並導致錯誤。另外,需要在單元格(i,3)前添加表單(「大小選擇」)。無法弄清楚什麼不起作用 – jcv

+0

第一行 - 公式的設置 - 是否爲每個單元格創建獨特的值?當命名單元格時,它們必須是唯一的,並遵循特定的慣例......只需在深入研究之前先檢查這些單元格...... –

+0

John,非常感謝。我不想讓單元名稱改變。本質上,我希望excel檢查單元格C4,如果單元格有內容(<>「」),則創建一個根據C4中的內容命名的範圍,並應用公式來定義範圍。然後轉到C5等,直到我們在C53。 – jcv