Страницы: 1
RSS
Early binding
 
Подскажите пожалуйста, почему код при раннем связывании не работает? Библиотеку Microsoft Word 11.0 Object Library подключил, переменная после этого стала прописываться как    
Dim oWord New Word.Applications,    
но при запуске процедуры появляется ошибка на инструкции Set oWord = CreateObject("Word.Application"), хотя в двух источниках глянул, вроде так прописывается все…    
=============================================  
P.S. Поздносвязанный код в файле))) Спасибо.
 
Ваш файл не смотрел, приведу свой пример  
 
 
Sub Macro1()  
'Пример работы с Word  
   Dim wbApp As Word.Application  
   Dim wDoc As Word.Document  
   Set wbApp = CreateObject("Word.Application")  
   wbApp.Visible = True  
   Set wDoc = wbApp.Documents.Add  
   wbApp.Selection.Text = "Hello, world!"  
   wDoc.SaveAs Filename:="C:\Temp\Test.doc"  
   wDoc.Close  
   wbApp.Quit  
   Set wDoc = Nothing  
   Set wbApp = Nothing  
End Sub
 
К сожалению так не работает. Точно так же все и в моем коде. Библиотека подключена. Но если объявить    
Dim wDoc As Word.Document  
Выдает ошибку на инструкции:    
Set wbApp = CreateObject("Word.Application")  
===========================  
P.S. Библиотека Microsoft Word 11.0 Object Library подключена.Ваш пример пробовал запускать, такая же ошибка. Может еще что-то нужно подключать, кроме Вордовской библиотеки, у вас этот код работает?
 
Я подключил в Tools-References библиотеку Microsoft Word 11.0 Object Library и запустил свой код. Всё работает.    
 
Попробуйте снять галочку в Tools - Referecies, нажать ок, а потом опять подключить библиотеку.
 
Проверил ваш файл. Всё сработало. Открылся Word, создался документ, напечаталась заглавие и формулы.    
 
Попробуйте запустить макрос на другой машине, только не забудьте подключить библиотеку
 
Сходил, попробовал на другом компе запустить, там работает. У меня выдает ошибку. Скорее всего, из-за того, что я ставил 2007 офис, потом сносил его…
 
Мой макрос и у мнея работает, но он "поздно" связан. Ваш пример "раннего" связывания, когда переменная объявляется вначале процедуры как объект Word. Тогда быстрее все это работает и генерирует документ... Я уже понял, попробую почитстить реестр и заново установить Excel. У меня с компом что-то...
 
{quote}{login=Pavel55}{date=26.08.2008 01:37}{thema=}{post}Ваш файл не смотрел, приведу свой пример  
 
Sub Macro1()  
'Пример работы с Word  
   Dim wbApp As Word.Application  
   Dim wDoc As Word.Document  
   Set wbApp = CreateObject("Word.Application")  
   wbApp.Visible = True  
   Set wDoc = wbApp.Documents.Add  
   wbApp.Selection.Text = "Hello, world!"  
   wDoc.SaveAs Filename:="C:\Temp\Test.doc"  
   wDoc.Close  
   wbApp.Quit  
   Set wDoc = Nothing  
   Set wbApp = Nothing  
End Sub{/post}{/quote}  
---  
Вообще-то, CreateObject() уже означает позднее связывание, независимо от того, есть ли reference на Microsoft Word Object Library.    
Для раннего связывания, наверное, имелось в виду вместо:  
Set wbApp = CreateObject("Word.Application")  
такой вариант:  
Set wbApp = New Word.Application  
 
Раннее связывание работает быстрее, но требует корректной ссылки (reference) на необходимую версию библиотеки. Общеизвестно также, что если на компьютере установлена более ранняя версия библиотеки, то в Tools-References на соответвующей ссылке появится "MISSING..." и работать не будет. Чтобы заработало нужно, как правильно было отмечено, снять и переустановить ссылку (можно программно) на текущую версию библиотеки.  
С поздним связыванитем таких проблем нет, но работает  медленнее.  
 
Новичку VBA (Минск) могу посоветовать вместо переустановки MS-Office попробовать такой вариант восстановления ключей реестра для Word и Excel:  
1. Зайти в "Пуск" (внизу рабочего стола)- выбрать "Выполнить" и выполнить такую командную строку:  
C:\Program Files\Microsoft Office\OFFICE11\WINWORD.EXE /regserver  
2. Аналогично выполнить такую команду:  
C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE /regserver  
 
Кстати, если на компьютере установлены одновременно Excel-2007 и Excel-2003, то после выполнения описанной процедуры по умолчанию будет загружаться Excel-2003.    
То же справедливо и для Word-а, и даже для Access-a, несмотря на то, что для Access ключ /regserver не декларирован.  
Оценить этот нюанс смогут те, кто после установки Office-2007 намучился с подключением по умолчанию приложений Office-2003.  
---  
ZVI
 
