Страницы: 1 2 След.
RSS
Как подключить подсказку в окно функции. .
 
Хочу поделиться радостью. Препарировал буржуйскую надстройку и наконец увидел как это делается. Ключевой фрагмент Application.MacroOptions. Вот код двух процедур:  
 
Sub AddDcfcFunctions()  
   '  
   'To be added to User Defined section  
   '  
     
   Dim fNames() As String  
   Dim fHelpIds() As Integer  
     
   'Help file  
   Dim sHelpFile As String  
   Dim bGotHelpFileOk As Boolean  
   bGotHelpFileOk = GetHelpFileLocation(sHelpFile, False)  
     
   GetFunctionInfo fNames, fHelpIds  
     
   Dim lb, ub  
   lb = LBound(fHelpIds)  
   ub = UBound(fHelpIds)  
     
   Dim i As Integer  
   For i = lb To ub  
       Application.MacroOptions Macro:=fNames(i, 0), _  
       Description:=fNames(i, 1), _  
       HelpContextID:=fHelpIds(i), HelpFile:=sHelpFile, _  
       Category:=14  
   Next i  
     
     
   'Application.MacroOptions Macro:="SuperFit", _  
   '    Description:="Sums or counts cells based on a specified fill color", _  
   '    HelpContextID:=1100, HelpFile:="c:\tmploc\dcfc_help.chm", _  
   '    Category:=14  
End Sub  
 
Sub GetFunctionInfo(f() As String, ID() As Integer)  
   'Fills f with 0 to n-1, 0 to 1 and helpIds with 0 to n-1  
   '  
   Dim n As Integer  
   n = 9  
   ReDim f(0 To n - 1, 0 To 1) As String  
   ReDim ID(0 To n - 1) As Integer  
     
   'Linear Interp  
   f(0, 0) = "LinearInterp"  
   f(0, 1) = "Given a source data set (X, Y values), uses linear interpolation " & _  
       "to calculate corresponding output values for one or more input values"  
   ID(0) = 1100  
     
   'Spline  
   f(1, 0) = "CubicSpline"  
   f(1, 1) = "Given a source data set (X, Y values), uses cubic spline interpolation " & _  
       "to calculate corresponding output values for one or more input values"  
   ID(1) = 1200  
         
   'FlexSpline  
   f(2, 0) = "FlexSpline"  
   f(2, 1) = "Fits a 'Flexible Spline' curve to a set of source data points, and " & _  
       "then evaluates one or more X values based on the curve.  The shape of the spline can be" & _  
       " controlled by setting the curve slopes at any source point."  
   ID(2) = 1300  
     
   'Polynomial  
   f(3, 0) = "PolyFit"  
   f(3, 1) = "Fits a polynomial curve of specified order to a set of source data points, and " & _  
       "then evaluates one or more X values based on the curve.  Options: weight values of " & _  
       "data points, equation constant"  
   ID(3) = 1400  
     
   'PolyCoef"  
   f(4, 0) = "PolyCoef"  
   f(4, 1) = "Fits a polynomial curve of specified order to a source dataset, and " & _  
       "then returns the Polynomial coefficients.  Options: weight values of " & _  
       "data points, equation constant"  
   ID(4) = 1500  
     
   'RegionFit"  
   f(5, 0) = "RegionFit"  
   f(5, 1) = "Using the dataset points in the surrounding region, fits a polynomial curve " & _  
       "calculate an estimate for each given New_X value.  Options " & _  
       "include: fit order, weight values, data subset size, equation const."  
   ID(5) = 1600  
     
   'MovingAvg"  
   f(6, 0) = "MovingAvg"  
   f(6, 1) = "Performs a moving average filter on a set of data (smooths data).  Returns an array " & _  
       "of averaged points as output - (1) highlight cells where output will be " & _  
       "(2) enter equation (3) press " & _  
       "ctl-shift-enter to receive all output points"  
   ID(6) = 1700  
     
   'MedianFit"  
   f(7, 0) = "MedianFilter"  
   f(7, 1) = "Performs a median filter on a set of data (reduces noise in data).  Returns an array " & _  
       "of points as output - (1) highlight cells where output will be " & _  
       "(2) enter equation (3) press " & _  
       "ctl-shift-enter to receive all output points"  
   ID(7) = 1800  
     
   'gaussianSmooth"  
   f(8, 0) = "GaussianSmooth"  
   f(8, 1) = "Performs a gaussian smoothing filter on a set of data.  Returns an array " & _  
       "of smoothed points as output - (1) highlight cells where output will be " & _  
       "(2) enter equation (3) press " & _  
       "ctl-shift-enter to receive all output points"  
   ID(8) = 1900    
