Передача любой информации между приложениями VBA с использованием буфера обмена

положить текст в буфер обмена VBAКак раз тогда, когда я подумал, что я закончил с моей последней парой советов и приемов VBA

Я обнаружил еще одну по-настоящему классную технику, которую каждый может использовать для простой передачи информации между двумя приложениями, которые используют VBA в качестве внутреннего языка сценариев.

Отличительной особенностью VBA является то, что он предоставляет вам множество функций и инструментов.

которые обычно являются частью приложений VB, хотя и в несколько разбавленной версии.

Одна из самых неприятных частей работы с VBA в конкретных приложениях заключается в том, что не всегда легко заставить два приложения «общаться» друг с другом. Это связано с тем, что все используемые вами переменные доступны только в рамках самого приложения, а не из любого места на компьютере.

С учетом сказанного, существуют способы передачи информации

между приложениями на основе VBA, такими как Word или Excel. Во многих случаях, даже в профессиональной среде, программисты прибегают к обмену данными между приложениями с помощью файлов данных. Это может работать, но оно вносит элемент потенциального вмешательства или ошибки — например, удаление или изменение этих файлов — чтобы испортить работу.

Еще один подход, который вы можете использовать для очень быстрой передачи информации между приложениями, — это передача данных в буфер обмена, а затем чтение этой информации из другого приложения.

Передача информации с помощью буфера обмена

В этом примере я покажу вам, как передавать три фрагмента текстовой информации — значения внутри 3 текстовых полей — непосредственно в электронную таблицу Excel, которую запускает макрос Word.

Начальная настройка показана ниже. Это документ Word, в котором я переключился в режим разработки и создал 3 метки и 3 текстовых поля, чтобы пользователь мог вводить информацию. При нажатии на кнопку «Отправить» запускается код передачи данных.
положить текст в буфер обмена VBA
Дважды щелкните новую кнопку, созданную вами в режиме разработки, чтобы перейти на экран VB Editor. Первое, что вам нужно сделать, это добавить ссылку, которая дает вам доступ к системному буферу обмена. Нажмите на Инструменты — Ссылки.
буфер обмена VBA
Прокрутите список литературы и выберите «Библиотека объектов Microsoft Forms 2.0». После того, как вы нажмете Okay, ваш сеанс редактирования VB теперь будет иметь доступ к методам, которые позволяют вам читать или писать из буфера обмена.

буфер обмена VBA

Это именно то, что мы собираемся сделать сейчас. В функции для кнопки «Отправить» я ввел следующий код.

Dim strClipText As DataObject
Dim strInputText As String
Dim errCode As Integer
Set strClipText = New DataObject
strInputText = ThisDocument.txtBox1.Value  ""  ThisDocument.txtBox2.Value  ""  ThisDocument.txtBox3.Value
strClipText.SetText strInputText
strClipText.PutInClipboard
'Установите objWB = objExcel.Workbooks.Open ("c: /temp/MyExcelFile.xlsm")
errCode = Shell ("C: \ Program Files (x86) \ Microsoft Office \ Office12 \ excel.exe c: /temp/MyExcelFile.xlsm")

[/ NOEDIT]

Смотри как это легко? Объект данных strClipText — это объект буфера обмена, которым вы можете манипулировать. Во-первых, прочитайте все значения полей в единую строковую переменную, где каждое поле данных будет разделено запятой или любым другим, что вам подходит.

Затем вам нужно будет создать файл Excel, который вы открываете в командной оболочке выше. В Excel вы захотите добавить ту же ссылку в «Библиотеку объектов Microsoft Forms 2.0», а затем в функцию Workbook.Open () вы можете запустить следующий скрипт.

Dim msObj As MSForms.DataObject
Dim strText As String
Dim strResult () As String
Dim intArrayCount As Integer
Dim x As Integer
Установить msObj = новый MSForms.DataObject
msObj.GetFromClipboard
strText = msObj.GetText
strResult () = Split (strText, ",")
intArrayCount = Application.CountA (strResult)
Для x = 0 Для intArrayCount - 1
ThisWorkbook.Sheets ("Sheet1"). Ячейки (x + 1, 2) .Value = strResult (x)
следующий

[/ NOEDIT]

Опять же, когда вы проходите через это, это простой и очень быстрый скрипт. Он создает объект MSForms, получает самые последние данные из буфера обмена и помещает их в строковую переменную. Затем он разбивает эту единственную длинную строковую переменную по любому разделителю, который вы использовали, на массив отдельных строк, и, наконец, проходит через массив (CountA дает вам длину массива) и выводит каждое значение на лист в столбце 2.

Вот окончательные результаты.
положить текст в буфер обмена VBA
Теперь, проявив немного творческого подхода, вы можете использовать эту технику для запуска любого приложения на основе VBA и «вставки» в него информации.

Вы всегда можете сделать то же самое, используя справочную библиотеку Excel, но в этом случае вы будете молча открывать файл Excel и манипулировать данными внутри этого файла. В приведенном выше случае вы буквально открываете приложение Excel и отображаете файл, а оставшаяся часть работы позволяет запускать макрос в Excel.

Это наиболее полезно, когда есть другие приложения, такие как многие приложения интерфейса оператора на многих производственных объектах, которые основаны на VBA, но могут не иметь этих библиотек, доступных для тесной связи двух приложений. Использование буфера обмена в автоматическом режиме, как это быстро, легко и выполняет свою работу.

Попробуйте приведенные выше сценарии и дайте нам знать, как они работают в вашей системе. Вы должны были настроить это? У вас есть предложения, как сделать код еще лучше? Поделитесь своими мыслями в разделе комментариев ниже.

Кредит изображения: Изображение Передачи Файла через Shutterstock

Ссылка на основную публикацию
Adblock
detector