Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.10.2009, 19:11   #1
Elfix
Пользователь
 
Регистрация: 28.02.2007
Сообщений: 18
По умолчанию Пользовательские функции в Excel

Добрый день!

Написал на VBA несколько пользовательских функций. Оформил в виде надстройки Excel. Возникло два вопроса.

1. При открытии документа на чужом компьютере функции не распознаются. Можно ли как-то сохранить результаты функций как значения, чтобы их можно было спокойно просматривать на чужих машинах? Может быть есть возможность получить список всех доступных пользовательских функций и пробежаться по всем ячейкам, которые их содержат, попутно пересохраняя их значения?

2. Можно ли каким-нибудь образом подключить описание функции - что-то типа справочной информации. Есть ли в Office какие-нибудь средства для этого?

Надеюсь на скорый и грамотный ответ...
Elfix вне форума Ответить с цитированием
Старый 26.10.2009, 21:14   #2
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте Elfix.
1. "Можно ли как-то сохранить результаты функций..." - да, копировать + специальная вставка Значения. "...список .. пользовательских ... функций ... пересохраняя их значения" - "пробежавшись" по диаппазону листа, можно выполнить "пересохранение", но "список" имен пользовательских функций должен быть известен.
2 "Можно ли каким-нибудь образом..." - каким-нибудь конечно же можно, но MS Office не имеет средств для этого.
Евгений.
Teslenko_EA вне форума Ответить с цитированием
Старый 26.10.2009, 21:28   #3
Elfix
Пользователь
 
Регистрация: 28.02.2007
Сообщений: 18
По умолчанию

Имеется ввиду программное пересохранение...
Пользователи обычно забывают сохранять результаты функций как значения и высылают друг другу файлы со своими пользовательскими функциями.
Elfix вне форума Ответить с цитированием
Старый 26.10.2009, 21:30   #4
Elfix
Пользователь
 
Регистрация: 28.02.2007
Сообщений: 18
По умолчанию

Если список пользовательских функций неизвестен, как их получить?
Elfix вне форума Ответить с цитированием
Старый 26.10.2009, 21:43   #5
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

программное может выглядеть так:
Код:
    Cells.Copy
    Cells.PasteSpecial Paste:=xlPasteValues
а выполнение команд можно "повесить" на закрытие книги
Код:
Sub Workbook_BeforeClose(Cancel As Boolean)
   ....
End Sub
но при отправке документа непосредственно из Excel эта "защита" не спасет.
"...как их получить" - обратиться к Администратору или к тому человеку который их устанавливал.
Евгений.
Teslenko_EA вне форума Ответить с цитированием
Старый 26.10.2009, 22:34   #6
Elfix
Пользователь
 
Регистрация: 28.02.2007
Сообщений: 18
По умолчанию

Да я сам их писал и устанавливал...
Считаю вопрос не раскрыт...
Elfix вне форума Ответить с цитированием
Старый 26.10.2009, 23:14   #7
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Плохо конечно, что Вы не раскрыли вопрос, закрытый сложнее объяснять
да еще парадокс (или проблемы с памятью) "список пользовательских функций неизвестен" - "Да я сам их писал и устанавливал"
Если все же удастся вспомнить или посмотреть имена пользовательских функций, можете воспользоваться подобной процедурой:
Код:
Sub toValue()
Dim o As Object, s$
For Each o In Range("A1:w1000") 'Cells 'задайте требуемый диаппазон
    s = o.Formula
    If Left(s, 1) = "=" Then
        s = Mid(s, 2, InStr(2, s, "(") - 2)
        Select Case s
        Case "функция1", "функция2", "функция3" '"список" используемых функций
            o.Formula = o.Value
        End Select
    End If
Next
End Sub
Евгений.
Teslenko_EA вне форума Ответить с цитированием
Старый 26.10.2009, 23:16   #8
Elfix
Пользователь
 
Регистрация: 28.02.2007
Сообщений: 18
По умолчанию

Немного поэкспериментировав все таки установил описание к файлу справки.

Создал макрос, в списке макросов нажал параметры, в поле описание ввел текст описания макроса. Далее жму изменить и заменяю Sub на Public Function, т. е. подменяю процедуру функцией.

Жму в мастер функций и вижу свое описание в пользовательских функциях. Как бы такое сделать программно? Порылся в гугле, нашел метод

Код:
Application.MacroOptions Macro:="MyTestFunction", Description:="Описание моей тестовой функции"
Но он не работает...
Elfix вне форума Ответить с цитированием
Старый 26.10.2009, 23:26   #9
Elfix
Пользователь
 
Регистрация: 28.02.2007
Сообщений: 18
По умолчанию

Цитата:
Если все же удастся вспомнить или посмотреть имена пользовательских функций, можете воспользоваться подобной процедурой:
Поставим вопрос по-другому. Предположим, что пользовательские функции пишу не только я, но и сотни других разработчиков, а пользователи подключают их одни за другими.

Моя задача сохранить как значение результаты всех функций, которые являются пользовательскими, т. е. лежат в категории Определенные пользователем. Это не проблемы с моей памятью, это естественная потребность программного получения списка доступных методов. Не понимаю, что здесь для Вас, Евгений, является парадоксальным?
Elfix вне форума Ответить с цитированием
Старый 27.10.2009, 04:41   #10
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

А Вы (все) не используйте надстройку, а все пользовательские функции поместите в программный модуль. И вопросов не будет.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как разорвать ЭТИ связи и удалить пользовательские функции StasSv Microsoft Office Excel 3 25.06.2009 17:41
* Пользовательские процедуры и функции DJ Kost Помощь студентам 2 17.12.2008 16:55
Формулы и функции Excel Николя Microsoft Office Excel 3 15.02.2008 04:21