Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: SOS Добавлено: 08.07.10 15:30  

Автор вопроса:  Dan | ICQ: 609276007 
Уважаемые программисты!!!
Я пишу программу и мне надо анализировать кол-во ошибок в Word из программы на VB.net.
Сначала решил сделать макрос с кодом:
Sub Ошибки()
        Dim c As Integer
        c = ActiveDocument.SpellingErrors.Count
             MsgBox c
      End Sub

Но не знаю как вызвать макрос из приложения VB.net.
Потом узнал про автоматизацию:
Private _wdApplication As New Microsoft.Office.Interop.Word.Application 'Приложение Word
    Private _wdDocument As Interop.Word.Document = _wdApplication.ActiveDocument 'Документ Word
 Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        lblWord.Text = (_wdDocument.SpellingErrors.Count)
    End Sub

Примечание: для Word 2007
Но код не не работает.
Подскажите пожалуйста почему ошибка. И как можно заменить этот ужасный код.
Заранее спасибо.

Ответить

  Ответы Всего ответов: 16  

Номер ответа: 1
Автор ответа:
 VbStarter



ICQ: 357911808 

Вопросов: 118
Ответов: 1340
 Web-сайт: moscowdevils.ru
 Профиль | | #1
Добавлено: 08.07.10 17:07
а документ не проще анализировать? а не макрос запускать. далее рекомендую гугль

Ответить

Номер ответа: 2
Автор ответа:
 Dan



ICQ: 609276007 

Вопросов: 24
Ответов: 195
 Профиль | | #2 Добавлено: 08.07.10 17:09
Надо активный документ. Когда ворд открыт.

Ответить

Номер ответа: 3
Автор ответа:
 VbStarter



ICQ: 357911808 

Вопросов: 118
Ответов: 1340
 Web-сайт: moscowdevils.ru
 Профиль | | #3
Добавлено: 08.07.10 17:15
ну програмно открой ворд

Ответить

Номер ответа: 4
Автор ответа:
 Dan



ICQ: 609276007 

Вопросов: 24
Ответов: 195
 Профиль | | #4 Добавлено: 08.07.10 18:39
зачем мне его отрывать? Он уже открыт пользователем. И надо считывать данные об ошибках.

Ответить

Номер ответа: 5
Автор ответа:
 Дмитрий Юпатов



Вопросов: 4
Ответов: 457
 Web-сайт: cargomaster.at.ua/
 Профиль | | #5
Добавлено: 09.07.10 21:19
  1. Private _wdApplication As Microsoft.Office.Interop.Word.Application 'Приложение Word
  2.     Private _wdDocument As Interop.Word.Document = _wdApplication.ActiveDocument 'Документ Word
  3.  Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
  4.         lblWord.Text = (_wdDocument.SpellingErrors.Count)
  5.     End Sub

а теперь в загрузке формы твоей проги:
  1. _wdApplication = System.Type.GetTypeFromProgID("Word.Application")

таким образом ты получаешь доступ к запущенному экземпляру ворда.
А в твоем коде начальном ты создавал НОВЫЙ экземпляр Ворда. Вот тогда в нем сначала нужно было открыть документ и затем его анализировать. Ну и потом либо закрывать программно, либо сделать
  1. _wdApplication.Visible = True
чтоб иметь возможность закрыть ворд ручками, а не диспетчером задач

Ответить

Номер ответа: 6
Автор ответа:
 Dan



ICQ: 609276007 

Вопросов: 24
Ответов: 195
 Профиль | | #6 Добавлено: 11.07.10 11:35
Спасибо. Буду разбираться.

Ответить

Номер ответа: 7
Автор ответа:
 Dan



ICQ: 609276007 

Вопросов: 24
Ответов: 195
 Профиль | | #7 Добавлено: 11.07.10 12:15
Пишет:
An error occurred creating the form. See Exception.InnerException for details. The error is: Данная команда недоступна, так как не открыт ни один документ.
Хотя ворд открыт.
  1. Public Class Form1
  2.     Private _wdApplication As New Microsoft.Office.Interop.Word.Application 'Приложение Word
  3.     Private _wdDocument As Microsoft.Office.Interop.Word.Document = _wdApplication.ActiveDocument 'Документ Word
  4.     Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
  5.         lblWord.Text = (_wdDocument.SpellingErrors.Count)
  6.     End Sub
  7.  
  8.     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  9.         _wdApplication = System.Type.GetTypeFromProgID("Word.Application")
  10.     End Sub
  11. End Class

Ответить

Номер ответа: 8
Автор ответа:
 VbStarter



ICQ: 357911808 

Вопросов: 118
Ответов: 1340
 Web-сайт: moscowdevils.ru
 Профиль | | #8
Добавлено: 11.07.10 13:43
...

Ответить

Номер ответа: 9
Автор ответа:
 Dan



ICQ: 609276007 

Вопросов: 24
Ответов: 195
 Профиль | | #9 Добавлено: 11.07.10 15:17
...

?

Ответить

Номер ответа: 10
Автор ответа:
 Дмитрий Юпатов



Вопросов: 4
Ответов: 457
 Web-сайт: cargomaster.at.ua/
 Профиль | | #10
Добавлено: 11.07.10 21:41
так попробуй привязаться к ворду
  1. :_wdApplication = System.Runtime.InteropServices.Marshal.GetActiveObject("Word.Application")

Ответить

Номер ответа: 11
Автор ответа:
 Dan



ICQ: 609276007 

Вопросов: 24
Ответов: 195
 Профиль | | #11 Добавлено: 12.07.10 15:17
Выводит ту же ошибку.

Ответить

Номер ответа: 12
Автор ответа:
 Дмитрий Юпатов



Вопросов: 4
Ответов: 457
 Web-сайт: cargomaster.at.ua/
 Профиль | | #12
Добавлено: 12.07.10 16:50
не знаю. Если открыт ворд на момент загрузки формы, и открыт хоть один документ в нем, то должно работать.
Причем оба варианта.

Ответить

Номер ответа: 13
Автор ответа:
 Dan



ICQ: 609276007 

Вопросов: 24
Ответов: 195
 Профиль | | #13 Добавлено: 13.07.10 10:45
Спасибо.

Ответить

Номер ответа: 14
Автор ответа:
 Dan



ICQ: 609276007 

Вопросов: 24
Ответов: 195
 Профиль | | #14 Добавлено: 13.07.10 10:53
Всё работает!!!

Ответить

Номер ответа: 15
Автор ответа:
 Dan



ICQ: 609276007 

Вопросов: 24
Ответов: 195
 Профиль | | #15 Добавлено: 13.07.10 11:07
А можно узнать запущен ли ворд? Есть мнение, что можно с помощью ServiceController. Но не знаю как им пользоваться.

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам