Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Visual Basic Новый топик    Ответить
 работает в VBA, но не работает в VBS  [new]
DrunkWolf
Member

Откуда:
Сообщений: 160
Прошу помощи разобраться с методом, который получил из записи макроса. Он работает в VBA, но не работает в VBS
На третьей строке выдает ошибку: object doesn't support this property or method: "doc.comparedocuments"

Set obj = CreateObject("Word.Application")
Set doc = obj.Documents.Open("C:\fob\5.doc", , False, , , , , , , , , True)
doc.CompareDocuments "C:\fob\2.doc", "C:\fob\3.doc", wdCompareDestinationNew , wdGranularityWordLevel, True, True, True, True, True, True, True, true, True, True, "user", False

doc.SaveAs "C:\fob\4.docx"
Set doc = Nothing
obj.Quit
Set obj = Nothing
24 май 12, 19:44    [12610542]     Ответить | Цитировать Сообщить модератору
 Re: работает в VBA, но не работает в VBS  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 19768
CompareDocuments работает в офисе 2010, видимо пытаетесь использовать на машине с более старой версией ворда
24 май 12, 19:50    [12610558]     Ответить | Цитировать Сообщить модератору
 Re: работает в VBA, но не работает в VBS  [new]
DrunkWolf
Member

Откуда:
Сообщений: 160
Shocker.Pro,

Стоит office2007, но в нем тоже это есть. Я же сперва делал пользовательским методом, записал макрос, где и была эта функция. Теперь пытаюсь использовать ее в vbs
24 май 12, 20:11    [12610615]     Ответить | Цитировать Сообщить модератору
 Re: работает в VBA, но не работает в VBS  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 19768
у меня нет 2007 и 2010 не могу посмотреть
Но, судя по msdn - это метод Application, а не документа, применяйте его к obj
24 май 12, 20:22    [12610647]     Ответить | Цитировать Сообщить модератору
 Re: работает в VBA, но не работает в VBS  [new]
DrunkWolf
Member

Откуда:
Сообщений: 160
Shocker.Pro,

Поменял. Теперь ругается на type mismatch: obj.comparedocuments. Значит где-то с параметрами напутал?
24 май 12, 20:57    [12610753]     Ответить | Цитировать Сообщить модератору
 Re: работает в VBA, но не работает в VBS  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 19768
DrunkWolf
Значит где-то с параметрами напутал?
да
24 май 12, 21:02    [12610767]     Ответить | Цитировать Сообщить модератору
 Re: работает в VBA, но не работает в VBS  [new]
qwerty112
Guest
DrunkWolf
Прошу помощи разобраться с методом, который получил из записи макроса. Он работает в VBA, но не работает в VBS
На третьей строке выдает ошибку: object doesn't support this property or method: "doc.comparedocuments"

Set obj = CreateObject("Word.Application") 
Set doc = obj.Documents.Open("C:\fob\5.doc", , False, , , , , , , , , True) 
doc.CompareDocuments "C:\fob\2.doc", "C:\fob\3.doc", wdCompareDestinationNew , wdGranularityWordLevel, True, True, True, True, True, True, True, true, True, True, "user", False
   
doc.SaveAs "C:\fob\4.docx"
Set doc = Nothing 
obj.Quit
Set obj = Nothing

именованные константы меняй на их значения

зы
и тегами пользуйся !!
24 май 12, 21:12    [12610799]     Ответить | Цитировать Сообщить модератору
 Re: работает в VBA, но не работает в VBS  [new]
DrunkWolf
Member

Откуда:
Сообщений: 160
Shocker.Pro,

Оставил только основные:
obj.CompareDocuments "C:\fob\2.doc", "C:\fob\3.doc"
Либо:
set compare= obj.CompareDocuments("C:\fob\2.doc", "C:\fob\3.doc")

