Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / копирование с помощью vba / 25 сообщений из 55, страница 1 из 3
14.04.2017, 12:25
    #39438620
Tauri
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
копирование с помощью vba
Здравствуйте.
Подскажите, пожалуйста, как скопировать в буфер обмена значение поля в форме с помощью vba?
...
Рейтинг: 0 / 0
14.04.2017, 12:48
    #39438640
копирование с помощью vba
Попробуйте RunCommand acCmdCopy
А вообщев Аксе работа с буфером, это несколько системных API функций.
...
Рейтинг: 0 / 0
14.04.2017, 13:10
    #39438664
Tauri
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
копирование с помощью vba
Анатолий ( Киев ),

Я ошибся. Скопировать в буфер обмена надо не значение поля, а значение переменной в процедуре vba.

Dim fio As String
fio = "клиент " & Me![Поле1] & ... и т.д.

Что делать?
...
Рейтинг: 0 / 0
14.04.2017, 13:15
    #39438668
__Michelle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
копирование с помощью vba
Tauri,

Значит, присвойте предварительно полю значение переменной.
И копируйте в буфер значение поля.
Тоже вариант.)))
...
Рейтинг: 0 / 0
14.04.2017, 13:22
    #39438675
Tauri
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
копирование с помощью vba
__Michelle,

Я думал об этом: добавить скрытое поле в форму и присваивать ему значение переменной.

1 DoCmd.GoToControl "скрытое поле" - как?
2 DoCmd.RunCommand acCmdCopy
...
Рейтинг: 0 / 0
14.04.2017, 13:30
    #39438683
AndrF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
копирование с помощью vba
...
Рейтинг: 0 / 0
14.04.2017, 13:35
    #39438688
Tauri
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
копирование с помощью vba
__Michelle,

В процедуре

DoCmd.GoToControl "..."
DoCmd.RunCommand acCmdCopy

Синтаксис DoCmd.GoToControl "..." возможен если поле не скрыто (т.е. вывод на экран=да). А у меня поле не выводится на экран.

Поэтому надо искать способ копировать в буфер не значение поля, а значение самой переменной.

Что делать?
...
Рейтинг: 0 / 0
14.04.2017, 13:42
    #39438697
AndrF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
копирование с помощью vba
Tauri__Michelle,
Что делать?

Ссылка дана выше.
...
Рейтинг: 0 / 0
14.04.2017, 13:44
    #39438700
Tauri
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
копирование с помощью vba
AndrF,

Т.е. эта процедура копирует значение переменной strTest в буфер обмена?

Dim d As DataObject

Public Sub PutInCb()
Dim strTest As String

strTest = "Test!"

Set d = New DataObject

d.SetText strTest
d.PutInClipboard
End Sub
...
Рейтинг: 0 / 0
14.04.2017, 13:53
    #39438717
__Michelle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
копирование с помощью vba
Tauri,

Ну, вот смотрите:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
   With Fld
      .Value = "ddddddddd"
      .Width = 0
      .Height = 0
      .SetFocus
      .SelStart = 0
      .SelLength = Len(Fld)
      DoCmd.RunCommand acCmdCopy
   End With


Кошмар.
Набираю все это с планшета.
...
Рейтинг: 0 / 0
14.04.2017, 14:15
    #39438745
__Michelle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
копирование с помощью vba
Tauri,

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

То есть, можно разместить его скрытно, а мгновенные перемещения курсора
(на поле с нулевыми размерами и возврат на ScreenPreviousControl) никто не заметит.
...
Рейтинг: 0 / 0
14.04.2017, 14:25
    #39438752
копирование с помощью vba
TauriТ.е. эта процедура копирует значение переменной strTest в буфер обмена?

Dim d As DataObject
... Для этого в референсах должна быть установлена ссылка на библиотеку, что не есть хорошо.
В указанной ссылке приведен текст модуля. Создайте такой же и пользуйтесь. Правда я не знаю, как это будет работать под Win 64b.

А почему вам нужен именно обмен через буфер? Где вы собираетесь использовать этот текст?
...
Рейтинг: 0 / 0
14.04.2017, 16:24
    #39438853
Tauri
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
копирование с помощью vba
Анатолий ( Киев ),

