Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Возникновение ошибки "через раз" / 20 сообщений из 20, страница 1 из 1
23.02.2016, 22:31
    #39177267
Koriolan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возникновение ошибки "через раз"
Добрый день.

Возникла проблема следующего плана. При щелчке на кнопке в форме открывается копия документа Word, в котором находим соответсвующую метку и вводим текст, взятый из поля этой самой формы. Технически это реализуется при помощи слудющей процедуры:
автор'Процедура перехода к необходимой метке и вставка соответсвуюещго текста
Public Sub TextInMetka(metka, content)
Selection.GoTo What:=wdGoToBookmark, Name:=metka
With ActiveDocument.bookmarks
.DefaultSorting = wdSortByName
.ShowHidden = False
End With

TypeText (content)

metka = ""
content = ""

End Sub

Проблема в том, что код срабатывает через раз. При закрытии файла Word и повторном запуске данной процедуры возникает ошибка в строке

авторSelection.GoTo What:=wdGoToBookmark, Name:=metka

т.е., как я понимаю, не удается найти указанную метку. Хотя оная в документе присутствует.

Подскажите, что я упускаю?
...
Рейтинг: 0 / 0
23.02.2016, 22:35
    #39177272
Predeclared
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возникновение ошибки "через раз"
Где описана процедура TextInMetka?
...
Рейтинг: 0 / 0
23.02.2016, 22:43
    #39177275
Koriolan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возникновение ошибки "через раз"
Predeclared, в модуле базы данных.

Вызов процедуры при щелчке:


Private Sub Кнопка126_Click()
'Готовим шаблон приказа
OpenBlank

'Рабочие переменные

Dim DataPrint As Date

Dim NumberPrint As Integer

Dim ThemePrint As String

Dim Preambula As String


'Присваиваем переменным необходимые данные

DataPrint = Forms!Книга_Наказів!ДатаНаказуДрук

NumberPrint = Forms!Книга_Наказів!НомерНаказу



Call TextInMetka("ДатаНаказу", DataTextInNakaz(DataPrint))

Call TextInMetka("НомерНаказу", NumberPrint)




End Sub
...
Рейтинг: 0 / 0
23.02.2016, 22:51
    #39177280
Predeclared
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возникновение ошибки "через раз"
Код: vbnet
1.
2.
    Selection
    ActiveDocument


Эти методы нужно привязать к их объектам.
...
Рейтинг: 0 / 0
23.02.2016, 22:56
    #39177286
Koriolan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возникновение ошибки "через раз"
Predeclared, В смысле?
...
Рейтинг: 0 / 0
23.02.2016, 23:13
    #39177288
Predeclared
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возникновение ошибки "через раз"
Ты пользуешь свойства объекта Application, которые есть в объектной модели WORD,
и которые в VBA проекте Word-а могут быть описаны без указания самого объекта (Application).

В объектной модели Access у объекта Application нет таких свойств,
потому надлежит описывать полностью Объект.Свойство

Неполное описание "проскакивает" в первый раз, и подвешивает экземпляр Word-а.
При следующем попытке возникают ошибки.

зы: а лучше вообще отказаться от пользования этих свойств.
...
Рейтинг: 0 / 0
23.02.2016, 23:30
    #39177295
Koriolan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возникновение ошибки "через раз"
В начале я писал следующее:

Option Compare Text
Option Explicit

Dim obWord As Object 'сам Word - Application
Dim obWindow As Object 'окно документа

этого, выходит не достаточно??
...
Рейтинг: 0 / 0
23.02.2016, 23:40
    #39177299
Predeclared
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возникновение ошибки "через раз"
Просто описать объектные переменные недостаточно ни для каких целей.

Во-первых, им нужно присвоить значения - ссылки на объекты.
Set obWord = ...

Во вторых, пользуя методы и свойства этого объекта,
надлежит указывать и сам объект:
obWord.Selection
obWord.ActiveDocument

Засада кроется еще и в том, что на момент исполнения кода
имеется вероятность того, что и Selection и ActiveDocument
вернут ссылки не на то, что планировалось.

Вместо ActiveDocument, например, я бы рекомендовал указывать конкретный экземпляр коллекции Documents.
...
Рейтинг: 0 / 0
23.02.2016, 23:48
    #39177304
