Офисное программирование
Добавить в закладки К обложке
- Введение - Страница 1
- Часть IОсноные седения о программироании на VBA - Страница 2
- 1.2. Редактор VBA. Первое знакомство - Страница 7
- 1.3. Изменение порядка выполнения операторов - Страница 9
- Глава 2Объект UserForm - Страница 14
- 2.2. Использование форм - Страница 16
- Глава 3Массивы, процедуры, функции - Страница 20
- 3.2. Работа с различными типами данных - Страница 24
- 3.3. Процедуры и функции VBA - Страница 26
- Глава 4Создание VBA-программ - Страница 31
- 4.2. Элементы управления ComboBox, OptionButton и Frame - Страница 34
- 4.3. Элементы управления MultiPage, ScrollBar, SpinButton[2] - Страница 37
- 4.4. Объект DataObject[3] - Страница 41
- Часть IIПрограммирование на VBA в Word - Страница 44
- 5.2. Форматирование документа - Страница 48
- Глава 6Автоматизация стандартных документов - Страница 52
- 6.2. Создание и автоматическое заполнение бланков стандартных документов - Страница 55
- Часть IIIПрограммирование на VBA в Excel - Страница 58
- 7.2. Использование возможностей VBA при непосредственных расчетах - Страница 63
- 7.3. Финансовые функции - Страница 67
- Глава 8Построение диаграмм средстами VBA - Страница 69
- 8.2. Построение круговых диаграмм и гистограмм - Страница 72
- Глава 9Базы данных в Excel - Страница 73
- 9.2. Конструирование пользовательского интерфейса - Страница 76
- Глава 10Создание собственного головного меню[9] - Страница 78
- Литература - Страница 83
4.4. Объект DataObject[3]
Описание объекта DataObjectЭтот объект не является элементом управления, но участвует в операциях перетаскивания выделенных текстов из одного элемента управления в другой. В нем одновременно могут храниться несколько текстовых данных в разных форматах. Когда в DataObject помещается новый текст с имеющимся в нем форматом, то прежний текст с этим форматом заменяется на новый.
Поведение DataObject похоже на поведение буфера обмена. Однако DataObject существует только в момент работы приложения и исчезает после ее завершения, а данные в буфере обмена при этом не теряются, DataObject может хранить только текстовые данные, а буфер обмена – и графические. С другой стороны, DataObject – настоящий OLE-объект и поддерживает, в отличие от буфера обмена, операции перетаскивания текста.
Текст заносится в DataObject методом SetText, а извлекается оттуда методом GetText:
объект. SetText(StoreData [, format])
и
Строка = объект. GetText([format]),
где объект – объект – владелец метода;
StoreData – текст, который надо запомнить в объекте;
format – это необязательный параметр, задающий «формат» данных (1 соответствует стандартному текстовому формату, а другие числа и строки соответствуют пользовательским форматам).
Если параметр format в вызове SetText явно не указан, то запоминаемому тексту присваивается формат стандартного текста 1. Так как для каждого формата DataObject содержит лишь один текст с этим форматом, то фактически формат играет роль ключа, с помощью которого текст заносится и извлекается из DataObject. Метод GetFormat позволяет узнать, имеется ли в объекте DataObject текст определенного формата:
BooleanVar = объект. GetFormat(format)
Переменная BooleanVar получит значение True, если данные с указанным форматом входят в объект. Объект DataObject может обмениваться данными с буфером обмена посредством методов GetFromClipboard и PutInClipboard. Оператор
String = объект. GetFromClipboard()
помещает содержимое буфера обмена в DataObject, а вызов
объект. PutInClipboard
переносит данные из DataObject, имеющие текстовый формат 1, в буфер обмена.
Пример 28. Форма содержит два текстовых поля, в одном из них программно отображается текст, который при помощи методов объекта dataobject необходимо перенести (перекопировать) во второе текстовое поле. Данное действие происходит после нажатия на кнопку «Копировать», причем все производимые действия программы отображаются в соответствующей метке на форме (рис. 58).

Рис. 58. Форма примера 28 в режиме конструктора и в рабочем режиме
Технология выполнения
1. Активизируйте приложение Word и сохраните документ.
2. Перейдите в редактор VBA и создайте форму (рис. 58).
3. Пропишите при инициализации окна в поле TextBox1 текстовую информацию и проинициализируйте глобальные переменные:
Public NewData As DataObject
Public NumClick As Integer
Private Sub UserForm_Initialize()
Set NewData = New DataObject 'инициализация объекта
NumClick = 0
'число щелчков
TextBox1.Text = "Пример переноса данных с помощью
DataObject»
End Sub
4. При последовательных щелчках по командной кнопке будут происходить последовательно действия, описанные в программе:
Private Sub CommandButton1_Click()
Select Case NumClick
Case 0
NewData.SetText TextBox1.Text
Label1.Caption = «Из первого поля в DataObject»
Case 1
NewData.PutInClipboard
Label1.Caption = «Из DataObject в буфер обмена»
Case 2
TextBox2.Paste
Label1.Caption = «Из буфера обмена во второе поле»
End Select
NumClick = NumClick + 1
If NumClick = 3 Then NumClick = 0
End Sub
5. Откомпилируйте программу и запустите форму на выполнение.
Примечание. Перенос информации из одного поля в другое можно осуществить и через буфер обмена, минуя DataObject. Для копирования данных из поля ввода в буфер обмена можно использовать метод Сору.
Перемещение объектов. Реализация технологии DragAndDropДля копирования данных из поля ввода в буфер обмена обычно вызывают метод Сору. Однако при организации интерфейса в диалоговых формах полезно предоставить пользователю возможность работы с техникой DragAndDrop (Переместить и Опустить). Некоторый объект захватывается мышью, перетаскивается к другому целевому объекту и отпускается, изменяя при этом свойства целевого объекта. Типичным примером является возможность перетаскивать элемент из одного списка в другой. Другой пример – перетаскивание писем и опускание их в почтовый ящик. Важным элементом этой техники является изменение внешнего вида курсора. Захват объекта происходит при подведении курсора к объекту и нажатии левой кнопки мыши. В этот момент курсор меняет внешнюю форму. Когда происходит перемещение мыши, то в тех областях, где расположен целевой объект, курсор снова меняет форму, показывая, что цель достигнута. Если в этот момент отпустить левую кнопку мыши, то операция перемещения заканчивается успешно. Если отпустить кнопку мыши в других областях, то это приведет к неудаче. Объект DataObject и его метод StartDrag являются частью этой технологии.