VBA: найти и вставить синтаксис функции, альтернатива отсутствующей функции
Пользователь
Сообщений: Регистрация: 11.10.2017
04.04.2018 14:33:50
Уважаемые, форумчане! Скажите, пожалуйста, теоретически возможно ли найти синтаксис (код) недостающей функции и вставить (адаптировать) под VBA в excel? Спасибо
Пользователь
Сообщений: Регистрация: 15.09.2012
Профессиональная разработка приложений для MS Office
04.04.2018 14:37:04
Можно конечно! Только не очень понятно, что значит недостающая функция? Если речь про реализацию функций, которые есть в новых версиях, но нет в Вашей - то это делается при помощи написания UDF(пользовательской функции). Но для этого надо уметь писать коды на VBA. В зависимости от того, какую функцию надо реализовать код может быть проще или сложнее.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пользователь
Сообщений: Регистрация: 11.10.2017
04.04.2018 14:42:57
, позвольте обращаться Дмитрий. Дмитрий речь идет о ф-и объединить. Да у меня старенький офис (10) а ф-ия очень помогла бы. Спасибо. Дмитрий, накидайте, пожалуйста ссылок на то как извлечь синтаксис ф-ии. Теоретически могу использовать другой комп где есть эта ф-ия.
Пользователь
Сообщений: Регистрация: 15.09.2012
Профессиональная разработка приложений для MS Office
А я вроде как должен додумать, что именно Вы и под этим подразумеваете? Функция для объединения всех аргументов с разделителем? В общем вот Вам ссылки - извлекайте что-то там из этого:
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Option Explicit
'Функция по мотивам СцепитьМного (для несмежных диапазонов) от Дмитрия Щербакова
'===================================================================================================================================================================================================
Public Function PRDX_Merge(WF_rng As Range, Optional WF_delim As String = "—", Optional WF_uniq As Boolean = False, Optional WF_NoDash As Boolean = True) As String
Dim WF_area As Range
Dim WF_arr
Dim WF_lr&, WF_lc&
Dim WF_temp$
On Error GoTo er
For Each WF_area In WF_rng.Areas
WF_arr = WF_area.Value
If Not IsArray(WF_arr) Then
ReDim WF_arr(1 To 1, 1 To 1)
WF_arr(1, 1) = WF_area.Value
End If
For WF_lc = 1 To UBound(WF_arr, 2)
For WF_lr = 1 To UBound(WF_arr, 1)
If (Len(WF_arr(WF_lr, WF_lc)) = 0) Or (WF_NoDash = True And WF_arr(WF_lr, WF_lc) = Chr(151)) Then GoTo nx:
WF_temp = WF_temp & WF_delim & WF_arr(WF_lr, WF_lc)
nx:
Next WF_lr
Next WF_lc
Next WF_area
If Len(WF_temp) Then
WF_temp = Mid(WF_temp, Len(WF_delim) + 1)
End If
If WF_uniq = True Then
Dim oDict As Object, sTmpStr
Set oDict = CreateObject("Scripting.Dictionary")
sTmpStr = Split(WF_temp, WF_delim)
On Error Resume Next
For WF_lr = LBound(sTmpStr) To UBound(sTmpStr)
oDict.Add sTmpStr(WF_lr), sTmpStr(WF_lr)
Next WF_lr
WF_temp = ""
sTmpStr = oDict.Keys
For WF_lr = LBound(sTmpStr) To UBound(sTmpStr)
WF_temp = WF_temp & IIf(WF_temp <> "", WF_delim, "") & sTmpStr(WF_lr)
Next WF_lr
End If
PRDX_Merge = WF_temp
GoTo fin
er:
PRDX_Merge = ""
fin:
On Error GoTo 0
End Function
спрашивайте, если что
Изменено: - 04.04.2018 15:05:12
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел)
Пользователь
Сообщений: Регистрация: 11.10.2017
04.04.2018 15:06:49
Jack Famous, , Спасибо. Куда благодарность выслать?. Я так понимаю, что теперь мне надо создать "пустую" функцию и туда просто скопировать код?
Petren, пожалуйста)) благодарности высылать Дмитрию (на его сайте есть кнопка для доната), — я на его коде только "паразитировал" Кроме того, там на сайте полно мегаинформативных обучающе-объясняющих статей, написанных простым языком — рекомендую к ознакомлению
От себя я бы посоветовал прочитать также другую его статью о том, . В таком случае, ваша "библиотека" макросов будет доступна в любой книге
Оффтоп со скрином к нему
Я использую именно этот метод вот уже 2 года, только меню не делаю, а просто вытаскиваю нужные макросы на панель быстрого доступа: На панели быстрого доступа нажать крайнюю правую кнопку "Настроить панель быстрого доступа" (или Файл — Параметры — Панель быстрого доступа) и далее, как на скрине Создастся кнопка макроса со штатным неказистым значком, поменять который можно кнопкой "Изменить" (на скрине есть)
Совсем забыл — и меню и кнопки на панели нужны для макросов, а не для функций))) UDF вызываются также, как и обычные