【问题标题】:Excel VBA Hardcode every Named Range in formulasExcel VBA硬编码公式中的每个命名范围
【发布时间】:2014-09-17 18:05:31
【问题描述】:

我目前正在复制一个工作表,其中包含工作簿和特定于工作表的命名范围。 特定于工作表的引用需要保持原样,工作簿的引用需要硬编码。 我正在寻找一种方法来固定每个包含外部引用的命名范围。

我当前的代码看起来像这样,但这并不是我真正想要的:

Sub HardcodeValuesInExternalNamedRanges(wb As Workbook, ws As Worksheet)
Dim namCur As Name

For Each namCur In wb.Names
    If (InStr(1, namCur.RefersTo, ThisWorkbook.Name) > 0) Then
        namCur.RefersTo = "=" & ws.Evaluate(namCur.RefersTo)
    End If
Next namCur
End Sub

我找不到正确固定值的方法。现在完成的方式在某种程度上可以完成这项工作,但我希望值在单元格内正确转换,而不仅仅是在命名范围的基础上。

另一种选择是遍历所有单元格并查看它是否包含命名范围,但我认为这太耗时了。

有没有办法更有效地做到这一点?

【问题讨论】:

    标签: excel vba named-ranges


    【解决方案1】:

    与其循环遍历单元格,不如像这样循环.FindNext

    Do
        rng.Value = rng.Value 'Hardcodes the value
        Set rng = .FindNext(What:=ThisWorkbook.Name Lookin:=xlFormulas) 'finds the next Value to be hardcoded
    Loop While Not Rng Is Nothing
    

    【讨论】:

    • 我想我以不同的方式解决了它,或者说绕过它,但你的解决方案似乎很棒。我将无法测试它,因为工作簿已经在做我想要它做的事情,但仍然感谢你,也许其他人会发现它很有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-05
    • 2017-10-01
    • 2018-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多