2013-02-14 2 views
0

У меня возникла проблема с этим фрагментом кода, и я не совсем уверен, что проблема должна быть честной. Первоначальная проблема заключалась в том, что приложение, которое я написал, открывает экземпляр слова, но если на компьютере уже есть экземпляр слова, он просто открывает второй экземпляр, но он не вставляет документ, который я создаю внутри этого экземпляра , То, что у меня получается, - это два окна: один, если сам Word, ни один документ, а другой - это Word и документ. Их оригинальное приложение для запуска приложений по-прежнему работает как обычно, в его собственной комбинации Word/Document, как и должно было быть. Я попытался обойти эту проблему, захватив исполняемый экземпляр Word через getObject, но он просто продолжает возвращать сбой.GetObject возвращает H_RESULT E_FAIL

Я читал, что вы должны дать слово фокус и затем потерять фокус для того, чтобы получить перечисленные с ROT, но даже после ожидания 10 минут, она по-прежнему возвращает следующее сообщение об ошибке:

AnswerWizard = { "HRESULT ошибки E_FAIL был возвращен из вызова COM-компонента. "}

Мне было интересно, есть ли что-то, что мне не хватает в getObject и возможность ссылки на другой экземпляр приложения Office, вызывающего эту ошибку?

Информация:

для Windows 7

Слово 2003

Desktop VB Application

Код:

Private wordApp As Word.Application 

Public Sub New() 
    Try 
     wordApp = CType(GetObject(, "Word.Application"), Word.Application) 
    Catch ex As Exception 
     wordApp = New Word.Application 
    End Try 
End Sub 

Примечание: Протестировано и без CType не имеет значения. Он работает, если нет ни одного экземпляра слова, но это только потому, что оно относится к моему исключению.

Проблема:

Если я пытаюсь связать в уже запущенный экземпляр Word, код проходит через без метания ошибку, но я получаю AnswerWizard = { "Ошибка HRESULT E_FAIL был возвращен из вызова к COM-компоненту. "}. Затем мой код продолжает открывать экземпляр пустого слова, а слово/документ - в общей сложности два окна, когда их должно быть только одно. Я что-то пропустил в getObject?

ответ

1

В GetObject and CreateObject behavior of Office automation servers Microsoft рекомендует избегать GetObject(). Я согласен с этим: если вам не нужно взаимодействовать с документом в сеансе пользователя, открытие второго документа может привести к вмешательству пользователя. Независимый экземпляр может просто активировать свою работу невидимо или заблокировать пользовательский интерфейс.

Ваши проблемы, когда работает другой экземпляр Word, знакомы мне, хотя и в среде VBA.

Многие ключевые слова, которые похожи на объекты в документации приложения Office, фактически являются методами объекта Application - одним из наиболее распространенных в Word является Selection. Очень важно указать ваш объект приложения с помощью этих методов: wordApp.Selection, иначе метод применяется к первому экземпляру Word, который работает, что обычно приводит к ошибке.

+0

Как раз так я получаю то, что вы говорите тогда, я должен создать экземпляр Dim wordapp как New Word.Application, а затем использовать wordApp.Selection для генерации моих документов? Конечная цель, которую я пытаюсь сделать, - это остановить эту проблему с двойным открытием. – Gyhth

+0

Вы меня правильно поняли. хотя у меня не было проблемы с двойным открытием. MS говорит, что Word 2003 открывается невидимо (я работаю с Vista/Word 2007), поэтому, возможно, есть проблема, когда вы делаете это видимым ... – grahamj42

+0

Я не думал об этом, если честно. У меня есть функция, которая вызывается каждый раз, когда я сгенерирую новый документ, и устанавливает wordApp.Visible в true каждый раз, когда создается новый документ. Должен ли я когда-либо вызывать wordApp.Visible один раз по всему предмету, или это то, что устанавливает видимость для ВСЕХ документов там после? – Gyhth

Смежные вопросы