Чуть-чуть поздновато я прочитал ваше сообщение, ZVI. Уже переустановил Office. Теперь все работает нормально (я имею ввиду объявил Dim oWord As New Word.Application и Dim oDoc As New Word.Document) . А вообще, очень полезная информация, я имею ввиду чистку реестра и запуск Excel 2003 по умолчанию.    
 
Если честно, я раз этак 20 уже ставил офис новый и потом сносил его. Там много чего интересного, и более удобного, например сводные таблицы и работа с именованными диапазонами там как-то лучше организована. Но иногда он (офис 2007) так напрягает, что просто нету сил… самый главный, на мой взгляд недостаток – повышенные требования к системе (мой старый комп еле-еле загружает новый Word). А еще с безопасностью, на мой взгляд они перемудрили, даже если установить самый низкий уровень безопасности, все равно сообщения всякие выскакивают, что иногда раздражает.)))) )) А запускать старый Офис по умолчанию – было бы классно. Только вот не знаю почему, когда я пробовал устанавливать по умолчанию старый офис, после открытия MS Word (нового) в старом шла перенастройка (обновления), хотя в Excel такого не было, не понятно почему.    
 
Что касается темы, то хотел бы поинтересоваться, как и где корректно указать подключение библиотеки программно.    
Я пробовал так: References.CreateFromFile "C:\Program Files\Microsoft Office\OFFICE11\MSWORD.OLB" (указывал в модуле рабочего листа до объявления переменных). Но здесь какая-то ошибка синтаксическая, я пробовал путь к файлу в кавычки брать, все равно не получилось… Пробовал отключать библиотеку…
 
Попробуйте так  
 
'программное подключение библиотеки  
 
'Source: http://msoffice.nm.ru/faq/macros/module.htm#faq179  
 
Option Compare Text  
 
Private Sub VBProject_References1()  
Dim iPath$, iFileName$, iCount%  
   iPath$ = Environ("WinDir")  
   'iFileName$ = iPath$ & "\System32\Scrrun.dll" 'Microsoft Scripting Runtime  
   'iFileName$ = iPath$ & "\System32\FM20.dll" 'Microsoft Forms 2.0 Object Library  
   iFileName$ = Application.Path & "\MSWORD.OLB" 'Microsort Word 11.0 Object Library  
   If Dir(iFileName$) <> "" Then  
      With ThisWorkbook.VBProject.References  
           For iCount% = 1 To .Count  
               If .Item(iCount%).FullPath = iFileName$ Then  
                  MsgBox "Эта библиотека уже подключена", , ""  
                  Exit Sub  
               End If  
           Next  
           .AddFromFile Filename:=iFileName$  
      End With  
   Else  
      MsgBox "Отсутствует нужный файл", , ""  
   End If  
   MsgBox "Библиотека подключена!", 64, ""  
End Sub
 
дополенние к моему предыдущему посту  
 
после строки  
 
MsgBox "Отсутствует нужный файл", , ""  
 
надо добавить строку  
 
Exit Sub
 
{quote}{login=Новичок VBA (Miнск)}{date=26.08.2008 05:24}{thema=}{post}...  
Что касается темы, то хотел бы поинтересоваться, как и где корректно указать подключение библиотеки программно.    
Я пробовал так: References.CreateFromFile "C:\Program Files\Microsoft Office\OFFICE11\MSWORD.OLB" (указывал в модуле рабочего листа до объявления переменных). Но здесь какая-то ошибка синтаксическая, я пробовал путь к файлу в кавычки брать, все равно не получилось… Пробовал отключать библиотеку…{/post}{/quote}  
---  
Попробуйте так:  
 
Sub WordRefOn()  
 On Error Resume Next  
 Dim WordLibFullName As String  
 With Application  
   WordLibFullName = .Path & .PathSeparator & "MSWORD.OLB"  
 End With  
 With ThisWorkbook.VBProject  
   .References.Remove .References("Word")  ' Off  
   Err = 0  
   .References.AddFromFile WordLibFullName  ' On  
 End With  
 If Err <> 0 Then MsgBox "Необходимо разрешить доступ к Visual Basic Project" & vbCr _  
    & "(меню Сервис-Макрос-Безопасность-Надежные издатели)", _  
    vbInformation  
End Sub  
 
---  
ZVI
 
