【问题标题】:Check for array formula within a macro-style Excel UDF检查宏样式 Excel UDF 中的数组公式
【发布时间】:2015-06-24 13:21:54
【问题描述】:

我正在使用 Excel-DNA 在 Excel 和 NetOffice 中创建 UDF,以实现与版本无关的自动化调用。在宏类型函数中,我可以使用以下内容从单元格中获取公式:

ExcelReference cellRef; // of course in reality this is assigned
var formula = (string)this.excelCall(XlCall.xlfGetFormula, cellRef);

此外,我想知道这是否是数组公式的一部分,如果是,它的范围是多少。使用 Excel 自动化,我可以使用类似的东西:

Range("A1").HasArray
Range("A1").CurrentArray.Address

但是,Microsoft 不鼓励在 UDF 调用中使用自动化:https://support.microsoft.com/en-us/kb/301443

那么,有没有办法通过 C API 获取 HasArray 和 CurrentArray 属性,或者有人知道使用自动化是否可以(在声明为宏类型的 UDF 的上下文中)?

【问题讨论】:

  • HasArray 在 UDF 中是允许的。它返回正确的结果。 Function arr(r As Range): arr = r.HasArray: End Function 作为 UDF 有效。不鼓励(并且通常阻止)的是从 UDF 中对WorkbookWorksheet 的任何其他部分进行修改。通常允许您提取 UDF 中的信息(有一些例外)。
  • 感谢 Byron - 使用自动化对此进行测试表明,对我而言,HasArray 似乎可以工作并且没有造成任何问题,但是 CurrentArray 在 UDF 中调用时可能会返回错误的答案,返回个人单元格,即使它是更大数组的一部分

标签: excel excel-addins excel-dna netoffice


【解决方案1】:

GET.CELL 信息函数,信息 type_num 49 将返回单元格是否是数组的一部分。来自您的 Excel-DNA(宏类型)函数:

bool isArray = (bool)XlCall.Excel(XlCall.xlfGetCell, 49, cellRef);

【讨论】:

  • 谢谢,这绝对可以替代 IsArray。有没有办法获得数组公式的形状(即 CurrentArray),你知道吗?我需要能够判断,给定两个相邻的单元格,它们都是数组的一部分并且都具有相同的公式,它们是否都是同一个数组的一部分?
  • 我认为你必须选择单元格,然后使用 SELECT.SPECIAL 和 6 来选择当前数组(如按 CTRL+/)。
  • 谢谢 - 我会试试看
猜你喜欢
  • 1970-01-01
  • 2012-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多