Excel vba буфер обмена
Excel vba буфер обмена
Войти
Принципы работы с буфером обмена Windows
Перепост одной статьи с с блога WORDEXPERT, посвященная работе с буфером обмена из VBA. Решил взять себе на заметку после того, как познакомился с этой возможностью в программе VBHTMLMaker. Мне такая возможность показалость удобной — в некоторых случаях (и VBHTMLMaker тому хороший пример) это может быть простым и элегантным решением задачи по преобразованию каких-либо данных, когда затем результат необходимо вставить в тот же Excel, Word или аналогичные программы.
Принципы работы с буфером обмена Windows
Пятница, 8 августа 2008 г.
Эта статья была переведена специально для моего блога компанией AGI Triple в рамках специальной акции.
Статья написана специалистом MS Excel и для тех, кто работает с этой программой. Но общие принципы применимы и для разработчиков макросов под Word. Поэтому я и решил заказать перевод этой статьи и разместить ее в блоге. Надеюсь, она будет полезна вам.
На данной странице описываются некоторые методы, используемые в Visual Basic For Applications (VBA) для копирования данных в буфер обмена Windows, а также для получения данных из него. В VBA вы можете копировать или вставлять лишь текстовые данные.
Для того, чтобы скопировать данные непосредственно из ячейки рабочей таблицы в буфер обмена Windows, необходимо использовать метод COPY объекта Range, например: Range (“A1”).Copy. Однако скопировать в буфер обмена другие данные, такие как переменные, ссылки на ячейки, названия листов и т.д., не так-то просто.
В VBA не существует универсальных функций PutOnClipboard и GetOffClipboard, поэтому нам необходимо их создать, чем мы здесь и займемся. В ходе создания этих функций мы обратим внимание, каким образом VBA взаимодействует с буфером обмена Windows.
Так как данные функции используют переменную типа DataObject, то в вашем проекте VBA должна быть установлена ссылка на объектную библиотеку Microsoft Forms 2.0.
Копирование в буфер обмена
Для того чтобы получить доступ к буферу обмена из VBA, необходимо декларировать промежуточный объект типа DataObject. Если ваша процедура VBA будет работать с буфером обмена, необходимо заявить НОВЫЙ объект DataObject следующим образом:
Dim MyDataObj As New DataObject
Метод SetText переменной DataObject используется для хранения текстовых и числовых значений. Например:
MyDataObj.SetText «This Is A Text String»
Таким образом, содержимому MyDataObj присваивается определенное значение. Для того чтобы скопировать содержимое переменной MyDataObj в буфер обмена Windows, необходимо использовать метод PutInClipboard.
Вставка из буфера обмена
Для вставки содержимого буфера обмена, необходимо вызвать следующий метод:
Таким образом, переменной MyDataObj присваивается содержимое буфера обмена Windows.
Метод GetText является обратным методу SetText. Этот метод возвращает содержимое DataObject в другую переменную. Например:
Dim MyVar As Variant
MyVar = MyDataObj.GetText
Используя вышеперечисленное, мы можем создать в VBA следующие процедуры::
Public Sub PutOnClipboard(Obj As Variant )
Dim MyDataObj As New DataObject
MyDataObj.SetText Format(Obj)
MyDataObj.PutInClipboard
End Sub
Public Function GetOffClipboard() As Variant
Dim MyDataObj As New DataObject
MyDataObj.GetFromClipboard
GetOffClipboard = MyDataObj.GetText()
End Function
Public Sub ClearClipboard()
Dim MyDataObj As New DataObject
MyDataObj.SetText «»
MyDataObj.PutInClipboard
End Sub
Я достаточно часто использую эти процедуры для того, чтобы поместить формулу из активной ячейки в буфер обмена. Это позволяет осуществлять копирование и вставку таким образом, чтобы Excel при этом не изменял ссылки на ячейки. Возможно, будет полезно внести эти процедуры в список команд выпадающего меню правой кнопки мыши.
Sub CopyFormula()
Dim x As New DataObject
x.SetText ActiveCell.Formula
x.PutInClipboard
End Sub
Sub PasteFormula()
On Error Resume Next
Dim x As New DataObject
x.GetFromClipboard
ActiveCell.Formula = x.GetText
End Sub
Очистка буфера обмена
Для полной очистки буфера обмена необходимо осуществить несколько вызовов API:
Declare Function CloseClipboard Lib «user32» () As Long
Declare Function EmptyClipboard Lib «user32» () As Long
Declare Function OpenClipboard Lib «user32» ( ByVal hwnd As Long ) As Long
Sub ClearClipboard()
OpenClipboard 0&
EmptyClipboard
CloseClipboard
End Sub
Excel vba буфер обмена
Войти
Принципы работы с буфером обмена Windows
Перепост одной статьи с с блога WORDEXPERT, посвященная работе с буфером обмена из VBA. Решил взять себе на заметку после того, как познакомился с этой возможностью в программе VBHTMLMaker. Мне такая возможность показалость удобной — в некоторых случаях (и VBHTMLMaker тому хороший пример) это может быть простым и элегантным решением задачи по преобразованию каких-либо данных, когда затем результат необходимо вставить в тот же Excel, Word или аналогичные программы.
Принципы работы с буфером обмена Windows
Пятница, 8 августа 2008 г.
Эта статья была переведена специально для моего блога компанией AGI Triple в рамках специальной акции.
Статья написана специалистом MS Excel и для тех, кто работает с этой программой. Но общие принципы применимы и для разработчиков макросов под Word. Поэтому я и решил заказать перевод этой статьи и разместить ее в блоге. Надеюсь, она будет полезна вам.
На данной странице описываются некоторые методы, используемые в Visual Basic For Applications (VBA) для копирования данных в буфер обмена Windows, а также для получения данных из него. В VBA вы можете копировать или вставлять лишь текстовые данные.
Для того, чтобы скопировать данные непосредственно из ячейки рабочей таблицы в буфер обмена Windows, необходимо использовать метод COPY объекта Range, например: Range (“A1”).Copy. Однако скопировать в буфер обмена другие данные, такие как переменные, ссылки на ячейки, названия листов и т.д., не так-то просто.
В VBA не существует универсальных функций PutOnClipboard и GetOffClipboard, поэтому нам необходимо их создать, чем мы здесь и займемся. В ходе создания этих функций мы обратим внимание, каким образом VBA взаимодействует с буфером обмена Windows.
Так как данные функции используют переменную типа DataObject, то в вашем проекте VBA должна быть установлена ссылка на объектную библиотеку Microsoft Forms 2.0.
Копирование в буфер обмена
Для того чтобы получить доступ к буферу обмена из VBA, необходимо декларировать промежуточный объект типа DataObject. Если ваша процедура VBA будет работать с буфером обмена, необходимо заявить НОВЫЙ объект DataObject следующим образом:
Dim MyDataObj As New DataObject
Метод SetText переменной DataObject используется для хранения текстовых и числовых значений. Например:
MyDataObj.SetText «This Is A Text String»
Таким образом, содержимому MyDataObj присваивается определенное значение. Для того чтобы скопировать содержимое переменной MyDataObj в буфер обмена Windows, необходимо использовать метод PutInClipboard.
Вставка из буфера обмена
Для вставки содержимого буфера обмена, необходимо вызвать следующий метод:
Таким образом, переменной MyDataObj присваивается содержимое буфера обмена Windows.
Метод GetText является обратным методу SetText. Этот метод возвращает содержимое DataObject в другую переменную. Например:
Dim MyVar As Variant
MyVar = MyDataObj.GetText
Используя вышеперечисленное, мы можем создать в VBA следующие процедуры::
Public Sub PutOnClipboard(Obj As Variant )
Dim MyDataObj As New DataObject
MyDataObj.SetText Format(Obj)
MyDataObj.PutInClipboard
End Sub
Public Function GetOffClipboard() As Variant
Dim MyDataObj As New DataObject
MyDataObj.GetFromClipboard
GetOffClipboard = MyDataObj.GetText()
End Function
Public Sub ClearClipboard()
Dim MyDataObj As New DataObject
MyDataObj.SetText «»
MyDataObj.PutInClipboard
End Sub
Я достаточно часто использую эти процедуры для того, чтобы поместить формулу из активной ячейки в буфер обмена. Это позволяет осуществлять копирование и вставку таким образом, чтобы Excel при этом не изменял ссылки на ячейки. Возможно, будет полезно внести эти процедуры в список команд выпадающего меню правой кнопки мыши.
Sub CopyFormula()
Dim x As New DataObject
x.SetText ActiveCell.Formula
x.PutInClipboard
End Sub
Sub PasteFormula()
On Error Resume Next
Dim x As New DataObject
x.GetFromClipboard
ActiveCell.Formula = x.GetText
End Sub
Очистка буфера обмена
Для полной очистки буфера обмена необходимо осуществить несколько вызовов API:
Declare Function CloseClipboard Lib «user32» () As Long
Declare Function EmptyClipboard Lib «user32» () As Long
Declare Function OpenClipboard Lib «user32» ( ByVal hwnd As Long ) As Long
Sub ClearClipboard()
OpenClipboard 0&
EmptyClipboard
CloseClipboard
End Sub
Статьи из блога
Статья написана специалистом MS Excel и для тех, кто работает с этой программой. Но общие принципы применимы и для разработчиков макросов под Word. Поэтому я и решил заказать перевод этой статьи и разместить ее в блоге. Надеюсь, она будет полезна вам.
На данной странице описываются некоторые методы, используемые в Visual Basic For Applications (VBA) для копирования данных в буфер обмена Windows, а также для получения данных из него. В VBA вы можете копировать или вставлять лишь текстовые данные.
Для того, чтобы скопировать данные непосредственно из ячейки рабочей таблицы в буфер обмена Windows, необходимо использовать метод COPY объекта Range, например: Range (“A1”).Copy. Однако скопировать в буфер обмена другие данные, такие как переменные, ссылки на ячейки, названия листов и т.д., не так-то просто.
В VBA не существует универсальных функций PutOnClipboard и GetOffClipboard, поэтому нам необходимо их создать, чем мы здесь и займемся. В ходе создания этих функций мы обратим внимание, каким образом VBA взаимодействует с буфером обмена Windows.
Так как данные функции используют переменную типа DataObject, то в вашем проекте VBA должна быть установлена ссылка на объектную библиотеку Microsoft Forms 2.0.
Копирование в буфер обмена
Для того чтобы получить доступ к буферу обмена из VBA, необходимо декларировать промежуточный объект типа DataObject. Если ваша процедура VBA будет работать с буфером обмена, необходимо заявить НОВЫЙ объект DataObject следующим образом:
Метод SetText переменной DataObject используется для хранения текстовых и числовых значений. Например:
Таким образом, содержимому MyDataObj присваивается определенное значение. Для того чтобы скопировать содержимое переменной MyDataObj в буфер обмена Windows, необходимо использовать метод PutInClipboard.
Вставка из буфера обмена
Для вставки содержимого буфера обмена, необходимо вызвать следующий метод:
Таким образом, переменной MyDataObj присваивается содержимое буфера обмена Windows.
Метод GetText является обратным методу SetText. Этот метод возвращает содержимое DataObject в другую переменную. Например:
Используя вышеперечисленное, мы можем создать в VBA следующие процедуры::
Я достаточно часто использую эти процедуры для того, чтобы поместить формулу из активной ячейки в буфер обмена. Это позволяет осуществлять копирование и вставку таким образом, чтобы Excel при этом не изменял ссылки на ячейки. Возможно, будет полезно внести эти процедуры в список команд выпадающего меню правой кнопки мыши.
Очистка буфера обмена
Для полной очистки буфера обмена необходимо осуществить несколько вызовов API:
Вы можете помочь в развитии сайта, сделав пожертвование:
Или помочь сайту популярной криптовалютой:
BTC Адрес: 1Pi3a4c6sJPbfF2sSYR2noy61DMBkncSTQ
ETH Адрес: 0x7d046a6eaa1bd712f7a6937b042e9eee4998f634
LTC Адрес: LUyT9HtGjtDyLDyEbLJZ8WZWGYUr537qbZ
DOGE Адрес: DENN2ncxBc6CcgY8SbcHGpAF87siBVq4tU
BAT Адрес: 0x7d046a6eaa1bd712f7a6937b042e9eee4998f634
XRP Адрес: rEb8TK3gBgk5auZkwc6sHnwrGVJH8DuaLh Депозит Tag: 105314946
USDT (ERC-20) Адрес: 0x7d046a6eaa1bd712f7a6937b042e9eee4998f634
Яндекс Деньги: 410013576807538
Вебмани (R ещё работает): R140551758553 или Z216149053852
А тут весь список наших разных крипто адресов, может какой добрый человек пожертвует немного монет или токенов — получит плюсик в карму от нас 🙂 Благо Дарим, за любую помощь!