我的目标是将我刚刚粘贴的范围命名为我将来可以找到的独特范围。
复制和粘贴的范围来自下拉菜单,因此必须进行修改
Selection.Name.Formula = "=""AddSection_""&SUBSTITUTE('Add Section'!D3,"" "","""")"
如果他们在D3的下拉菜单中选择了Oil Furnace,则复制并粘贴该部分。它应命名为" AddSection_OilFurnace"
这可能吗?
我真正喜欢的是,如果我可以根据在它之前存在多少来更新命名范围。例如,上面的内容将是" AddSection_OilFurnace1"下一节将是" AddSection_GasFurnace2"等等。但我不知道如何或如果可能哈哈。它会是这样的:
Worksheets("Add Section").ranges.count
这是可能的,它会如何进入我的命名公式?
我是VBA的新手,所以非常感谢你的帮助!
答案 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
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_GasFurnace2
,AddSection_OilFurnace3
,background-image: url("images/components/arrows.svg");
- 但也许它很有用。