Гость
Map
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Переделать sub в function / 3 сообщений из 3, страница 1 из 1
23.09.2020, 11:07
    #40001568
sf555
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переделать sub в function
Здравствуйте. Есть рабочий код:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Sub pokazat_formulu()
Dim MyFormula As String
Dim RangeToUse As Object, SingleArea As Object, SingleCell As Object

MyFormula = ActiveCell.FormulaLocal

  Set RangeToUse = ActiveCell.DirectPrecedents
  For Each SingleArea In RangeToUse.Areas
    For Each SingleCell In SingleArea
        MyFormula = Replace(MyFormula, CStr(SingleCell.Address(RowAbsolute:=False, ColumnAbsolute:=False)), Round(SingleCell.Value, 2))
    Next SingleCell
  Next SingleArea

ActiveCell(, 2).Value = Mid(MyFormula, 2) & " = " & Round(ActiveCell.Value, 2)
  
End Sub



который делает так, что в соседней ячейке появляется текст формулы с числами. Как переделать этот код в функцию? Попытка сделать так результата не дает:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Public Function Показать_формулу(Ячейка)

Dim MyFormula As String
Dim RangeToUse As Object, SingleArea As Object, SingleCell As Object

MyFormula = Ячейка.FormulaLocal

  Set RangeToUse = Ячейка.DirectPrecedents
  For Each SingleArea In RangeToUse.Areas
    For Each SingleCell In SingleArea
        MyFormula = Replace(MyFormula, CStr(SingleCell.Address(RowAbsolute:=False, ColumnAbsolute:=False)), Round(SingleCell.Value, 2))
    Next SingleCell
  Next SingleArea

Показать_формулу = Mid(MyFormula, 2) & " = " & Round(Ячейка.Value, 2)

End Function
...
Рейтинг: 0 / 0
23.09.2020, 12:32
    #40001616
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переделать sub в function
sf555,

это не так-то просто. DirectPrecedents не работают в UDF. Надо парсить формулу. Если хотите - здесь выкладывал решение: Отобразить в формулах вместо ссылок на ячейки значения ячеек
Чтобы работало как UDF надо найти Function Val_Of_Formula и там после комментария:
Код: vbnet
1.
'записываем значение формулы в ячейку или создаем для неё примечание


запишите:
Код: vbnet
1.
2.
    Val_Of_Formula = sRes
    Exit Function


иначе будет ошибка.
Ну а на листе это будет выглядеть так:
Код: plaintext
=Val_Of_Formula(A1)
...
Рейтинг: 0 / 0
23.09.2020, 13:08
    #40001636
sf555
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переделать sub в function
The_Prist,

ого! Большое спасибо!
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Переделать sub в function / 3 сообщений из 3, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]