Arrays 如何在命名范围上使用拆分?

Arrays 如何在命名范围上使用拆分?,arrays,excel,vba,Arrays,Excel,Vba,我试图在一个单元格区域中查找公式,将工作表中的命名区域与公式中的任何命名区域进行匹配,并用它们的引用单元格替换命名区域 Dim rng As Range Dim workrng As Range Dim xname As Name Dim arr() As Variant Dim arr_string as String Set workrng = Application.Selection Set workrng = Application.InputBox("txt", "header t

我试图在一个单元格区域中查找公式,将工作表中的命名区域与公式中的任何命名区域进行匹配,并用它们的引用单元格替换命名区域

Dim rng As Range
Dim workrng As Range
Dim xname As Name
Dim arr() As Variant
Dim arr_string as String

Set workrng = Application.Selection
Set workrng = Application.InputBox("txt", "header txt", workrng.Address, Type:=8
Set workrng = workrng.SpecialCells(xlCellTypeFormulas)

For Each rng In workrng
    For Each xname in ThisWorkbook.names
        arr = Split(xname.Name, "!")
        arr_string = arr(1)
        Debug.Print arr_string
        If InStr(rng.Formula, xname.Name) > 0 Then
            rng.Formula = VBA.Replace(rng.Formula, xname.Name, VBA.Replace(xname.RefersTo, "=", ""))
        End If
    Next
Next

当我调试打印“xname.Name”时,我会得到包含工作表名称的结果。例如:规格_MyNamedRange。但是,单元格中的公式只显示:_MyNamedRange。这就是为什么我要把它分开。但是,当我调试数组时,数组中什么都没有

没有工作表,很难确切知道该做什么。但您需要做一些更改:

Dim arr() As Variant --> Dim arr As Variant

arr = Split(xname.Name, "!") --> arr = Split(xname.RefersTo, "!")

没有数据就很困难。但是工作表名称通常与
.referesto
属性一起使用。我想我们需要更多地解释一下您实际希望在这里发生的事情。因为如果您只是在公式中替换命名范围的名称,应该可以正常工作。您试图将绝对单元格引用(例如
$A$1:$B$2
)从命名范围中拉出,这一事实使我对您实际想要的内容感到困惑accomplish@RonRosenfeld对的但由于某种原因,当我调试xname.Name时,它返回带有工作表名称的命名范围(即,Specifications!\u MyRangedName),而不仅仅是命名范围本身。@Marcucciboy2我使用的代码在其他工作簿上也能工作。出于某种原因,它在这里的行为有所不同。我之所以提取绝对单元格引用,是因为我想替换特定单元格公式中的命名范围,因为我要从工作簿中删除这些命名范围,在我这样做之前,我想修复这些公式,这样我就不会以#NAME结束?错误。由于问题存在于一个特定的工作簿上,解决这个问题的最简单方法是检查工作簿本身。如果您可以上传一份演示问题的副本(并编辑您的问题以包含链接),应该有人能够帮助您。我会离开几天,如果你还没有收到答复,我会在星期三或星期四回来