Уважаемые, форумчане! Скажите, пожалуйста, теоретически возможно ли найти синтаксис (код) недостающей функции и вставить (адаптировать) под VBA в excel? Спасибо
Можно конечно! Только не очень понятно, что значит недостающая функция? Если речь про реализацию функций, которые есть в новых версиях, но нет в Вашей - то это делается при помощи написания UDF(пользовательской функции). Но для этого надо уметь писать коды на VBA. В зависимости от того, какую функцию надо реализовать код может быть проще или сложнее.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Дмитрий Щербаков, позвольте обращаться Дмитрий. Дмитрий речь идет о ф-и объединить. Да у меня старенький офис (10) а ф-ия очень помогла бы. Спасибо. Дмитрий, накидайте, пожалуйста ссылок на то как извлечь синтаксис ф-ии. Теоретически могу использовать другой комп где есть эта ф-ия.
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
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Jack Famous, Дмитрий Щербаков, Спасибо. Куда благодарность выслать?. Я так понимаю, что теперь мне надо создать "пустую" функцию и туда просто скопировать код?
Petren, пожалуйста)) благодарности высылать Дмитрию (на его сайте есть кнопка для доната), — я на его коде только "паразитировал" Кроме того, там на сайте полно мегаинформативных обучающе-объясняющих статей, написанных простым языком — рекомендую к ознакомлению
От себя я бы посоветовал прочитать также другую его статью о том, как создать свою надстройку. В таком случае, ваша "библиотека" макросов будет доступна в любой книге
Оффтоп со скрином к нему
Я использую именно этот метод вот уже 2 года, только меню не делаю, а просто вытаскиваю нужные макросы на панель быстрого доступа: На панели быстрого доступа нажать крайнюю правую кнопку "Настроить панель быстрого доступа" (или Файл — Параметры — Панель быстрого доступа) и далее, как на скрине Создастся кнопка макроса со штатным неказистым значком, поменять который можно кнопкой "Изменить" (на скрине есть)
Совсем забыл — и меню и кнопки на панели нужны для макросов, а не для функций))) UDF вызываются также, как и обычные
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