Excel VBA:我可以使用公式命名范围吗?
我的目标是给我刚粘贴的范围命名为我将来能找到的唯一的东西 复制和粘贴的范围来自下拉菜单,因此必须进行修改Excel VBA:我可以使用公式命名范围吗?,vba,excel,Vba,Excel,我的目标是给我刚粘贴的范围命名为我将来能找到的唯一的东西 复制和粘贴的范围来自下拉菜单,因此必须进行修改 Selection.Name.Formula = "=""AddSection_""&SUBSTITUTE('Add Section'!D3,"" "","""")" 如果他们在D3的下拉列表中选择了油炉,则复制并粘贴该部分。应命名为“AddSection_油炉” 这可能吗 我真正喜欢的是,如果我能有一个命名范围,根据之前存在的数量进行更新。例如,上面是“AddSection_Oi
Selection.Name.Formula = "=""AddSection_""&SUBSTITUTE('Add Section'!D3,"" "","""")"
如果他们在D3的下拉列表中选择了油炉,则复制并粘贴该部分。应命名为“AddSection_油炉”
这可能吗
我真正喜欢的是,如果我能有一个命名范围,根据之前存在的数量进行更新。例如,上面是“AddSection_OilFurnace1”,下一节是“AddSection_GasFurnace2”,依此类推。但我不知道如何或如果这是可能的哈哈。会不会是这样的:
Worksheets("Add Section").ranges.count
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)
这有可能吗?它将如何进入我的命名公式
我是VBA的新手,非常感谢您的帮助 我相信你想做的是:
Selection.Name = "AddSection_" & Replace(Worksheets("Add Section").Range("D3").Value, " ", "")
或者,设置它以确保尚未使用范围名称,可能类似于:
Worksheets("Add Section").ranges.count
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\u OilFurnace1
,然后AddSection\u OilFurnace2
,然后可能AddSection\u Gasnarace1
-它不会变为AddSection\u OilFurnace1
,AddSection\u Gasnarace2
,AddSection\u OilFurnace3
-但它可能很有用。我相信您想做的是:
Selection.Name = "AddSection_" & Replace(Worksheets("Add Section").Range("D3").Value, " ", "")
或者,设置它以确保尚未使用范围名称,可能类似于:
Worksheets("Add Section").ranges.count
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\u OilFurnace1
,然后AddSection\u OilFurnace2
,然后可能AddSection\u Gasnarace1
-它不会变为AddSection\u OilFurnace1
,AddSection\u Gasnarace2
,AddSection\u OilFurnace3
-但可能有用。我认为YowE3K的方法是正确的。我重构了他的代码,因为我不喜欢doloop
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的方法是正确的。我重构了他的代码,因为我不喜欢
doloop
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
谢谢你的帮助 您是尝试(动态)更改指向图纸固定区域的名称,还是仅尝试分配由分配时单元格的值确定的名称?公式不能有副作用。它接受输入,计算值,返回结果。答案是否定的。谢谢你的帮助!我正在尝试分配一个名称,该名称由分配时单元格的值决定。您是在尝试(动态)更改指向图纸固定区域的名称,还是仅尝试分配一个名称,该名称由分配时单元格的值决定?公式不会有副作用。它接受输入,计算值,返回结果。答案是否定的。谢谢你的帮助!我正在尝试分配一个名称,该名称由分配时单元格的值决定Nice answer。我希望你不介意我为我的答案重构了你的代码。@ThomasInzina-我的应该在处理
egggcarton
时忽略egggcarton
(因为carton…
不是数字),在处理egggcarton
时应该忽略egggcarton
(由于egg…
的前9个字符不是eggcardon
)。在egg456
之后,我仍然无法处理egg
,但我怀疑用户是否会使用以数值结尾的任何东西。哇,你太棒了!非常感谢你和YowE3K!哇…谁会想到这会如此复杂。这只是一种爱好是件好事。无论如何,我想我会ally收到了。再次感谢。回答很好。我希望你不介意我为我的答案重构了你的代码。@ThomasInzina-我的应该在处理eggcontrol
时忽略eggcontrol
(因为carton…
不是数字),并且在处理eggcontrol
时应该忽略eggcontrol
(由于egg…
的前9个字符不是eggcardon
)。在egg456
之后,我仍然无法处理egg
,但我怀疑用户是否会使用以数值结尾的任何东西。哇,你太棒了!非常感谢你和YowE3K!哇…谁会想到这会如此复杂。这只是一种爱好是件好事。无论如何,我想我会ally收到了。再次感谢。这非常有效!谢谢你-我真的很感谢你花时间来帮助我!@Haley YowE3K指出了一个问题。我的最新更新修复了它。这仍然有效,但添加到它上,我以后如何引用此范围?例如,如果我需要清除单元格内容,我当前正在使用选择,但是否存在错误我可以用其他方式引用该范围?我知道它是以代码运行后命名的,但当它运行时,我应该如何引用它?使用range(“name”)
将引用一个命名范围(例如range(“AddSection\u test.1”)
。但是当它运行时,我会将一个变量设置为指向选择
。例如设置目标=选择。单元格
。从那里只需使用目标
引用原始的选择
。这非常有效!谢谢你-我非常感谢你花时间帮助我!@Haley YowE3Kut一个问题。我的最新更新修复了它。这仍然有效,但添加到它之后,我以后如何引用此范围?例如,如果我需要清除单元格内容,我当前正在使用选择,但是否有其他方法可以引用该范围?我知道它是以代码运行后的名称命名的,但在代码运行时,我应该如何引用它?使用Range(“name”)
将引用一个命名范围(例如Range(“AddSection\u test.1”)
。但是当它运行时,我会将一个变量设置为指向选择
。例如设置