Та же ошибка (
24 май 12, 21:17    [12610817]     Ответить | Цитировать Сообщить модератору
 Re: работает в VBA, но не работает в VBS  [new]
DrunkWolf
Member

Откуда:
Сообщений: 160
qwerty112,

obj.CompareDocuments "C:\fob\2.doc", "C:\fob\3.doc", 2 , 1, True, True, True, True, True, True, True, true, True, True, "user", False

Тоже самое.. type mismatch.. еще что-то упущено.
24 май 12, 21:23    [12610857]     Ответить | Цитировать Сообщить модератору
 Re: работает в VBA, но не работает в VBS  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 19768
Судя по примерам, которые попались в инете, в 2007-м CompareDocuments принимает в качестве параметров не путь к документам, а объект - документ. Отсюда и ошибка. Их надо предварительно открыть
24 май 12, 21:27    [12610883]     Ответить | Цитировать Сообщить модератору
 Re: работает в VBA, но не работает в VBS  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 19768
Set obj = CreateObject("Word.Application") 
Set doc1 = obj.Documents.Open("C:\fob\5.doc", , False, , , , , , , , , True) 
Set doc2 = obj.Documents.Open("C:\fob\6.doc", , False, , , , , , , , , True) 
Set doc3 = obj.CompareDocuments doc1, doc2
doc3.SaveAs ....
24 май 12, 21:29    [12610889]     Ответить | Цитировать Сообщить модератору
 Re: работает в VBA, но не работает в VBS  [new]
qwerty112
Guest
DrunkWolf
qwerty112,

obj.CompareDocuments "C:\fob\2.doc", "C:\fob\3.doc", 2 , 1, True, True, True, True, True, True, True, true, True, True, "user", False

Тоже самое.. type mismatch.. еще что-то упущено.

ты на полном серьёзе думаеш, что это (выделено) имеет тип данных "Document" ?

Application.CompareDocuments Method (Word)

Compares two documents and returns a Document object that represents the document that contains the differences between the two documents, marked using tracked changes.

Syntax
--------------------------------------------------------------------------------

expression.CompareDocuments(OriginalDocument, RevisedDocument, Destination, Granularity, CompareFormatting, CompareCaseChanges, CompareWhitespace, CompareTables, CompareHeaders, CompareFootnotes, CompareTextboxes, CompareFields, CompareComments, RevisedAuthor, IgnoreAllComparisonWarnings)

expression An expression that returns an Application object.

NameRequired/OptionalData TypeDescription
OriginalDocumentRequiredDocumentSpecifies the path and file name of the original document.
RevisedDocumentRequiredDocumentSpecifies the path and file name of the revised document to which to compare the original document.
DestinationOptionalWdCompareDestination Specifies whether to create a new file or whether to mark the differences between the two documents in the original document or in the revised document. Default value is wdCompareDestinationNew.
GranularityOptionalWdGranularity Specifies whether changes are tracked by character or by word. Default value is wdGranularityWordLevel.
CompareFormattingOptionalBooleanSpecifies whether to mark differences in formatting between the two documents. Default value is True.
CompareCaseChangesOptionalBooleanSpecifies whether to mark differences in case between the two documents. Default value is True.
CompareWhitespaceOptionalBooleanSpecifies whether to mark differences in white space, such as paragraphs or spaces, between the two documents. Default value is True.
CompareTablesOptionalBooleanSpecifies whether to compare the differences in data contained in tables between the two documents. Default value is True.
CompareHeadersOptionalBooleanSpecifies whether to compare differences in headers and footers between the two documents. Default value is True.
CompareFootnotesOptionalBooleanSpecifies whether to compare differences in footnotes and endnotes between the two documents. Default value is True.
CompareTextboxesOptionalBooleanSpecifies whether to compare differences in the data contained within text boxes between the two documents. Default value is True.
CompareFieldsOptionalBooleanSpecifies whether to compare differences in fields between the two documents. Default value is True.
CompareCommentsOptionalBooleanSpecifies whether to compare differences in comments between the two documents. Default value is True.
RevisedAuthorOptionalStringSpecifies the name of the person to whom to attribute changes when comparing the two documents.
IgnoreAllComparisonWarningsOptionalBooleanSpecifies whether to ignore warnings when comparing the two documents.


24 май 12, 21:30    [12610904]     Ответить | Цитировать Сообщить модератору
 Re: работает в VBA, но не работает в VBS  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 19768
qwerty112
ы на полном серьёзе думаеш, что это (выделено) имеет тип данных "Document" ?
DrunkWolf
Он работает в VBA

У автора работает видишь ли этот пример в VBA на не том объекте и не с теми параметрами
24 май 12, 21:33    [12610925]     Ответить | Цитировать Сообщить модератору
 Re: работает в VBA, но не работает в VBS  [new]
DrunkWolf
Member

Откуда:
Сообщений: 160
qwerty112,

Согласен, нелепая ошибка :-) Раньше не пользовался msdn, по незнанию, полезная штука..Спасибо!
24 май 12, 21:42    [12610987]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: работает в VBA, но не работает в VBS  [new]
kosmonavtom
Member

Откуда:
Сообщений: 5
Здравствуйте! У меня ровно такая же проблема. Нужно сравнивать документы в автоматическом режиме и я увидел что при создании макроса при этом пишется функция: Application.CompareDocuments и прекрасно работает, но ошибки при переводе в vbs такие-же как и описаны в данной теме. И как же решилась проблема в данной теме я не понял? Что в итоге сделать то нужно? Или без вариантов, только переустановка на Word 2010?
12 янв 19, 15:19    [21783616]     Ответить | Цитировать Сообщить модератору
 Re: работает в VBA, но не работает в VBS  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 19768
kosmonavtom
но ошибки при переводе в vbs такие-же как и описаны в данной теме
Ну так и решения тут описаны. Давайте заново - код и тексты ошибок.
12 янв 19, 15:25    [21783619]     Ответить | Цитировать Сообщить модератору
 Re: работает в VBA, но не работает в VBS  [new]