{quote}{login=ZVI}{date=27.08.2008 06:58}{thema=Re: }{post}  
---  
Попробуйте так:  
Sub WordRefOn()  
 On Error Resume Next  
 Dim WordLibFullName As String  
 With Application  
   WordLibFullName = .Path & .PathSeparator & "MSWORD.OLB"  
 End With  
 With ThisWorkbook.VBProject  
   .References.Remove .References("Word")  ' Off  
   Err = 0  
   .References.AddFromFile WordLibFullName  ' On  
 End With  
 If Err <> 0 Then MsgBox "Необходимо разрешить доступ к Visual Basic Project" & vbCr _  
    & "(меню Сервис-Макрос-Безопасность-Надежные издатели)", _  
    vbInformation  
End Sub  
---  
ZVI{/post}{/quote}  
=================  
Да, именно то, что надо. Спасибо!
 
{quote}{login=ZVI}{date=26.08.2008 04:22}{thema=Re: Early binding}{post}{quote}{login=Pavel55}{date=26.08.2008 01:37}{thema=}{post}  
Новичку VBA (Минск) могу посоветовать вместо переустановки MS-Office попробовать такой вариант восстановления ключей реестра для Word и Excel:  
1. Зайти в "Пуск" (внизу рабочего стола)- выбрать "Выполнить" и выполнить такую командную строку:  
C:\Program Files\Microsoft Office\OFFICE11\WINWORD.EXE /regserver  
2. Аналогично выполнить такую команду:  
C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE /regserver  
 
Кстати, если на компьютере установлены одновременно Excel-2007 и Excel-2003, то после выполнения описанной процедуры по умолчанию будет загружаться Excel-2003.    
То же справедливо и для Word-а, и даже для Access-a, несмотря на то, что для Access ключ /regserver не декларирован.  
Оценить этот нюанс смогут те, кто после установки Office-2007 намучился с подключением по умолчанию приложений Office-2003.  
---  
ZVI{/post}{/quote}  
 
Сейчас понадобилось запускать Excel 2003 и Word 2003 по умолчанию, но не получается выполнить команду…    
Если так, то запускается ёсксель C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE (и ворд тоже, соответственно, второй командой). Но при попытке прописать /regserver выдается сообщенияе «Windows не удалось найти…». Наклон слеши пробовал менять. Не получается…
 
ZVI:  
Сейчас понадобилось запускать Excel 2003 и Word 2003 по умолчанию, но не получается выполнить команду…    
Если так, то запускается ёсксель C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE (и ворд тоже, соответственно, второй командой). Но при попытке прописать /regserver выдается сообщенияе «Windows не удалось найти…». Наклон слеши пробовал менять. Не получается…
 
---  
Команда "C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE /regserver" была приведена для случая, когда MS Office установлен в папку "C:\Program Files\Microsoft Office\". Если этот путь не верен, нужно его подкорректировать.  
 
Фрагмент командной строки "OFFICE11" был приведен для Office-2003, для Office-2002(XP) этот фрагмент нужно заменить на "OFFICE10", для Office-2000 - на "OFFICE9".  
 
Если не удается выполнить команду из Пуск - Выполнить, то можно, например, с помощью проводника найти Excel.exe нужной версии и подставить найденный путь в коммандную строку.  
 
Путь можно посмотреть в свойствах ярлыка, из которого запускается приложение соответствующей версии.  
 
Или, если удалось как-то загрузить Excel необходимой версии, то путь становки можно определить из макроса:  
 
Sub ГдеУстановленОффис()  
 [A1] = Application.Path
 MsgBox Application.Path  
End Sub  
---  
ZVI
 
Все равно не получается. У меня в Program Files две папки: C:\Program Files\Microsoft Office\OFFICE11 и C:\Program Files\Microsoft Office 2003\OFFICE11 (и там и там есть офис 11, а офис 12 лежит в первой) Команда regserver не срабатывает. И так и сяк пробовал прописать, всё равно сообщение, что не может найти...
 
{quote}{login=ZVI}{date=04.09.2008 09:05}{thema=}{post}---  
Sub ГдеУстановленОффис()  
 [A1] = Application.Path
 MsgBox Application.Path  
End Sub  
---  
ZVI{/post}{/quote}  
Макрос запускал, он прописывает C:\Program Files\Microsoft Office\OFFICE11 - открывает окно    
Прописываю дальше C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE - открывает ёксель 2003  
Добавляю    
C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE/ regserver - выдает сообщение об ошибке
 
---  
Обычно оффис 2007 устанавливается в отдельную папку:  
C:\Program Files\Microsoft Office\OFFICE12\  
Как удалось без ущерба установить в одну папку 2003-й и 2007-й офисы с одним и тем же именем файла Excel.exe - трудно понять. Или у них разные имена?    
Да и с ситуацией, когда установлено сразу два офиса 2003 я не сталкивался - могут быть накладки.  
 
Могу посоветовать следующее:  
1. Если в папке C:\Program Files\Microsoft Office 2003\OFFICE11 установлен таки один работающий офис 2003, то попробовать команду:  
C:\Program Files\Microsoft Office 2003\OFFICE11\EXCEL /regserver  
 