Менеджер получает жалобу от клиента (форма с несколькими полями) и должна отправить её мастеру по e-mail. Для этого менеджер вручную копирует каждое поле формы и вставляет его в тело сообщения e-mail + в разные отчёты. Это неудобно. Нужна кнопка, чтобы формировала из полей единый текст и этот текст копировала в буфер для его дальнейшей отправки по e-mail и вставки в разные отчёты.
...
Рейтинг: 0 / 0
14.04.2017, 16:25
    #39438858
Tauri
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
копирование с помощью vba
Анатолий ( Киев ),

Конечное сообщение выглядет так.
...
Рейтинг: 0 / 0
14.04.2017, 16:51
    #39438871
__Michelle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
копирование с помощью vba
Tauri,

А чем Вам мой способ не понравился?
Восемь (можно и шесть) коротких строк кода и все.
Слишком просто?)))
...
Рейтинг: 0 / 0
14.04.2017, 16:51
    #39438872
Tauri
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
копирование с помощью vba
[quot Анатолий ( Киев )][quot Tauri]Т.е. эта процедура копирует значение переменной strTest в буфер обмена?


В указанной ссылке приведен текст модуля. Создайте такой же и пользуйтесь.

не получается использовать вариант

Dim d As DataObject

Public Sub PutInCb()
Dim strTest As String

strTest = "Test!"

Set d = New DataObject

d.SetText strTest
d.PutInClipboard
End Sub

ругается на Dim d As DataObject и на Set d = New DataObject
...
Рейтинг: 0 / 0
14.04.2017, 16:53
    #39438874
Tauri
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
копирование с помощью vba
__Michelle,

Да, я думаю, что ваш способ буду использовать. Другие способы пока не получаются.
...
Рейтинг: 0 / 0
14.04.2017, 16:59
    #39438879
__Michelle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
копирование с помощью vba
Tauri,

А почему сразу проигнорировали-то, мне просто интересно?
Чем больше кода, тем лучше?
...
Рейтинг: 0 / 0
14.04.2017, 17:01
    #39438882
AndrF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
копирование с помощью vba
[quot Анатолий ( Киев )]
Для этого в референсах должна быть установлена ссылка на библиотеку, что не есть хорошо.[/q]

Полминуты на поиск в интернете и код немного модифицирован:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Option Compare Database
Option Explicit

Dim d As Object

Public Sub PutInCb()
    Dim strTest As String
    
    strTest = "Test!"
    
    Set d = GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
    
    d.SetText strTest
    d.PutInClipboard
End Sub

Public Sub GetFromCb()
    d.GetFromClipboard
    MsgBox d.GetText(1)
End Sub



Проверил - работает.
...
Рейтинг: 0 / 0
14.04.2017, 17:11
    #39438887
AndrF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
копирование с помощью vba
Ну и именно мой вариант на основе вышеприведенного:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
Option Compare Database
Option Explicit

Public Sub Test()
    ' Пошлем текст в буфер обмена
    SetTextInClipboard "Тестик 1"
    ' Прочитаем из буфера то что послали
    MsgBox GetTextFromClipboard
End Sub

Public Sub SetTextInClipboard(s As String)
    Dim strTest As String
    
    With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
        .SetText s
        .PutInClipboard
    End With
End Sub

Public Function GetTextFromClipboard() As String
    With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
        .GetFromClipboard
        GetTextFromClipboard = .GetText(1)
    End With
End Function
...
Рейтинг: 0 / 0
14.04.2017, 17:13
    #39438889
AndrF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
копирование с помощью vba
Хотя выше можно еще выкинуть объявление лишней переменной...
...
Рейтинг: 0 / 0
14.04.2017, 17:40
    #39438909
Tauri
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
копирование с помощью vba
__Michelle,

Я не проигнорировал. Я сосредоточился на ранее предложенном мне варианте. И пытался понять, почему он у меня не получается (help смотрел и т.п.). А когда я полностью во всём запутался (я самоучка и многого не знаю), то я вернулся на форум и увидел Ваше письмо.
...
Рейтинг: 0 / 0
14.04.2017, 17:49
    #39438912
Прогер_самоучка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
копирование с помощью vba
Tauriя самоучкане, ну это слишком!
...
Рейтинг: 0 / 0
14.04.2017, 17:57
    #39438916
Tauri
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
копирование с помощью vba
__Michelle,

а fld - это переменная? её надо описывать dim fld as ?
...
Рейтинг: 0 / 0
14.04.2017, 17:57
    #39438919
Tauri
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
копирование с помощью vba
Прогер_самоучка,

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


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