Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Как вернуть таблицу результатом пользовательской функции excel vba? / 5 сообщений из 5, страница 1 из 1
16.11.2011, 10:45
    #37528691
LTE
LTE
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вернуть таблицу результатом пользовательской функции excel vba?
Приветствую!
Есть набор vba-макросов в рабочей книге excel.
Одна из функций должна в качестве результата вернуть таблицу.
То-есть функция находится в ячейке, а таблица-результат её выполнения выводится в несколько ячеек - в саму ячейку с функцией и в близлежащие ячейки (направо и вниз) до формирования полноценной таблицы на рабочем листе. Пробовал подобрать символы форматирования таблицы, но в результате экспериментов пришёл к выводу, что выйти за пределы одной ячейки таким образом не удастся.
Кто сталкивался с решением такой задачи?
...
Рейтинг: 0 / 0
16.11.2011, 11:04
    #37528727
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вернуть таблицу результатом пользовательской функции excel vba?
См.
...
Рейтинг: 0 / 0
16.11.2011, 11:58
    #37528842
LTE
LTE
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вернуть таблицу результатом пользовательской функции excel vba?
Akina,

Замечательный вариант, как раз то, что нужно.
Спасибо!

Озвучу, если кому пригодится. Результат функции можно распределить на диапазон ячеек. то-есть: выделяем диапазон, вводим формулу и волшебной комбинацией Ctrl-Shift-Enter распределяем результат функции на данный диапазон. Результат функции должен возвращаться в виде массива. Вобщем, учимся пользоваться excel в качестве оператора таблиц))

Кстати, при таком подходе было-бы важно прочитать размер выделенного диапазона внутри вызова функции без явной передачи его в качестве параметра. Уже сталивался прежде, но не решил. Кто-нибудь так делал?
...
Рейтинг: 0 / 0
16.11.2011, 12:46
    #37528972
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вернуть таблицу результатом пользовательской функции excel vba?
LTEКстати, при таком подходе было-бы важно прочитать размер выделенного диапазона внутри вызова функции без явной передачи его в качестве параметра. Уже сталивался прежде, но не решил. Кто-нибудь так делал?Для этого надо:
1) Получить размер области, которую следует выделить.
Это несложно - вызываем функцию программно и через UBOUND/LBOUND узнаём размер массива по каждому из измерений.
2) Выделить область требуемого размера.
А вот тут грабли - из пользовательской функции, выполняемой через формулу на листе, такая операция недоступна.
...
Рейтинг: 0 / 0
17.11.2011, 13:13
    #37531361
LTE
LTE
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вернуть таблицу результатом пользовательской функции excel vba?
AkinaLTEКстати, при таком подходе было-бы важно прочитать размер выделенного диапазона внутри вызова функции без явной передачи его в качестве параметра. Уже сталивался прежде, но не решил. Кто-нибудь так делал?Для этого надо:
1) Получить размер области, которую следует выделить.
Это несложно - вызываем функцию программно и через UBOUND/LBOUND узнаём размер массива по каждому из измерений.
2) Выделить область требуемого размера.
А вот тут грабли - из пользовательской функции, выполняемой через формулу на листе, такая операция недоступна.

Я понял, но имел ввиду наоборот. Вопрос стоял лишь в доступе к размерам выделенной пользователем области. Свойства Selection.rows.count и Selection.columns.count.

Ваш вариант, если я правильно понял, был для расширения диапазона вывода массива в рабочем листе, если результирующая таблица имеет большее измерение, чем область на рабочем листе.

Получилась функция, размазывающая таблицу из запроса в access по выделенной области рабочего листа.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
Function ReturnArrayOnQuery(Query As String) As Variant
 Dim cnn As ADODB.Connection, rs As ADODB.Recordset, Count, Count2 As Integer
 Dim Arr() As String
  
 Set cnn = New ADODB.Connection
 Set rs = New ADODB.Recordset
 
 On Error GoTo KillConn
 cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + PathToDB + ";"
 Set rs.ActiveConnection = cnn
 rs.Open Query, cnn, adOpenStatic, adLockOptimistic, adCmdText

 ReDim Arr( 1  To Selection.Rows.Count,  1  To Selection.Columns.Count)
 On Error GoTo KillArr
 
 Count =  0 
 Do While Count < Selection.Rows.Count
  Count2 =  1 
  Count = Count +  1 
  Do While Selection.Columns.Count >= Count2
   If (Count2 <= rs.Fields.Count) And Not rs.EOF Then
    Arr(Count, Count2) = rs.Fields.Item(Count2 -  1 )
   Else
    Arr(Count, Count2) = "-"
   End If
   Count2 = Count2 +  1 
  Loop
  If Not rs.EOF Then rs.MoveNext
 Loop
 
ReturnArrayOnQuery = Arr
KillArr:
 Erase Arr
KillConn:
 rs.Close
 cnn.Close
End Function
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Как вернуть таблицу результатом пользовательской функции excel vba? / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]