2014-03-13 223 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