Koriolan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возникновение ошибки "через раз"
Может я немного направильно понял Тебя, но когда речь идет о "ссылке на объект" ,что именно подразумевается? Если речь идет об адресе Word'овского файла, то в моем случае, физически он нигде не находится. Я работаю с копией документа, взятого из поля OLE, находящегося в другой таблице базы. Подготовка самого бланка происходит в процедуре openblank вызваной при щелчке. В ней следующее:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Forms!Книга_Наказів!Шаблон = DLookup("ШаблонНаказу", "Типи_наказів", "Номер=" & 1)
Forms!Книга_Наказів!Шаблон.Action = acOLEActivate



Set obWord = GetObject(, "Word.Application")
Set obWindow = obWord.ActiveDocument.ActiveWindow
obWindow.WindowState = 1
obWord.WindowState = 1
obWord.Activate
...
Рейтинг: 0 / 0
23.02.2016, 23:53
    #39177305
Predeclared
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возникновение ошибки "через раз"
Koriolan
Код: vbnet
1.
... Set obWord = GetObject(, "Word.Application") 


Вот. Все правильно.

Осталось при пользовании свойств указать, чьи свойства интересуют:
Код: vbnet
1.
obWord.Selection
...
Рейтинг: 0 / 0
23.02.2016, 23:56
    #39177307
Predeclared
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возникновение ошибки "через раз"
Еще заметил:

к TypeText тоже надо объект указать.
...
Рейтинг: 0 / 0
24.02.2016, 00:02
    #39177311
Koriolan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возникновение ошибки "через раз"
С привязкой разобрался. Спасибо. Теперь по ремарке к TypeText (content), поясни, пожалуйста.
...
Рейтинг: 0 / 0
24.02.2016, 00:05
    #39177312
Koriolan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возникновение ошибки "через раз"
Имеется ввиду это?

Код: vbnet
1.
2.
3.
Public Sub TypeText(V)
obWindow.Selection.TypeText Text:="" & V
End Sub
...
Рейтинг: 0 / 0
24.02.2016, 00:09
    #39177314
Predeclared
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возникновение ошибки "через раз"
Это метод объекта Selection библиотеки Word.
Его тоже нужно описывать полностью:
Код: vbnet
1.
obWord.Selection.TypeText 
...
Рейтинг: 0 / 0
24.02.2016, 00:14
    #39177316
Koriolan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возникновение ошибки "через раз"
ОК. Спасибо за помощь. :))
...
Рейтинг: 0 / 0
24.02.2016, 00:16
    #39177318
Predeclared
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возникновение ошибки "через раз"
А почему бы с закладками не работать "по- прямее"?

.Documents(1).Bookmarks(1).Range.Text="123"
...
Рейтинг: 0 / 0
24.02.2016, 00:25
    #39177319
Koriolan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возникновение ошибки "через раз"
В смысле обращения к метке не по имени, а по ее порядковому номеру?

Логично. Но это пока в режиме концепта :-) Мне почему-то показалось более надежным обращаться именно по имени. Тем более, что дальше по документу пойдет более сложная структура. Еще предстоит генерирование в Word таблицы с данными, взятыми из таблицы Access (и я пока смутно представляю себе этот процесс). Так что возможно, я к этому приду.
...
Рейтинг: 0 / 0
24.02.2016, 00:30
    #39177321
Predeclared
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возникновение ошибки "через раз"
Разница имелась в виду не в обращении по индексу или по имени к члену коллекции,
а в отсутствии необходимости поиска (Selection.GoTo).

По имени оно, конечно, в данном контексте, правильнее.
...
Рейтинг: 0 / 0
24.02.2016, 00:35
    #39177323
Predeclared
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возникновение ошибки "через раз"
Koriolan... Еще предстоит генерирование в Word таблицы ...
Например по закладке:
Код: vbnet
1.
2.
3.
4.
    With .Documents(1)
        With .Tables.Add(.Bookmarks("qq").Range, 2, 5)
        End With
    End With


где 2-количество строк
5 -количество столбцов
...
Рейтинг: 0 / 0
24.02.2016, 00:45
    #39177326
Koriolan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возникновение ошибки "через раз"
генерировать еще пол беды. Проблема с выборкой. Необходимо собрать данные из двух разных таблиц, и вероятно перебирать циклом. В принципе, все решаемо, только через VBA пока непривычно. (Поставил себе задачу научиться делать еще и так). но за советы спасибо. Учту.
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Возникновение ошибки "через раз" / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]