Может быть я и "открыл Америку", но всё-таки расскажу, а вдруг кому-нибудь понадобится…
Разбираясь с методами программной работы с буфером обмена, случайно выяснил, что при программном копировании формулы из ячейки листа, в буфере обмена она оказывается записана в английской нотации, т.е. в виде, готовом для применения формулы листа в коде VBA.
Т.е. пусть, к примеру, нам нужно в процедуре VBA выполнить какое-то вычисление, которое достаточно просто выполняется формулами листа. Но для того, чтобы процедура VBA поняла, что мы от неё хотим, необходимо вункцию листа вводить в код в английской нотации, что при сложных формулах вызывает затруднения.
Есть простой метод перевода.
1. В любом модуле книги пишем код:
Sub GetFormula_For_VBA() ' скопировать в буфер обмена формулу из ActiveCell, готовую для вставки в код VBA
With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
.SetText ActiveCell.Formula : .PutInClipboard
End With
End Sub
2. В любой ячейке листа книги пишем и отлаживаем свою формулу.
К примеру, я написАл и отладил в ячейке M2 формулу:
=ЕСЛИ($L2="";"";ВПР($L2;'Узлы СВЯЗИ'!$B:$P;10;0))
3. Выделяем ячейку M2 и запускаем макрос GetFormula_For_VBA
После его работы в буфере обмена окажется формула:
=IF($L2="","",VLOOKUP($L2,'Узлы МВОС'!$B:$P,10,0))
Т.е. произошёл автоматический перевод нотации формулы с РУС на ENG. А такую формулу уже не сложно встроить в код макроса.
Разбираясь с методами программной работы с буфером обмена, случайно выяснил, что при программном копировании формулы из ячейки листа, в буфере обмена она оказывается записана в английской нотации, т.е. в виде, готовом для применения формулы листа в коде VBA.
Т.е. пусть, к примеру, нам нужно в процедуре VBA выполнить какое-то вычисление, которое достаточно просто выполняется формулами листа. Но для того, чтобы процедура VBA поняла, что мы от неё хотим, необходимо вункцию листа вводить в код в английской нотации, что при сложных формулах вызывает затруднения.
Есть простой метод перевода.
1. В любом модуле книги пишем код:
Sub GetFormula_For_VBA() ' скопировать в буфер обмена формулу из ActiveCell, готовую для вставки в код VBA
With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
.SetText ActiveCell.Formula : .PutInClipboard
End With
End Sub
2. В любой ячейке листа книги пишем и отлаживаем свою формулу.
К примеру, я написАл и отладил в ячейке M2 формулу:
=ЕСЛИ($L2="";"";ВПР($L2;'Узлы СВЯЗИ'!$B:$P;10;0))
3. Выделяем ячейку M2 и запускаем макрос GetFormula_For_VBA
После его работы в буфере обмена окажется формула:
=IF($L2="","",VLOOKUP($L2,'Узлы МВОС'!$B:$P,10,0))
Т.е. произошёл автоматический перевод нотации формулы с РУС на ENG. А такую формулу уже не сложно встроить в код макроса.