End Sub    
 
Великолепно, теперь мы умеем красиво оформлять наши пользовательские функции. Ура.
 
это так круто - что я даже не понял ничего )
 
Андрей!  
это как справка для UDF  
на каком-то их сайте был еще способ без Sub
 
Dophin, Вам и так формУлисты собираются устроить "тёмную", а Вы ещё приглядываетесь к подсказкам в окно функции...
 
Сделал микропримерчик, все понятно без слов. Смотри выбор функций. Обратите внимание, что появился еще один пользовательский раздел - это из справки
 
Осталось понять как приписать подсказки для переменных. Если кто владеет - поделитесь...
 
Сначала подумал что это помогает описать использующиеся в функции переменные:(  
Не совсем понял:)  
При вставке пользовательских функций - их можно выбрать в разделе  
ОПРЕДЕЛЕННЫЕ ПОЛЬЗОВАТЕЛЕМ, Слэн -? или еще кто-то описывал способ добавления описания функции и без этого шаманства.
 
у уокенбаха этот момент вроде рассмотрен, но я его благополучно пролистал) в понедельник могу посмотреть
 
{quote}{login=The_Prist}{date=13.02.2010 09:21}{thema=}{post}Вот, владейте.{/post}{/quote}  
Неправильная функция - меня не узнала :))
 
Спасибо Дима, мне как раз не хватало для понимания какую DLL брать, я тут вычитал что в любой DLL можно сохранять до 200 значений длиной не более 255 символов. В прилагаемом архиве пустая Dll, которую можно копировать с другим именем и использовать для регистрации функций.
 
Господа, объясните не столь продвинутому программисту на VBA:  
это что, чтобы сделать пояснение к аргументам созданной мною UDF из десятка строчек кода, нужно к ней такую "приблуду" дописывать что ли? Кошмар!  
А если у меня десяток UDF в Personal.xls, то сколько ж это кода в него добавить придётся и сколько он тогда будет "весить"?
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
Alex, ну самый первый пост посмотрите, в нем как раз код цикла для целой группы функций. По такому же принципу можно организовать и с REGISTER()
 
Кстати, касательно комментариев, недавно увидел забавный способ комментировать формулы:  
Допустим есть формула, возвращающая число: =a1+b1  
Прокомментировать можно так: =a1+b1+ч("суммируем а1 и б1")
 
http://www.ozgrid.com/VBA/DesciptionToUDF.htm
 
{quote}{login=Юрий М}{date=13.02.2010 09:08}{thema=}{post}Dophin, Вам и так формУлисты собираются устроить "тёмную", а Вы ещё приглядываетесь к подсказкам в окно функции...{/post}{/quote}  
Опять наговаривает! Мыслей таких не было даже после того, как Dophin на SQL нас маньяками обозвал. А вдруг придется консультироваться по макросам? Ведь вспомнит же :)
 
