Excel VBA:我可以使用公式命名范围吗?

时间:2016-12-01 18:49:14

标签: excel vba excel-vba

我的目标是将我刚刚粘贴的范围命名为我将来可以找到的独特范围。

复制和粘贴的范围来自下拉菜单,因此必须进行修改

Selection.Name.Formula = "=""AddSection_""&SUBSTITUTE('Add Section'!D3,"" "","""")"

如果他们在D3的下拉菜单中选择了Oil Furnace,则复制并粘贴该部分。它应命名为" AddSection_OilFurnace"

这可能吗?

我真正喜欢的是,如果我可以根据在它之前存在多少来更新命名范围。例如,上面的内容将是" AddSection_OilFurnace1"下一节将是" AddSection_GasFurnace2"等等。但我不知道如何或如果可能哈哈。它会是这样的:

Worksheets("Add Section").ranges.count

这是可能的,它会如何进入我的命名公式?

我是VBA的新手,所以非常感谢你的帮助!

2 个答案:

答案 0 :(得分:2)

我认为YowE3K有正确的方法。我重构了他的代码因为我不喜欢Do Loop

Sub AddName()

    Dim myNameBase As String
    Dim arr() As String
    Dim maxName As Long
    Dim n As Name
    myNameBase = "AddSection_" & Replace(Worksheets("Add Section").Range("D3").Value, " ", "")

    For Each n In Names
        If n.Name Like myNameBase & "*" Then
            If n.Name = myNameBase Then
                maxName = 1
            ElseIf n.Name Like myNameBase & ".*." Then
                arr = Split(n.Name, ".")
                If arr(UBound(arr) - 1) >= maxName Then maxName = arr(UBound(arr) - 1) + 1
            End If

        End If
    Next
    Selection.Name = myNameBase & IIf(maxName, "." & maxName & ".", "")

End Sub

enter image description here

YowE3K感谢您的帮助!

答案 1 :(得分:1)

我相信你要做的是:

Selection.Name = "AddSection_" &  Replace(Worksheets("Add Section").Range("D3").Value, " ", "")

或者,设置它以确保尚未使用范围名称,可能类似于:

Dim myName As String
Dim maxSuffix As Long
Dim n As Name
myName = "AddSection_" & Replace(Worksheets("Add Section").Range("D3").Value, " ", "")
maxSuffix = 0
For Each n In Names
    If Left(n.Name, Len(myName)) = myName Then
        If IsNumeric(Mid(n.Name, Len(myName) + 1)) Then
            If CLng(Mid(n.Name, Len(myName) + 1)) > maxSuffix Then
                maxSuffix = CLng(Mid(n.Name, Len(myName) + 1))
            End If
        End If
    End If
Next
Selection.Name = myName & (maxSuffix + 1)

如果以前使用过现有的基本名称,即AddSection_OilFurnace1,然后AddSection_OilFurnace2,那么AddSection_GasFurnace1可能AddSection_OilFurnace1 - AddSection_GasFurnace2AddSection_OilFurnace3background-image: url("images/components/arrows.svg"); - 但也许它很有用。