【问题标题】:ExecuteExcel4Macro to get range/charts from closed workbooksExecuteExcel4Macro 从关闭的工作簿中获取范围/图表
【发布时间】:2013-06-03 13:58:41
【问题描述】:

我使用这些行从已关闭的工作簿中获取值:

Arg = "'" & Path & "[" & File & "]" & Sheet & "'!" & "R4C4"  
Arg = CStr(Arg)
GetValue = ExecuteExcel4Macro(Arg)

除了循环之外,还有其他方法可以从范围中获取值吗?循环解决方案正在工作,但如果我可以直接使用ExecuteExcel4Macro 获取范围会更清楚。我尝试在Arg 中输入一个范围,但它返回错误。

我对图表有同样的问题,我怎样才能得到它们?我目前的解决方案包括获取值和重新绘制图表。它可以工作,但我会更喜欢GetChart(Chartname) 函数。

我发现我可以使用 ADODB 连接从已关闭的工作簿中获取价值。但与ExecuteExcel4Macro 相比,它有点过于复杂。在范围/图表的情况下使用 ADODB 连接会更容易吗?

【问题讨论】:

  • 没有实用的方法可以从关闭的工作簿中提取图表 - 如果需要,打开并复制它要简单得多!

标签: excel vba adodb excel-4.0


【解决方案1】:

以下代码从已关闭工作簿中的某个范围中提取信息,并将其复制到活动工作簿中的相同范围中:

    Sub GetRange()
        With Range("A1:D50")                                    'set range to copy from / to.
            .Formula = "='C:\E3_Test\[CC_Data.xlsx]AllData'!A1" 'refers to a workbook, sheet and first cell.
                                                                'It will put the relative references into the target sheet correctly.
            .Value = .Value                                     'changes formula to value.
        End With
    End Sub

【讨论】:

  • 为什么不 range.formula = " [...] " ?为什么 .value=.value ?
  • @Imorin .formula 将引用作为要复制的数据的顶角。开头的Range 是数据复制到的区域,将相关引用的公式放入单元格中。 .value=.value 行强制单元格内容为公式的值,而不是公式本身。
  • 我总是使用.Formula = .Value 而不是.Value = .Value。在某些情况下,后者可能会导致两个范围之间的不一致。烦人的是,自从我发现了那个修复程序后,我忘记了它解决了什么问题。它很有可能涉及国际日期格式,每当涉及 VBA 时,这些格式经常会出现异常。然而,这个问题绝对是真实存在的,并且直到 Excel 2007 SP3 仍然存在。
  • 好吧,它可以工作,但是如果你想要一个数组而不是 Range 的结果呢?
猜你喜欢
  • 2012-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-07
  • 1970-01-01
  • 2015-10-31
  • 1970-01-01
相关资源
最近更新 更多