Чушь какая-то!  
Взял и в своём Personal.xls прописал UDF в категорию "Определенные пользователем"  
Запускаться должно по событию Workbook_Open - Call Set_UDF_notes,    
а сама Set_UDF_notes  расположена в модуле с функциями.  
Первый раз после открытия Ёкселя (когда открывается Personal.xls) ошибки не возникает, но при этом UDF, расположенные в Personal.xls, в категории "Определенные пользователем" описаний не имеют ("Справка недоступна").  
Пытаюсь запустить Set_UDF_notes - никакой реакции, а иногда вообще даёт ошибку, определяемую приложением.  
Решил, что у меня что-то наворочено в Personal.xls  
Спрятал его из XLSTART в архив, создал новый, чистый. Прописал в него часть функций и п/пр Set_UDF_notes, вызываемую по событию Personal.xls Workbook_Open - ни какого эффекта. В открытых книгах формулы описания не имеют.  
При этом, формулы, написанные и прописанные в других книгах точно так же как в Personal.xls, нормально описываются...    
Возникает подозрение, что описываться не хотят формулы, записанные именно в Personal.xls.  
Посмотрите, кто может закрыть свой Ёксель и спрятать временно свой Personal.xls.  
В приложенном примере одни и те же функции одним и тем же кодом прописаны в Personal.xls и в файле "Мои UDF-описания.xls"
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
Во! Сейчас при перезагрузке Ёкселя на попытку при открытии Personal.xls прописать описания UDF было выдано сообщение:  
Метод 'MacroOptions' объекта '_Application' не выполнен  
Ничего не понимаю...  
 
VovaK, а вы пытались прописать описания своих UDF при открытии своего Personal.xls ?  
В других открытых книгах UDF из Personal.xls имеют описания?
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
Alex? А Ваши функции в каком файле? Ну зачем Вам Personal.xls. Этот блок должен быть в том же файле (в том же проекте, если быть точным), где описаны функции. Думаю, если вы делаете надстройку, лучше не пользоваться Personal.xls.
 
А какая разница, в отдельном файле надстройки находятся UDF или в Personal.xls ?  
Мне, например, так удобнее.    
У меня там просто два модуля: Macros_Module Function_Module, зато никаких вопросов про последовательность возникновения и обработки событий Workbook_Open не возникает.
 
Блин! Опять пока вводил, разлогинился.  
В предыдущем посте был я, Alex_ST
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
Alex, если файл не тяжелый выложи личку, я дома у себя на Notebook попробую. Если тяжелый брось в личку VovaK@mail.kz
 
Поправлюсь.  
 
Alex, если файл не тяжелый выложи здесь, я дома у себя на Notebook попробую. Если тяжелый брось в личку VovaK@mail.kz
 
Да я же уже выкладывал 15.02.2010, 11:35 post_99908.zip  
Там два файла:  
Parsonal.xls (естественно, очищенный от всего: только несколько функций и п/пр прописывания их описания в "Определенные пользователем") - не работает: описания не появляются, а иногда вообще вылетает в дебаггер с сообщением "Метод 'MacroOptions' объекта '_Application' не выполнен"  
и    
Мои UDF-описания.xls  - точно тот же код, что и в Parsonal.xls, но РАБОТАЕТ! И описанные там функции имеют описания и в других открываемых книгах...
 
Слушайте, какой там таймаут на разлогинивание на сервере выставили? Не успеваю вводить ответы... Опять разлогинился пока 2 минуты вводил...  
В предыдущем посте был я, Alex_ST
 
Ну прямо издевательство какое-то: видно, что между предыдущими постами прошло 2 минуты, а опять LogOff !!!
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
Алекс, никто ничего не менял. Может Ваши 2 минуты "неправильные"? :-)
 
{quote}{login=Alex_ST}{date=15.02.2010 02:19}{thema=}{post}Н видно, что между предыдущими постами прошло 2 минуты, а опять LogOff !!!{/post}{/quote}  
Между какими 2 минуты?
 
Юрий, ну посмотрите сами:  
- я ввёл ответ в 15.02.2010, 14:15  
заметил, что разлогинился. Естественно, залогинился и    
- ввёл ещё один ответ в 15.02.2010, 14:17    
оказывается, опять разлогинился...  
Так что это не мои 2 минуты, а форумские (правда, если они БилГейтсовские, то это модет быть от нескольких секунд до нескольких десятков минут :-)
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
Все, понял. На работе zip не доступен, посмотрю дома. А разлогинивается возможно при отсутсвии соединения. Такое возможно по погодным условиям, а может и по другим причинам. У меня такое тоже случалось.
 
Алекс, у меня практически вообще не бывает такого, чтобы разлогиниться. Пока не перегружу браузер. Вот при длительном наборе текста бывают проблемы. Так что это на "клиентской" стороне.
Страницы: 1 2 След.
Читают тему
Наверх