【问题标题】:How to resolve Range Names without selecting cells如何在不选择单元格的情况下解析范围名称
【发布时间】:2019-04-24 12:09:11
【问题描述】:

导入工作表时是否可以强制 Excel 使用 VBA 解析所有范围名称?在某些情况下,直到选择单个单元格,在编辑栏中突出显示然后取消选择,名称才会解析。 似乎如果工作表包含名称管理器中不存在的任何名称,则所有后续名称都将被忽略。

我的应用程序正在“经理”工作簿中运行 VBA 代码,从那里我打开第二个“模板”工作簿以生成测试报告。可以使用功能区控件将报告页面(工作表)附加到模板。这些附加的工作表具有各种名称的单元格,可以根据模板工作簿中已有的数据自动填写报告。 例如,当导入工作表(“结果”)时,视图显示:

Address     Formula       Value     Display
F18        =WeightAir     335        335
F19        =WeightWater   Name missing in this workbook
B39        =Length        1.1       #NAME?
C47        =Author        N H       #NAME?

如果我选择单元格 C47,请单击公式栏并再次退出,单元格值会正确显示。单元格 B39 仍然错误。 同一个工作表中的其他单元格没有被填充,这只是为了展示一个例子。 我曾尝试使用 VBA 选择一系列单元格(包括所有显示 #NAME? 错误的单元格)来强制计算,但这似乎没有效果

DestWB.Worksheets(ShtCount).Range("A1", "Z65536").Select
DestWB.Worksheets(ShtCount).Calculate
DestWB.Worksheets(ShtCount).Range("A1").Select

我在关闭“源工作簿”之前收到了使用此建议的建议

DestWB.Worksheets(ShtCount).UsedRange.Formula = _
          OrigWB.Worksheets(1).UsedRange.Formula

但是,如果工作表包含名称管理器中不存在的任何名称,则对于此工作簿,所有后续(即具有更高列、行地址的单元格)名称都将被忽略。 有没有办法强制解析所有已知名称,只留下缺失值? 请问有什么建议吗?

【问题讨论】:

  • 您是否尝试使用ActiveWorkbook.Names

标签: excel vba


【解决方案1】:

虽然我无法复制由工作表的“副本”创建的问题,但由于缺少@987654325,我能够在Error 中生成Formulas @"

以下过程更新了Error 中的Formulas NamesWorkbook 中存在的Formulas,仅将错误留给不存在的Name

Sub Formulas_InError_Refresh()
Dim wb As Workbook
Dim rErr As Range
Dim rArea As Range
    Set wb = ActiveWorkbook 'Change to the required workbook
    Set rErr = wb.Worksheets("Results").UsedRange.SpecialCells(xlCellTypeFormulas, xlErrors)
    For Each rArea In rErr.Areas
        With rArea
            .Formula = .Formula
    End With: Next
    End Sub

【讨论】:

  • 抱歉,这不适用于我的应用程序,它只是复制了在所有单元格中找到的第一个公式。
  • 抱歉发布旧版本,请查看更新后的答案...
猜你喜欢
  • 2015-08-01
  • 2016-04-24
  • 1970-01-01
  • 2015-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多