2. Для Excel-я можно использовать также ключ /o вместо /regserver  
Эффект - тот же, только придется вручную закрыть открывшееся при этом окно Excel.  
 
3. Если ничего не помогло, то можно сделать так:    
- переименовать Excel.exe из офиса 2003 в файл Excel2003.exe  
- в проводнике из меню Сервис - Свойства папки - Типы файлов привязать расширения XLS, XLA и т.п. к Excel2003.exe  
Аналогично поступить с winword-м  
 
Если Вам не трудно, напишите, пожалуйста, полностью сообщение об ошибке для ключа /regserver, это - просто для колекции по данной проблеме.  
---  
ZVI
 
{quote}{login=}{date=05.09.2008 12:19}{thema=Re: }{post}{quote}{login=ZVI}{date=04.09.2008 09:05}{thema=}{post}---  
Sub ГдеУстановленОффис()  
 [A1] = Application.Path
 MsgBox Application.Path  
End Sub  
---  
ZVI{/post}{/quote}  
...  
Добавляю    
C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE/ regserver - выдает сообщение об ошибке{/post}{/quote}  
---  
Обратил внимание на Вашу ошибку в командной строке:  
Вместо:    
...\EXCEL.EXE/ regserver  
Должно быть:  
...\EXCEL.EXE /regserver  
 
После  EXCEL.EXE должен быть пробел, а между слэшем и regserver не должно быть пробела.  
 
Просто скопируйте командную строку из моих предыдущих сообщений и вставьте в Пуск - Выполнить.  
---  
ZVI
 
Все дело в том, что у меня очень много Microsoftoвских продуктов: Microsoft Project 2007, Microsoft Visio 2007 и 2003, Microsoft Office 2007 и 2003, еще математические надстройки для работы с рибоном Microsoft Math, Microsoft Math Add-in для Word, и еще много всего. Это не считая MS VB6, MS.NET, MS Visual Studio и т.п… Поэтому я их своеобразно устанавливаю, стараюсь не заливать их все в одну папку    
Только что попробовал переустановить ёссеь 2003 и залил его в одну паку с новым офисом. Всё равно не сработало. Скриншоты в файле.
 
Может быть еще проблема в ОС. У меня XP Zver. Там бывают свои негативные моменты. Например, КОМПАС-3D не хочет ломаться. И Open Office Org не хочет устанавливаться, если уже установлен пакет MS Office
 
{quote}{login=Новичок VBA (Miнск)}{date=05.09.2008 02:53}{thema=}{post}У меня XP Zver. {/post}{/quote}Оффтоп. А что это за зверь?
 
{quote}{login=Лузер™}{date=05.09.2008 07:53}{thema=Re: }{post}{quote}{login=Новичок VBA (Miнск)}{date=05.09.2008 02:53}{thema=}{post}У меня XP Zver. {/post}{/quote}Оффтоп. А что это за зверь?{/post}{/quote}  
сборка такая самопальная - ставится сразу вместе с Виндой куча программ. Но есть отзывы, когда что-то у кого-то не работает - пираты некоторые ненужные (с их точки зрения) утилиты/программы/службы из Windows XP/MS Office/... выкинули напрочь. поэтому что-то не пашет..  
Погуглите - Windows ZVER CD  
или сюда сходите - http://zvercd.com/ (насколько это официальный сайт...)  
сам подобными дистрибутивами не пользовался...
 
---  
Судя по сообщению об ошибке, настройки Вашей операционки не позволяют выполнять команды с пробелами в пути. Такое было в древнем DOS-е. Поэтому в качестве команды воспринято все до первого пробела, т.е. "C:\Program" а остальная часть пошла как параметр(ы).    
 
Нужно как-то установить в качестве текущего каталог:  
...\OFFICE11\    
и выполнить команду: EXCEL /regserver  
 
Для упрощения прилагаю книгу с макросом, который это сделает сам.  
 
Еще раз напомню, что в любом случае должен сработать метод 3, описанный в одном из постов выше: переименовать Excel.exe из офиса 2003 в файл Excel2003.exe и привязать его к типам файлов XLS,XLA и т.п.  
---  
ZVI
 
Нашел решение, точнее мне подсказали на форуме Zver. Если в пути пробелы, тогда в кавычки надо брать путь. Вот так заработало:  
"C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE" /regserver  
 
Что касается Zver CD то пользуюсь этим ПО уже сравнительно давно. Не жалуюсь. Всё то что меня раздражало в стандартном XP там решено, недостатки тоже, конечно есть. Я часто сталкивался с необходимостью править реестр для того что бы снять защиту с популярных CAD программ.
Страницы: 1
Читают тему
Наверх