如何使用VBA选择Excel中的所有名称

如何使用VBA选择Excel中的所有名称,excel,cell,names,vba,Excel,Cell,Names,Vba,我使用的是一个很大的Excel文件,其中我定义了大约2000个单元格名称。此外,excel还包含公式,这些公式已输入,并引用单元格A23-B24。我想按定义的名称更改单元格引用,而不是A23-B24具有变量_100-VARIABLE_120 我知道,通过选择应用名称,然后从列表中选择已定义的名称,这是可能的。因为我有大约2000个已定义的名称,我想一次从菜单中选择所有名称,但我找不到选项,所以我必须逐个选择。我一直在寻找是否有一个选项可以启用菜单上的多重选择,但我没有找到这样的选项。 我的一个解

我使用的是一个很大的Excel文件,其中我定义了大约2000个单元格名称。此外,excel还包含公式,这些公式已输入,并引用单元格A23-B24。我想按定义的名称更改单元格引用,而不是A23-B24具有变量_100-VARIABLE_120

我知道,通过选择应用名称,然后从列表中选择已定义的名称,这是可能的。因为我有大约2000个已定义的名称,我想一次从菜单中选择所有名称,但我找不到选项,所以我必须逐个选择。我一直在寻找是否有一个选项可以启用菜单上的多重选择,但我没有找到这样的选项。 我的一个解决办法是创建一个宏,该宏应用于选定的公式范围和选定的名称。大概是这样的:

Sub Macro1()

' Macro1 Macro

Selection.ApplyNames Names:=Array  ("ATL_BV_XP", "ATL_BV_XP..EUN", "ATL_PK_XP", _
    "ATL_PK_XP..EUN", "CHN_PK_IM", "CHN_PK_IM..EUN", "CHN_PK_IM..SHREUN", _
    "E15_AG_AH", "E15_AG_EPA", "E15_AG_SFP", "E15_AG_SFP..CF" _
    , "E15_APF_FE"), IgnoreRelativeAbsolute:=True, UseRowColumnNames:=True, _
    OmitColumn:=True, OmitRow:=True, Order:=1, AppendLast:=False
End Sub

我的问题是,因为我已经编写了大量已定义名称,大约是2000年的两倍,所以在宏代码中列出所有名称变得非常复杂。我认为可能的解决方法是创建一个列表,其中包含代码中所有已定义的名称。有人知道怎么做吗?我环顾四周,一些代码建议使用循环,而另一些代码则表示可以提取列表。尽管如此,我仍然无法找到一种方法来做这件事。

您可能已经可以使用它了。假设我们已经定义了成本、利润、税的名称

键入公式时,打开“公式”选项卡,您始终可以下拉这些名称:


宏是很好的,但是我不知道如何在编辑过程中调用宏。

< P>在MSDN.MyStft.com的文档中说

名称:要应用的名称数组。如果省略此参数,则工作表上的所有名称都将应用于该范围

请尝试以下方法:

Selection.ApplyNames _
    IgnoreRelativeAbsolute:=True, UseRowColumnNames:=True, _
    OmitColumn:=True, OmitRow:=True, Order:=1, AppendLast:=False

这取决于定义名称的范围及其可见性。试试看,让我们知道结果。

您是否查找vba对象模型名称:感谢您的快速回答Christine Ross,我不是vba专家,目前我正在查看以下网站,可能使用的是最后一个示例:首先创建所有名称的列表,然后将该列表应用于选定的公式范围,以相应的名称替换单元格引用。因此,您可以更清楚地定义您的问题吗?在阅读问题时,您似乎想通过使用一些下拉列表等将名称插入公式中。但在阅读注释时,您似乎已经在公式中有了名称,并且您想将其更改为实际引用,例如,在公式中,您有一个名称名称1,您想用Sheet1替换它!A1?即使手动完成公式>应用名称,我也无法使其更改我的虚拟公式。我怀疑有一个bug,感谢您的跟进和回复。实际上,即使在通过逐个单击手动选择名称之后,Excel也经常崩溃。我的解决方案是通过将公式导出为文本和引用,在CSV文件中创建一个字典,然后在R中,我在三行代码中应用替换。我的选择是留在Excel中,但当然有些过程使用替代方法更容易。尽管如此,我仍将继续尝试这个选项,很可能会有一个解决方案。非常感谢您的输入,问题是我的文件有2000多个名称,并且已经作为单元格的引用输入,因此理想情况下,我希望在一个步骤中用名称替换这些引用。@user3279722一个起点是选择一些单元格并运行ActiveCell.ListNames以生成名称和引用表。然后,您可以编写某种类型的find/replace宏来循环公式并进行更改。从不知道。ListNames!在我上一个项目中,这会为我节省很多时间:谢谢你的提示。我知道。ListNames创建了一个定义名称及其覆盖范围的列表。我认为应该可以从这个列表中创建一个数组,并在ApplyNames函数中输入它作为名称的值。下面的代码就是出于这个目的而编写的,但它不适用于Sub-Macro1'Macro1 Macro Dim Arr作为变量Arr=RangeA5:A2100 Selection.ApplyNames uNames:=Arr,IgnoreRelativeAbsolute:=True,UseRowColumnNames:=True,uuOmitColumn:=True,ommitRow:=True,Order:=1,AppendLast:=False End Sub问题似乎是范围选项。感谢您的回复,我尝试了下面的代码,但没有成功。Excel会提示一条错误消息,指出未找到任何引用。我尝试改用Cells.ApplyNames uIgnoreRelativeAssolute:=True,UseRowColumnNames:=True,uOmitColumn:=True,OmitRow:=True,Order:=1,AppendLast:=False。错误消息是相同的,因此我认为,如果不为名称输入值,则不会使用工作簿或工作表上定义的名称。我的另一个选择是t
o创建一个数组,然后将此数组用作名称的值。尽管如此,它还是不起作用。好吧,这是Microsoft声称的,我希望它至少对具有相同作用域的已定义名称和工作簿级别的名称起作用,以便通过一个单独的过程来处理所有其他名称。你的目标是用相应的“定义名称”替换工作簿公式中的所有“A1”引用,这对我来说很有意义,事实上,我相信这就是定义名称的全部目的。你是否可以把你的文件放在互联网上的某个地方,这样我就可以详细了解所涉及的定义名称的“范围”和大小。干杯…