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

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

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

Кстати, при таком подходе было-бы важно прочитать размер выделенного диапазона внутри вызова функции без явной передачи его в качестве параметра. Уже сталивался прежде, но не решил. Кто-нибудь так делал?
...
Рейтинг: 0 / 0
Как вернуть таблицу результатом пользовательской функции excel vba?
    #37528972
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LTEКстати, при таком подходе было-бы важно прочитать размер выделенного диапазона внутри вызова функции без явной передачи его в качестве параметра. Уже сталивался прежде, но не решил. Кто-нибудь так делал?Для этого надо:
1) Получить размер области, которую следует выделить.
Это несложно - вызываем функцию программно и через UBOUND/LBOUND узнаём размер массива по каждому из измерений.
2) Выделить область требуемого размера.
А вот тут грабли - из пользовательской функции, выполняемой через формулу на листе, такая операция недоступна.
...
Рейтинг: 0 / 0
Как вернуть таблицу результатом пользовательской функции excel vba?
    #37531361
LTE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LTE
Гость
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
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Как вернуть таблицу результатом пользовательской функции excel vba?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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