kosmonavtom
Member

Откуда:
Сообщений: 5
Исходный код из макросов Word 2007:

Sub Sravnenie()
Sub Sravnenie()
'
' Sravnenie Макрос
'
'
    ChangeFileOpenDirectory "C:\doc\"
    Application.CompareDocuments OriginalDocument:=Documents("doc1.docx"), _
        RevisedDocument:=Documents("doc2.docx"), Destination:= _
        wdCompareDestinationNew, Granularity:=wdGranularityWordLevel, _
        CompareFormatting:=True, CompareCaseChanges:=True, CompareWhitespace:= _
        True, CompareTables:=True, CompareHeaders:=True, CompareFootnotes:=True, _
        CompareTextboxes:=True, CompareFields:=True, CompareComments:=True, _
        CompareMoves:=True, RevisedAuthor:="", IgnoreAllComparisonWarnings:=False
    ActiveWindow.ShowSourceDocuments = wdShowSourceDocumentsBoth
    ActiveDocument.SaveAs FileName:="doc3.docx", FileFormat:= _
        wdFormatXMLDocument, LockComments:=False, Password:="", AddToRecentFiles _
        :=True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts _
        :=False, SaveNativePictureFormat:=False, SaveFormsData:=False, _
        SaveAsAOCELetter:=False
    ActiveWindow.Close
    Application.Quit
End Sub


Но оказалось, что он не работает, выдает ошибку:
Run-time error '4160':
Неверное имя файла


Хотя записывался в том-же ворде и с теми-же файлами и файлы конечно же расположены как надо. Пробовал несколько раз.
12 янв 19, 16:20    [21783638]     Ответить | Цитировать Сообщить модератору
 Re: работает в VBA, но не работает в VBS  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 19768
Что касается переноса в VBS - выше уже говорили, что VBS не знает, что такое wdShowSourceDocumentsBoth и другие именованные константы ворда. Поэтому либо их нужно объявить и присвоить им те же значения, что и в ворде, либо просто заменить их на конкретные значения.

kosmonavtom
Но оказалось, что он не работает, выдает ошибку:
в какой строке?
12 янв 19, 16:26    [21783641]     Ответить | Цитировать Сообщить модератору
 Re: работает в VBA, но не работает в VBS  [new]
kosmonavtom
Member

Откуда:
Сообщений: 5
Shocker.Pro, в 7 строке ошибка.

Вот это выделяет желтым цветом:
Application.CompareDocuments OriginalDocument:=Documents("doc1.docx"), _
        RevisedDocument:=Documents("doc2.docx"), Destination:= _
        wdCompareDestinationNew, Granularity:=wdGranularityWordLevel, _
        CompareFormatting:=True, CompareCaseChanges:=True, CompareWhitespace:= _
        True, CompareTables:=True, CompareHeaders:=True, CompareFootnotes:=True, _
        CompareTextboxes:=True, CompareFields:=True, CompareComments:=True, _
        CompareMoves:=True, RevisedAuthor:="", IgnoreAllComparisonWarnings:=False


К сообщению приложен файл. Размер - 61Kb
12 янв 19, 21:41    [21783807]     Ответить | Цитировать Сообщить модератору
 Re: работает в VBA, но не работает в VBS  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 19768
Значит один (или оба) из этих документов еще не открыт или имя неверное
12 янв 19, 21:45    [21783812]     Ответить | Цитировать Сообщить модератору
 Re: работает в VBA, но не работает в VBS  [new]
kosmonavtom
Member

Откуда:
Сообщений: 5
Shocker.Pro, Спасибо! Да действительно документы не были открыты. Откровенно говоря я и не подумал даже об этом, т.к. думал что запись макроса в Word подразумевает, что все и так сработает, раз адреса записаны! но ошибся :((
Начал переделывать в VBS с учетом своих ошибок и на Ваших примерах описанных Выше и таки все получилось и работает:

' Сравнение двух документов
' Сравнение двух документов запуск сравнения и сохранение результата в отдельный файл
Set Application = CreateObject("Word.Application") ' Создаём объект с Word-ом
Application.Visible = True ' делаем видимым Word
Set doc1 = Application.Documents.Open("C:\doc\doc1.docx", , False, , , , , , , , , True) 
Set doc2 = Application.Documents.Open("C:\doc\doc2.docx", , False, , , , , , , , , True) 
Set doc3 = Application.CompareDocuments(doc1, doc2, , False, , , , , , , , , True)
doc3.SaveAs("C:\doc\doc3.docx")
Application.Quit ' закрываем Word


Еще раз спасибо! )))
12 янв 19, 22:50    [21783839]     Ответить | Цитировать Сообщить модератору
Все форумы / Visual Basic Ответить