Математический форум Math Help Planet
Обсуждение и решение задач по математике, физике, химии, экономике Теоретический раздел |
Часовой пояс: UTC + 3 часа [ Летнее время ] |
новый онлайн-сервис число, сумма и дата прописью |
|
Часовой пояс: UTC + 3 часа [ Летнее время ] |
Страница 1 из 1 |
[ Сообщений: 10 ] |
|
Автор | Сообщение | |
---|---|---|
Exzellenz |
|
|
Проблема такая: я написал на VBA несколько полезных функций (модуль Functions) и процедур (модуль Subroutines) и запомнил их на диск под именем Excerllenz.xlam. Эта папка открывается автоматически, когда я стартую Excel. Теперь я могу использовать все мои функции в любой другой папке и в любой таблице (функции объявлены как public), а вот с процедурами так не выходит, хотя они тоже объявлены как public. приходится копировать текст процедур в каждую рабочую папку, чтобы можно было их вызвать. Это очень неудобно. Что делать? |
||
Вернуться к началу | ||
Pirinchily |
|
|
Exzellenz писал(а): Эта папка открывается автоматически, когда я стартую Excel О какой папке идет реч? О XLSTART или другой? А Office пакет какая версия? |
||
Вернуться к началу | ||
Exzellenz |
|
|
Версия MS Ofiice Professional 2016
Папка называется My_Functions.xlam. Я ее создал давно, как я это делал - не помню. Кажется, это скомпилированные программы. Но тексты этих программ я всегда вижу в окне VBA и могу дополнять новыми программами и запоминать н файле My_Funktions.xlam |
||
Вернуться к началу | ||
michel |
|
|
Exzellenz писал(а): а вот с процедурами так не выходит, хотя они тоже объявлены как public. А что мешает их оформить как функции? |
||
Вернуться к началу | ||
Exzellenz |
|
|
Функция возвращает только одно значение в ту клетку, из которой она вызвана (или массив значений в односвязную предварительно маркированную область таблицы)
Из функции нельзя записывать инфу в произвольные клетки таблицы. |
||
Вернуться к началу | ||
michel |
|
|
Exzellenz писал(а): Функция возвращает только одно значение в ту клетку, из которой она вызвана (или массив значений в односвязную предварительно маркированную область таблицы) А разве трудно выделить достаточно большую область таблицы (чтобы её задать под результат работы функции как массив), чтобы туда попали все нужные ячейки, значения которых надо изменить? |
||
Вернуться к началу | ||
Exzellenz |
|
|
Вижу, придется мне излагать постановку задачи с самого начала. Я надеялся этой тягомотины избежать.
Итак, задача состоит в том, чтобы аппроксимировать экспериментальные точки теоретической кривой, зависящей от нескольких параметров, которые входят в уравнение нелинейно. Теоретическое уравнение в разных задачах разное. Я решал задачу следующим образом. В Excel создавал таблицу с экспериментальными значениями аргумента и функции; третья колонка – значения функции, вычисленные по формуле; четвертая колонка – квадраты разностей [math](Theory-Experiment)^{2}[/math]; еще в одной клетке – невязка (корень из среднего значения квадратов). И, наконец, клетки с параметрами уравнения. Затем я написал процедуру, которая варьирует параметры в таблице таким образом, чтобы минимизировать невязку. Процедура ничего не знает о том, как выглядит теоретическое уравнение (оно всякий раз по-новому задается в таблице), где находятся параметры, где находится невязка, поэтому соответствующие клетки нужно маркировать перед вызовом процедуры. Процедура записывает в нужные места таблицы новые значения коэффициентов и считывает значение невязки до тех пор, пока невязка не достигнет минимума. Функция на такие подвиги не способна. |
||
Вернуться к началу | ||
Exzellenz |
|
|
...
|
||
Вернуться к началу | ||
Exzellenz |
|
|
Эврика!
Оказалось, что, хотя процедуры из собственных надстроек Add-In не видны в стандартном окне вызова макросов(Alt+F8), если набрать в этом окне имя процедуры, то она нормально вызывается. Чтобы не запоминать имена всех процедур, достаточно в панели быстрого доступа создать кнопку, вызывающую нужный макрос. |
||
Вернуться к началу | ||
Exzellenz |
|
|
Еще один вопрос, теперь не по процедурам, а по функциям.
В Excel есть встроенные матричные функции (например, MINV), которые возвращают в таблицу не одно значение, а массив. Чтобы вывзать такую функцию, нужно маркировать в таблице правильное число клеток, вписать в активную клетку формулу, а потом задействовать клавиши Control, Schift и Enter. Я написал собственную функцию, которая возвращает одномерный массив значений, но она работает не совсем так, как хотелось бы. В частности, она возвращает правильные значения только в строку, а в столбец не хочет. В этой связи у меня вопросы: 1) Как сделать, чтобы функция возвращала значения как в строку, так и в столбец (в соответствии с тем, что маркировано - строка или столбец)? 2) Что делать, если размер возвращаемого массива заранее неизвестен? Что маркировать? |
||
Вернуться к началу | ||
[ Сообщений: 10 ] |
Часовой пояс: UTC + 3 часа [ Летнее время ] |
Кто сейчас на конференции |
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5 |
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения |