Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.04.2009, 18:51   #1
Oooleg
Пользователь
 
Регистрация: 30.03.2009
Сообщений: 39
Радость Импорт таблиц из *.rft в Excel, небольшая проблемка

Суть проблемы:
Есть отчеты создаваемые внешним приложением в формате .rtf, нужно их вгрузить в Excel для последующей обработки. Я попытался это реализовать через Word т.к. ничего лучше не придумал

код:

Private Sub CommandButton5_Click()

Dim curDir, dataFile As String, WordObject As Object

dataFile = "\hydrostatic.rtf"
curDir = ActiveWorkbook.Path

Application.DisplayAlerts = False
Application.ScreenUpdating = False

With CreateObject("Word.Application")
.DisplayAlerts = wdAlertsNone
.Documents.Open Filename:=curDir & dataFile, ReadOnly:=True
.Selection.WholeStory
.Selection.Copy
.Quit
End With
Set WordObject = Nothing

With Sheets("one_f_in")
.Cells(1, 1).Select
.paste
End With
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub


в принципе работает, но в процесе выполнения Word выдает два меседжа следующего содержания:

"Неверно указана единица измерения"

а следом за ним

"Невозможно закрыть приложение Microsoft Office Word, так как открыто диалоговое окно. Нажмите кнопку "Ok", перейдите в приложение Word и закройте это окно."


а теперь вопрос почему это происходит и как от этого избавиться?

файл rtf прилагаю (хотя в ворде он открывается без проблем )

Последний раз редактировалось Oooleg; 09.04.2009 в 18:59.
Oooleg вне форума Ответить с цитированием
Старый 09.04.2009, 19:23   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Сразу бросаются в глаза эти 2 строчки:

Код:
With CreateObject("Word.Application") 
.DisplayAlerts = wdAlertsNone
Вы используете раннее или позднее связывание?
Короче говоря, у вас подключена к проекту библиотека Word?

1) Если подключена, то не проще ли так:
dim wa as new word.application
with wa
...


2) Если не подключена (о чем свидетельствует запись WordObject As Object), то не надо использовать вордовские константы типа wdAlertsNone - в этом случае они будут возвращать ноль.
Возможно, ошибка "Неверно указана единица измерения" как раз из-за этого.

Далее,
Цитата:
"Невозможно закрыть приложение Microsoft Office Word, так как открыто диалоговое окно.
Так поставьте после строки With CreateObject("Word.Application")
строку .visible = true
и увидите те самые сообщения. Тогда хоть будет понятно, из-за чего они появляются.

Цитата:
файл rtf прилагаю
К чему Вы его прилагаете?
EducatedFool вне форума Ответить с цитированием
Старый 09.04.2009, 21:26   #3
Oooleg
Пользователь
 
Регистрация: 30.03.2009
Сообщений: 39
По умолчанию

hydrostatic.doc

в rtf формате не грузится сори
Oooleg вне форума Ответить с цитированием
Старый 09.04.2009, 21:32   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

А зачем нам Вордовский документ?

Проблема-то не в нём, а в Excel-евском макросе...
Его надо написать без ошибок, и всё будет работать.
EducatedFool вне форума Ответить с цитированием
Старый 10.04.2009, 10:37   #5
Oooleg
Пользователь
 
Регистрация: 30.03.2009
Сообщений: 39
По умолчанию

Подключил библиотеку Microsoft Word 12.0 Object Library
Код теперь выглядит следующим образом:

Dim curDir, dataFile As String, WA As New Word.Application

dataFile = "\hydrostatic.rtf"
curDir = ActiveWorkbook.Path

With WA
.Visible = True
.Documents.Open Filename:=curDir & dataFile, ReadOnly:=True
.Selection.WholeStory
.Selection.Copy
.Quit
End With

With Sheets("one_f_in")
.Cells(1, 1).Select
.paste
End With


а сообщения вот так:
первое
Запись.jpg
второе
Запись2.jpg

в чем проблема по прежнему не понятно...
Oooleg вне форума Ответить с цитированием
Старый 10.04.2009, 11:21   #6
mchip
Форумчанин
 
Регистрация: 24.06.2008
Сообщений: 516
По умолчанию

Попробуй заменить

.Selection.WholeStory

на

ActiveDocument.Tables(1).Select

Обе проблемы снимаются

(это если нужно только таблица)
Можно сделать все! Было бы время, да деньги...

Последний раз редактировалось mchip; 10.04.2009 в 11:27.
mchip вне форума Ответить с цитированием
Старый 10.04.2009, 11:45   #7
mchip
Форумчанин
 
Регистрация: 24.06.2008
Сообщений: 516
По умолчанию

Можно еще так:
.Quit - убрать

В конце вставить

WA.Quit SaveChanges:=wdDoNotSaveChanges

Тогда будет копироваться весь документ вместе с графиком
Можно сделать все! Было бы время, да деньги...
mchip вне форума Ответить с цитированием
Старый 10.04.2009, 15:26   #8
Oooleg
Пользователь
 
Регистрация: 30.03.2009
Сообщений: 39
По умолчанию

Цитата:
Сообщение от mchip Посмотреть сообщение
Попробуй заменить

.Selection.WholeStory

на

ActiveDocument.Tables(1).Select

Обе проблемы снимаются

(это если нужно только таблица)


Количество таблиц в отчетах разное, но даже если закрыть на это глаза то проблему такой вариант не решает, поскольку первый меседж возникает при первом упоминании объекта WA

WA.Visible = True

и вот вам здрасте! Запись.jpg ну и так далее...
Oooleg вне форума Ответить с цитированием
Старый 10.04.2009, 15:32   #9
Oooleg
Пользователь
 
Регистрация: 30.03.2009
Сообщений: 39
По умолчанию

Цитата:
Сообщение от mchip Посмотреть сообщение
Можно еще так:
.Quit - убрать

В конце вставить

WA.Quit SaveChanges:=wdDoNotSaveChanges

Тогда будет копироваться весь документ вместе с графиком
А такой вариант ругается при вставке данных в Excel Запись3.jpg
Oooleg вне форума Ответить с цитированием
Старый 10.04.2009, 15:33   #10
mchip
Форумчанин
 
Регистрация: 24.06.2008
Сообщений: 516
По умолчанию

Вот. Все работает без ошибок.
Вложения
Тип файла: zip Пример.zip (28.4 Кб, 30 просмотров)
Можно сделать все! Было бы время, да деньги...
mchip вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Borland C++ Builder - импорт из Excel в StringGrid nuser C++ Builder 3 10.01.2015 12:38
Импорт таблиц АлёнаP Microsoft Office Access 0 18.03.2009 16:45
Импорт из Excel в Access AD_min БД в Delphi 0 28.10.2008 09:29
У меня возникла небольшая проблемка с определением последнего активного окна. hoza_syl Помощь студентам 6 23.05.2008 17:03
Небольшая работа (1000р) Excel magellan Фриланс 3 13.01.2008 19:18