Sub the_priest_copy()
With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
.SetText ActiveCell.Value
.PutInClipboard
End With
End Sub
но он у меня не срабатывает. Когда запускаю он не копирует ячейку. При том что не выдает никакой ошибки Как я понимаю ошибка состоит в строке GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}"), а точнее в ссылке на буфер обмена
naum_c, было на форуме несколько дней назад (может вчера 17/01/2022 ещё) — поищите
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
naum_c, а — я вспомнил) вашу тему удалили, т.к. она была с нарушением Ответ был получен, не от меня, но я его сохранил — дам только после того, как вы приведёте код в порядок
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
я про визуал, а не функционал Выделите код и нажмите кнопку <…> на панели А ещё лучше — скопируйте всё сообщение в шапку темы (стартовое сообщение), а вместо него напишите del
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
naum_c, да, только не обязательно было копировать))) Перенесите сообщение #3 в шапку, а вместо сообщений #3 и #7 напишите del Ответ я дал выше
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
написал: UPD (замечание устранено): Получение данных из буфера обмена
Прочитал статью - ничего не понял. Статья о том как получить данные из буфера обмена. В моем случае наоборот в буфер обмена нужно вставить текст содержащийся в ячейке без значка абзаца ¶
Сделал с поздним связыванием, как у вас, но рекомендую подключить библиотеку
Код
Option Explicit
'====================================================================================================
Sub ClipBoard_Clear()
ClipBoard_Set ""
End Sub
'====================================================================================================
Function ClipBoard_Get() As String ' получает текстовую строку из буфера с разделителями для табличных данных: vbCrLf = строки и vbTab = столбцы
With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
.GetFromClipboard: ClipBoard_Get = .GetText()
End With
End Function
'====================================================================================================
Sub ClipBoard_Set(ByVal tx$)
With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
.SetText tx: .PutInClipboard
End With
End Sub
'====================================================================================================
'====================================================================================================
Sub Test()
ClipBoard_Clear
ClipBoard_Set "тестовые данные"
MsgBox ClipBoard_Get
End Sub
'====================================================================================================
'====================================================================================================
Проблему с удалением лишнего из данных в буфере можно решить только с вашим примером
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Мне нужно в Excel документе скопировать ячейку (Безымянный 1) и вставить ее в 1с без ¶ (Безымянный 2) Макрос, что вы сделали - не работает. Он ничего не копирует. Библиотека, вроде бы подключена (Безымянный 3)
не та, что нужна, да и для работы моего макроса она не нужна (хоть и не помешает)
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
это альтернатива приведенному выше коду для работы с буфером обмена. Дело в том, что вот тот самый DataObject({1C3B4210-F441-11CE-B9EA-00AA006B1A69}), который выступает в качестве перемычки для работы с буфером имеет некоторые недостатки. И какие-то лишние символы переноса могут появляться и отказ от корректной работы в некоторых случаях. Например, в данном случае, вполне вероятно, что при запуске кода у человека открыты окна проводника(т.е. хоть какая-то папка). naum_c, что будет, если закрыть все окна, кроме 1С и Excel - код из первого сообщения заработает?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
вообще без разницы. Там проблема больше с виндой, если ничего не путаю. Начиная с Windows 8 точно были танцы с бубном при работе с DataObject, притом проблема плавающая - на одном ПК может проявиться, на другом нет.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
'create a clipboard thing
Dim ClipBoard
Set Clipboard = New cClipBoard
ClipBoard.Clear
ClipBoard.Data = "Test"
Class cClipBoard
Private objHTML
Private Sub Class_Initialize
Set objHTML = CreateObject("htmlfile")
End Sub
Public Sub Clear()
objHTML.ParentWindow.ClipboardData.ClearData()
End Sub
Public Property Let Data(Value)
objHTML.ParentWindow.ClipboardData.SetData "Text" , Value
End Property
Public Property Get Data()
Data = objHTML.ParentWindow.ClipboardData.GetData("Text")
End Property
Private Sub Class_Terminate
Set objHTML = Nothing
End Sub
End Class
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Функции и процедуры на основе обоих библиотек (раннее связывание)
Код
Option Explicit
'====================================================================================================
Dim DataObj As New DataObject, HTML As New HTMLDocument
'====================================================================================================
' DataObject
'====================================================================================================
Function PRDX_ClipBoardDataObj_Get() As String
DataObj.GetFromClipboard: PRDX_ClipBoardDataObj_Get = DataObj.GetText()
End Function
'====================================================================================================
Sub PRDX_ClipBoardDataObj_Set(v)
DataObj.SetText v: DataObj.PutInClipboard
End Sub
'====================================================================================================
Sub PRDX_ClipBoardDataObj_SetObj(obj)
DataObj.SetText Format$(obj): DataObj.PutInClipboard
End Sub
'====================================================================================================
Sub PRDX_ClipBoardDataObj_Clear()
DataObj.SetText "": DataObj.PutInClipboard
End Sub
'====================================================================================================
'====================================================================================================
Sub TestClipBoardDataObj()
PRDX_ClipBoardDataObj_Clear
PRDX_ClipBoardDataObj_Set "TestDataObj"
MsgBox PRDX_ClipBoardDataObj_Get
PRDX_ClipBoardDataObj_Clear
End Sub
'====================================================================================================
'====================================================================================================
' HTML
'====================================================================================================
Function PRDX_ClipBoardHTML_Get() As String
PRDX_ClipBoardHTML_Get = HTML.parentWindow.clipboardData.GetData("Text")
End Function
'====================================================================================================
Sub PRDX_ClipBoardHTML_Set(v)
HTML.parentWindow.clipboardData.SetData "Text", v
End Sub
'====================================================================================================
Sub PRDX_ClipBoardHTML_Clear()
HTML.parentWindow.clipboardData.clearData
End Sub
'====================================================================================================
'====================================================================================================
Sub TestClipBoardHTML()
PRDX_ClipBoardHTML_Clear
PRDX_ClipBoardHTML_Set "TestHTML"
MsgBox PRDX_ClipBoardHTML_Get
PRDX_ClipBoardHTML_Clear
End Sub
'====================================================================================================
'====================================================================================================
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
На дворе 2024 год, а мы придумываем какие-то костыли, чтобы тупо вставить текст без символа абзаца. Почему бы не встроить это в настройки excel. Такой мощный инструмент, и такую мелочь не могут пофиксить, чтобы миллионам на планете жилось хорошо.