1

Тема: Сохранить открытый файл именем из буфера обмена

Помогите, пожалуйста!
Нужно создать макрос для Word 2007, который бы при открытии автоматически сохранял файл именем из буфера обмена. Пробовал вручную,
Sub Save()
Dim MyDataObj As String
MyDataObj = GetFromClipboard
    ChangeFileOpenDirectory "D:\vadim\doc\"
    ActiveDocument.SaveAs fileName:=MyDataObj, fileFormat:= _
        wdFormatXMLDocument, lockComments:=False, password:="", addToRecentFiles _
        :=True, writePassword:="", readOnlyRecommended:=False, embedTrueTypeFonts _
        :=False, saveNativePictureFormat:=False, saveFormsData:=False, _
        saveAsAOCELetter:=False
    ShowVisualBasicEditor = True
    ActiveWindow.Close
End Sub

перечитал множество форумов, но максимальное чего добился : Run time error 5152
Я не специалист в VBA, но очень нужен этот макрос, помогите, плиз

2

Re: Сохранить открытый файл именем из буфера обмена

пошагово делайте, две строчки пройдёте
MyDataObj чему равна???????
Помоему ""
Надо так:

On Error Resume Next
Dim Data1 As New DataObject, Буфер1$
Data1.GetFromClipboard
Буфер1$ = Data1.GetText(1) 'переменная буфера обмена, последнего объекта 

Может кто знает:
как присвоить переменную для объектов буфера обмена 2, 3 ???

3

Re: Сохранить открытый файл именем из буфера обмена

выдает окошко compille error: User-defined type not definet на этапе Dim Data1 As NEW DATAOBJECT, Буфер1$
я так понимаю надо заменить NEW DATAOBJECT но на что?

4

Re: Сохранить открытый файл именем из буфера обмена

Public Sub SetClipboard(Obj As Variant)
Dim MyDataObj As New DataObject
MyDataObj.SetText CStr(Obj)
MyDataObj.PutInClipboard
End Sub

Public Function GetClipboard() As Variant
GetClipboard = "": On Error Resume Next
Dim MyDataObj As New DataObject
MyDataObj.GetFromClipboard: GetClipboard = MyDataObj.GetText
End Function

Public Sub ClearClipboard()
Dim MyDataObj As New DataObject
MyDataObj.SetText "": MyDataObj.PutInClipboard
End Sub

Что то я и сам запамятовал, тоже хочу спросить об этом кто знает
Но у меня работает потому что есть модуль с кодом приведённым выше
Но в то же время я его попробовал в чистом Нормал дот не получилось
Странно, подскажите кто знает????

5

Re: Сохранить открытый файл именем из буфера обмена

Все, разобрался, работает!
чтобы не выдавало ошибку Compile error: User-defined type not defined на  этапе
Dim MyDataObj As New DataObject ', надо поставить галку  в Tools - References у Microsoft Forms 2.0 Object Library. Если нету библиотеки Microsoft Forms 2.0 Object Library, через обзор, в папке system 32 находим файл FM20.dll, и добавляем ее.  Если галка стоит, снять, применить и поставить снова (мне потребовалось сделать так несколько раз). Галку убрать нельзя пока строку "Dim MyData As DataObject" не удалишь или закомментируешь.
окончательный вариант макроса:
Sub Save()
Dim strDocName As String
Dim MyDataObj As New DataObject
MyDataObj.GetFromClipboard
strDocName = MyDataObj.GetText
    ChangeFileOpenDirectory "D:\vadim\doc\"
    ActiveDocument.SaveAs FileName:=strDocName, FileFormat:= _
        wdFormatXMLDocument, LockComments:=False, Password:="", AddToRecentFiles _
        :=True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts _
        :=False, SaveNativePictureFormat:=False, SaveFormsData:=False, _
        SaveAsAOCELetter:=False
End Sub

6

Re: Сохранить открытый файл именем из буфера обмена

Извините здесь не понял:
Если нету библиотеки Microsoft Forms 2.0 Object Library, через обзор, в папке system 32 находим файл FM20.dll, и добавляем ее
Видимо на до так:
Если нету библиотеки Microsoft Forms 2.0 Object Library, через обзор, в папке system 32 находим файл FM20.dll, и добавляем его, то есть файл, ну пусть будет её, то есть библиотеку, куда добавляем??????
И страно что Вы не делаете проверку длины содержимого буфера обмена, если по запарке там в буфере будет файл????

7

Re: Сохранить открытый файл именем из буфера обмена

Согласен с Вами, когда спешишь и мысли бегут впереди пальцев на клавиатуре, потом самому трудно разобраться, не то что другим.
Итак:
Если нету библиотеки Microsoft Forms 2.0 Object Library в окне References - Project (Alt+F11 -> Tools - > References), то в этом же окне разыскиваем и нажимаем  Browse... сразу же попадаем в папку system 32. Тут же находим FM20.dll. Нажимаем ОК. Все, библиотеки Microsoft Forms 2.0 Object Library есть в списке, ставим галочку на этой библиотеке.
Длину буфера обмена проверять не нужно, для меня, вообще-то, это к лучшему, т.к. макрос нужен для связи медицинской программы с шаблоном дневниковой записи. Программа передает в буфер название файла (комбинацию цифр, по которой в будущем будет связывать этот файл с другими данными), макрос срабатывает, называет файл цифрами из буфера обмена, и пользователь продолжает работу в новом, только что сохраненном, файле с нужным названием. При этом шаблон остается неизмененным (макрос только для этого документа). Но, если все-таки нужно внести изменения в шаблон, то нужно очистить буфер (я упрощаю Alt+PrtScr  smile ), макрос выдает ошибку, и я редактирую шаблон. Может это, коненчно же, не рационально, но как получается, так и выкручиваемся.

8

Re: Сохранить открытый файл именем из буфера обмена

1. Спасибо по добавлению библиотеки всё понял
2. Честно говоря, не увидел разницу между:
Alt+PrtScr
и
PrtScr
3. дело Ваше можете ничего не проверять
Но Ваш код, перед тем как начать тестировать я нажал
PrtScr, это сделал специально и на строке
strDocName = MyDataObj.GetText 'ошибка 2147221
потому что нет проверки!
ну если она не нужна дело Ваше

9

Re: Сохранить открытый файл именем из буфера обмена

разница между сочетаниями клавиш в том, что две кнопки приводят к копированию в буфер изображение только активного окна, которое может и не занимать весь экран.. А когда просто PrintScreen - тогда в буфер копируется изображение всего экрана!

10

Re: Сохранить открытый файл именем из буфера обмена

спасибо буду знать!