powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Excel. Определить диапазон формулы массива.
14 сообщений из 14, страница 1 из 1
Excel. Определить диапазон формулы массива.
    #39877481
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть написанная на VBA функция, которая используется в формуле массива - т.е. она принимает некоторые аргументы и возвращает двумерный массив вариантов. Всё пока обычно.

Есть необходимость улучшить и упростить расчёт - однако для этого необходимо определить, в какой именно диапазон (адрес типа "$A$10:$C$20" вполне достаточен) вводится эта формула массива. Это будет влиять на итоги, а заодно позволит избавиться от #Н/Д, если массив-результат меньше этого диапазона.

Пытался вспомнить, видел ли где - не вспомнил. Пытался искать - всё не то...

Если кто помнит решение - ткните пальцем. Или хотя бы от чего плясать.
...
Рейтинг: 0 / 0
Excel. Определить диапазон формулы массива.
    #39877488
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
конкретики мало, может хоть определение самой функции показать, что за параметры там и как вызов происходит
...
Рейтинг: 0 / 0
Excel. Определить диапазон формулы массива.
    #39877493
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Excel. Определить диапазон формулы массива.
    #39877495
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Excel. Определить диапазон формулы массива.
    #39877498
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Excel. Определить диапазон формулы массива.
    #39877517
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,

вроде Application.caller про это - на бегу плохо помню
если только диапазон - должно хватить

попробуй
если не поедет - напиши - вечером поищу скрижали
лет 10 назад где-то что-то использовал, можно поискать...

а если еще "старое значение" в этом месте нужно, то надо по форуму полазить - тогда же мне это надо было и я даже тему заводил.
все прахом в памяти...
...
Рейтинг: 0 / 0
Excel. Определить диапазон формулы массива.
    #39877522
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby,

да, наверно в офисной ветке оно было...
...
Рейтинг: 0 / 0
Excel. Определить диапазон формулы массива.
    #39877529
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby,

точно, для формулы массива -
Debug.Print Application.Caller.Address
...
Рейтинг: 0 / 0
Excel. Определить диапазон формулы массива.
    #39877530
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_Oneконкретики мало, может хоть определение самой функции показать, что за параметры там и как вызов происходитДа чхать на текст функции.

Грубо - есть некая

Код: vbnet
1.
2.
3.
4.
5.
Public Function MyFunc(src As Range) As Variant()
Dim ar As Variant()
' что-то делаем
MyFunc = ar
End Function



Мы на листе выделяем некий диапазон, скажем A10:C20, вводим формулу =MyFunc(A1:B4) и жмём Ctrl-Shift-Enter.

Задача - внутри функции, кодом, получить диапазон "$A$10:$C$20".
...
Рейтинг: 0 / 0
Excel. Определить диапазон формулы массива.
    #39877553
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boobyдля формулы массива -
Debug.Print Application.Caller.AddressСпасибо, оно...

Только почему-то под отладкой оно даёт "Error", а без отладки - нормально возвращает адрес. Странно... но буду смотреть.
...
Рейтинг: 0 / 0
Excel. Определить диапазон формулы массива.
    #39877635
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akinaboobyдля формулы массива -
Debug.Print Application.Caller.AddressСпасибо, оно...

Только почему-то под отладкой оно даёт "Error", а без отладки - нормально возвращает адрес. Странно... но буду смотреть.
под отладкой Vartype(Application.caller) = 10 и Typename(Application.caller) = "Error"
а тебе нужен
Typename(Application.caller) = "Range"
...
Рейтинг: 0 / 0
Excel. Определить диапазон формулы массива.
    #39877652
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby , хуже - нет стабильности. Под отладкой Typename(Application.caller) то "Range", то "Error" - и я всё никак не могу уловить, от чего это зависит.

А в рантайме всё шоколадно. Приходится отлаживаться через debug.pring и msgbox - не совсем удобно, но и не страшно, не впервой.
...
Рейтинг: 0 / 0
Excel. Определить диапазон формулы массива.
    #39877695
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,

msgbox не надо - плохо
...
Рейтинг: 0 / 0
Excel. Определить диапазон формулы массива.
    #39878524
ZVI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina booby , хуже - нет стабильности. Под отладкой Typename(Application.caller) то "Range", то "Error" - и я всё никак не могу уловить, от чего это зависит.

Так как функция ожидает, что Application.Caller имеет тип Range, то и при отладке это нужно обеспечить.
Например, так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Sub Test()
  ' Debugging
  Range("A1:B2").FormulaArray = "=MyFunc(C2:D10)"
End Sub

Public Function MyFunc(src As Range) As Variant()
  If TypeName(Application.Caller) = "Range" Then
    Debug.Print Application.Caller.Address
  Else
    '...
  End If
  
  Dim ar() As Variant
  ' что-то делаем
  MyFunc = ar
  
End Function
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Excel. Определить диапазон формулы массива.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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