Заполнение таблицы в Word. Ошибка повторного заполнения

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
ArtNeoX
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 17.02.2014 (Пн) 18:41

Заполнение таблицы в Word. Ошибка повторного заполнения

Сообщение ArtNeoX » 17.02.2014 (Пн) 18:58

По нажатию кнопки происходит запуск Word, в нем рисуется таблица, устанавливается разная ширина столбцов, в один из них вставляется текст.
Все отлично. Выходим из Word [x]
Из созданной программы в VB6 не выходим, а нажимаем кнопку для запуска word повторно и получаем результат - все колонки одинаковой ширины.
Не пойму почему при повторном запуске программы в word не устанавливается ширина столбцов.


Код: Выделить всё
Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)
Select Case Button.Key
Case Is = "cmdWord"
On Error Resume Next
Dim WordApp As Word.Application
Set WordApp = New Word.Application
WordApp.Visible = False
'Set DocWord = WordApp.Documents.Open("C:\123.doc")
DocWord.Activate
Set TableWord = DocWord.Tables.Add(DocWord.Range(), 6, 7)
TableWord.Columns(1).Width = CentimetersToPoints(1.26)
TableWord.Columns(2).Width = CentimetersToPoints(3.15)
TableWord.Columns(3).Width = CentimetersToPoints(0.75)
TableWord.Columns(4).Width = CentimetersToPoints(3.21)
TableWord.Columns(5).Width = CentimetersToPoints(0.42)
TableWord.Columns(6).Width = CentimetersToPoints(2.95)
TableWord.Columns(7).Width = CentimetersToPoints(5.93)
TableWord.Cell(1, 5).Range.Text = "Текст в таблице" & vbCrLf
WordApp.Visible = True
End With
End Select
End Sub

[Viper] :: Полmзуемся тэгом CODE, это гораздо удобнее!

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Заполнение таблицы в Word. Ошибка повторного заполнения

Сообщение FireFenix » 18.02.2014 (Вт) 3:27

ArtNeoX писал(а):Set DocWord = WordApp.Documents.Open("C:\123.doc")

открыть, то открыл. А закрывать то кто будет?
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

ArtNeoX
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 17.02.2014 (Пн) 18:41

Re: Заполнение таблицы в Word. Ошибка повторного заполнения

Сообщение ArtNeoX » 18.02.2014 (Вт) 20:44

как это правильно сделать?
программа создает экземпляр ворд, в нем открывает документ.
если я закрываю документ оставляя ворд работать без документа, то при повторном нажатии на кнопку в программе все формируется нормально.
если я закрываю ворд вместе с документом, а затем жму кнопку в программе, то файл формируется без установки ширины столбцов в таблице, как будто он просто пропускает этот кусок кода.
можно ли сделать что бы закрыв ворд с документом [х] и нажав в программе открыть документ у меня формировалось как при первом запуске.
а то эта проблема решается только перезапуском программы.

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Заполнение таблицы в Word. Ошибка повторного заполнения

Сообщение FireFenix » 18.02.2014 (Вт) 23:45

ArtNeoX писал(а):а то эта проблема решается только перезапуском программы.

Потому, что ты не закрываешь Документ/Файл. При повторном открытии - уже открытый файл, будет доступен только для чтения

ArtNeoX писал(а):как это правильно сделать?

Вначале перестать использовать On Error Resume Next и внимательно читать возникающее ошибки

Потом - правильно построить логику:

* Работа с файлом только внутри функции
Код: Выделить всё
Открыть Файл.
Занести изменения.
Сохранить Файл.
Закрыть Файл.

* Работа с файлом в течении работы программы
Код: Выделить всё
Запустить программу
Открыть Файл и сохранить его объект в глобальной переменной

-- Работа с файлом из глобальной переменной в функции 1
-- Работа с файлом из глобальной переменной в функции 2
...
-- Работа с файлом из глобальной переменной в функции N

Перед закрытием программы - сохраняем изменения.
Закрываем Файл
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

ArtNeoX
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 17.02.2014 (Пн) 18:41

Re: Заполнение таблицы в Word. Ошибка повторного заполнения

Сообщение ArtNeoX » 19.02.2014 (Ср) 18:54

можно конкретный пример.
у меня программа открывает чистый лист с логотипом в колонтитулах, рисуется таблица, устанавливается разная ширина столбцов, вставляется текст.
При первом запуске все работает идеально.
Закрываю ворд вместе с открытым шаблоном. Все нету открытого файла и запущенного ворда.
Нажимаю в своей программе кнопку для создания таблицы в ворде.
Запускается, все рисует, заполняет, НО НЕ УСТАНАВЛИВАЕТ ШИРИНУ СТОЛБЦОВ.
Почему то пропускает этот кусок кода.
Может в памяти остается что то. Непойму. Объясните новичку на конкретном примере.
Очень надо.

Alec
Бывалый
Бывалый
 
Сообщения: 275
Зарегистрирован: 31.08.2008 (Вс) 0:15
Откуда: Ростов-на-Дону

Re: Заполнение таблицы в Word. Ошибка повторного заполнения

Сообщение Alec » 19.02.2014 (Ср) 20:52

Пропускает, потому что ты сам с помощью On Error Resume Next это и сделал. Вот и пропускает ошибки.
Ошибка, честно - не знаю почему, возникает в строках
Код: Выделить всё
TableWord.Columns(1).Width = CentimetersToPoints(1.26)
и т.д., а именно на методе CentimetersToPoints
Попробуй поменять на
Код: Выделить всё
TableWord.Columns(1).Width = WordApp.CentimetersToPoints(1.26)
ну или задавай ширину непосредственно в пунктах.
Иногда лучше вовремя остановиться...
И начать заново!

ArtNeoX
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 17.02.2014 (Пн) 18:41

Re: Заполнение таблицы в Word. Ошибка повторного заполнения

Сообщение ArtNeoX » 19.02.2014 (Ср) 22:33

Все заработало ! Огромное спасибо :D
А всего то надо было дописать WordApp.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, Google-бот и гости: 83

    TopList