2015-06-24 3 views
2

Я использую Excel-DNA для создания UDF в Excel и NetOffice для независимых от автоматизации вызовов автоматизации. Внутри функции макро-типа, я могу использовать, чтобы получить следующую формулу из ячейки:Проверить формулу массива в макро-стиле Excel 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 препятствовать использованию автоматизации в ОДС называет: https://support.microsoft.com/en-us/kb/301443

Итак, есть ли способ, чтобы получить свойства HasArray и CurrentArray через C API, или кто-нибудь знает, хорошо ли (в контексте UDF, объявленного как макро-тип) использовать автоматизацию?

+0

'HasArray' разрешен внутри UDF. Он возвращает правильный результат. 'Функция arr (r As Range): arr = r.HasArray: End Function' действует как UDF. Что обескураживает (и вообще предотвращается) делает _modifications_ в любой другой части «Книги» или «Рабочего листа» из UDF. Обычно вам разрешается вынимать информацию внутри UDF (за некоторыми исключениями). –

+0

Thanks Byron - тестирование на этом с использованием автоматизации показало, что для меня HasArray, похоже, работает и не вызывает никаких проблем, но что CurrentArray может возвращать неправильный ответ при вызове в UDF, возвращая отдельную ячейку, даже если она является частью более крупный массив –

ответ

1

Информационная функция GET.CELL с информацией type_num 49 вернет, является ли ячейка частью массива. Из вашей функции Excel-DNA (макротип):

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

Спасибо, это определенно работает в качестве замены IsArray. Есть ли способ получить форму формулы массива (т. Е. CurrentArray), знаете ли вы? Мне нужно было бы сказать, учитывая две смежные ячейки, которые являются частью массива, и оба имеют одну и ту же формулу, независимо от того, являются ли они частью одного и того же массива? –

+1

Думаю, вам нужно будет выбрать ячейку, затем с помощью SELECT.SPECIAL с 6 выбрать текущий массив (например, нажать CTRL + /). – Govert

+0

Спасибо, я попробую попробовать –

Смежные вопросы