powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Автоматизация. Как убить ссылку которая торчит в памяти?
25 сообщений из 25, страница 1 из 1
Автоматизация. Как убить ссылку которая торчит в памяти?
    #32373269
Фотография # Darth Vader #
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня из базы информация определенным образом группируется и поступает в документ Word. Все работает в принципе нормально. Делаю я все ч/з объектную Word - вскую библиотеку. Ну т.е . завожу объекты типа word.application and word.document. Все работает. Но стоит мне закрыть Word и повторить перекачку данных в новый документ, дает ошибку пишет что ссылка уже существует. Нажимая Ctrl+Alt+Delete и действительно вижу , Word торчит
Но я в конце процедуры использую очистку объектных переменных с помощью Nothing . В чем же дело? Видать не доходит до места с Nothing. Как уничтожить ссылку?\

(кстати это все в windows 98).


Вот впрочем кусок кода.

Dim wrd As Word.Application
Set wrd = CreateObject("word.application")
With wrd

.Documents.Add



With ActiveDocument.PageSetup
.LineNumbering.Active = False
.Orientation = wdOrientLandscape
.TopMargin = CentimetersToPoints(1)
.BottomMargin = CentimetersToPoints(1)
.LeftMargin = CentimetersToPoints(0.3)
.RightMargin = CentimetersToPoints(0.3)
.Gutter = CentimetersToPoints(0)
.HeaderDistance = CentimetersToPoints(1.25)
.FooterDistance = CentimetersToPoints(1.25)
.PageWidth = CentimetersToPoints(29.7)
.PageHeight = CentimetersToPoints(21)
.FirstPageTray = wdPrinterDefaultBin
.OtherPagesTray = wdPrinterDefaultBin
.SectionStart = wdSectionNewPage
.OddAndEvenPagesHeaderFooter = False
.DifferentFirstPageHeaderFooter = False
.VerticalAlignment = wdAlignVerticalTop
.SuppressEndnotes = False
.MirrorMargins = False
End With
If ActiveWindow.View.SplitSpecial <> wdPaneNone Then
ActiveWindow.Panes(2).Close
End If
If ActiveWindow.ActivePane.View.Type = wdNormalView Or ActiveWindow. _
ActivePane.View.Type = wdOutlineView Or ActiveWindow.ActivePane.View.Type _
= wdMasterView Then
ActiveWindow.ActivePane.View.Type = wdPageView
End If
With ActiveDocument.PageSetup.TextColumns
.SetCount NumColumns:=3
.EvenlySpaced = True
.LineBetween = False
.Width = CentimetersToPoints(8.87)
.Spacing = CentimetersToPoints(1.25)
End With

.....

потом идут действия где я используя DAO . Recordset - отбираю записи и пихаю в документ активный. И в конце вот очищаю ссылки

.....

Set wrd = Nothing
Set rs1 = Nothing
Set rs2 = Nothing
Set rs3 = Nothing
Set rs4 = Nothing

В Access ссылка на библиотеку word стоит.


Помогите с вопросом , ребята! Кто возился с автоматизацией Access & Word?
...
Рейтинг: 0 / 0
Автоматизация. Как убить ссылку которая торчит в памяти?
    #32373276
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Word еще и Закрывать надо
...
Рейтинг: 0 / 0
Автоматизация. Как убить ссылку которая торчит в памяти?
    #32373279
Фотография Темный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИМХО: торчит не указатель (та самая ссылка, но указатель мне приятнее), а объект, который ты создал при помощи этого указателя. В конце ты просто очищаешь сам указатель. Он указывает в Великое ничто. Но объет то остался!
Но вот как его закрыть - не заню :)
f1 в word help VBA и какой-нить Close или Terminate. ХЗ...
...
Рейтинг: 0 / 0
Автоматизация. Как убить ссылку которая торчит в памяти?
    #32373281
Фотография Темный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мда. Обпозднел.
Senin Viktor уже все гораздо понятнее объяснил :)
...
Рейтинг: 0 / 0
Автоматизация. Как убить ссылку которая торчит в памяти?
    #32373292
Фотография # Darth Vader #
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Senin Viktor
Так ведь закрываю Word , а по тройному нажатию он все равно виден!

2 Темный
Спасибо. Просветил! И как же этот объект убить, почему он не уничтожается когда я Word закрываю?

Что этот объект из себя представляет? Word.Application? Ведь именно его я создаю через CreateObject . Он, да он. Как его уничтожить то?
...
Рейтинг: 0 / 0
Автоматизация. Как убить ссылку которая торчит в памяти?
    #32373303
Фотография # Darth Vader #
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В свете полученной информации перефразирую вопрос.
Как убить не ссылку , а объект Word ?
...
Рейтинг: 0 / 0
Автоматизация. Как убить ссылку которая торчит в памяти?
    #32373310
наутилус
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что-то похожее у меня было с Excel
я делал ему .quit но он всё равно висел в процесах.
народ посоветовал делать не только
set myexcel=nothing
но и nothing ко все объектам типа sheets
может Вам стоит делать nothing не только к word.application а так же и к documents?

с ув. наутилус
...
Рейтинг: 0 / 0
Автоматизация. Как убить ссылку которая торчит в памяти?
    #32373312
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Eternal
>Так ведь закрываю Word , а по тройному нажатию он все равно виден!

найди мне в твоем коде строку wrd.Quit, а заодно и ActiveDocument.Сlose
...
Рейтинг: 0 / 0
Автоматизация. Как убить ссылку которая торчит в памяти?
    #32373318
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
теперь АпАздАл я
...
Рейтинг: 0 / 0
Автоматизация. Как убить ссылку которая торчит в памяти?
    #32373342
Фотография # Darth Vader #
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Виктор!
Надо чтобы Access cформировал word -вский документ и оставил его на экране.Юзер сам его сохранит и закроет . Но он закрывает его, а Word все равно висит!
...
Рейтинг: 0 / 0
Автоматизация. Как убить ссылку которая торчит в памяти?
    #32373366
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Надо чтобы Access cформировал word -вский документ и оставил его на экране.Юзер сам его сохранит и закроет . Но он закрывает его, а Word все равно висит!

Ну вот по-тихоньку все и обрисововаеться.
У меня точно такая же ситуация для Екцеля - работает на ура. Могу только рекомендовать отказать от ActiveDocument в пользу явной ссылки на объект типа Word.Document, которую потом и делать Nothing
...
Рейтинг: 0 / 0
Автоматизация. Как убить ссылку которая торчит в памяти?
    #32373389
Фотография # Darth Vader #
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо!
Т.е создаем приложением Word.Application и потом добавляем word.Document . Так , а потом шлепаем ссылку именно на word.document .

Теперь бы вспомнить как сделать явную ссылку на документ Может здесь имется ввиду физически создать документ на винте, а потом его открыть? Или как?

Знатоки word - вской объектной библиотеки как назло наверное водку пьют.

Или кто знает?

Виктор спасибо.
...
Рейтинг: 0 / 0
Автоматизация. Как убить ссылку которая торчит в памяти?
    #32373418
Alexus12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Надо чтобы Access cформировал word -вский документ и оставил его на экране.Юзер сам его сохранит и закроет . Но он закрывает его, а Word все равно висит!

Виктор! У тебя чудеса! на очень многих машинах зависает или "недопустимку творит" при таком раскладе

Eternal!
Вот выход:
создавай документ (можно так, чтобы юзер и не видел процесс - прячь окно ворда)
потом программно закрывай его и сам ворд (сначала save, затем quit или что там - с кучей doevents между ними кстати) и все ссылки по окончании убивай

А после этого ОТКРЫВАЙ свежесозданный документ для работы юзера
командой типа
Shell("start " & "тут полный путь к файлу", видокнаоткрытия)
- и никаких проблем не будет
...
Рейтинг: 0 / 0
Автоматизация. Как убить ссылку которая торчит в памяти?
    #32373475
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Alexus12
>Виктор! У тебя чудеса! на очень многих машинах зависает или "недопустимку творит" при таком раскладе

Ну чудеса, конечно, были - только не долго :)

Вот примерно так для екцеля строится работа

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
' есть что-то на уровне модуля
Private xl As Excel.Application
Private wb As Excel.Workbook
Private ws As Excel.Worksheet

'есть что-то на уровне процедур
    Dim w As Excel.Window
    Dim ps As Excel.PageSetup
    Dim wbResult As Excel.Workbook
    Dim wsResult As Excel.Worksheet
    Dim wbTrans As Excel.Workbook  

....

Form_frm0OutPutToExcel_RunProg_Exit:
    On Error Resume Next
    Set ps = Nothing
    Set ws = Nothing

    wb.Close SaveChanges:=False
    Set wb = Nothing

    Set wsResult = Nothing
    Set wbResult = Nothing
    wbTrans.Close SaveChanges:=False
    Set wbTrans = Nothing

    xl.ScreenUpdating = True
    xl.Visible = True
    Set xl = Nothing



Очищаем переменные согласно их "иерархии": сперва PageSetup и Лист, затем книга, затем сам екцел.
...
Рейтинг: 0 / 0
Автоматизация. Как убить ссылку которая торчит в памяти?
    #32373480
Фотография # Darth Vader #
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за выкладки.

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

Ты подскажи именно как выпутаться с условием , что уже открыт Word и добавлен документ, в него "слиты" и сгруппированы записи из БД.
...
Рейтинг: 0 / 0
Автоматизация. Как убить ссылку которая торчит в памяти?
    #32373497
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Но пользователь сам хочет сохранять документ

strFilePath="С:\Хде та на белом свете\й.xls"
wbResult.SaveAs FileName:=strFilePath

>Ты подскажи именно как выпутаться с условием , что уже открыт Word

Тогда ссылку можно получить на Ворд через GetObject

>и добавлен документ, в него "слиты" и сгруппированы записи из БД.

Тогда надо просто получить ссылку на этот уже открытый документ и делать с этим документом все, что душе угодно.
...
Рейтинг: 0 / 0
Автоматизация. Как убить ссылку которая торчит в памяти?
    #32373504
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот это у меня работает и не виснет

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
On Error GoTo EndProc
  
  Dim WordApp As Word.Application
  Dim Range As Word.Range
  Dim Document As Word.Document

  If Me.NewRecord Then
    Beep
    GoTo EndProc
  Else
    Me.ПредлНом.SetFocus
    DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
  End If
  
  If Nz(GetMainValue( "ДирГотПредл" ),  "") = "  " Then
    Beep
    MsgBox " Не указан файл шаблона бланка-предложения! "
    GoTo EndProc
  End If
  
  On Error Resume Next
  FileCopy GetMainValue(" ФайлШаблПредл "), Nz(GetMainValue(" ДирГотПредл "), "  ") & Nz(Me.ПредлНом, "  ") & Format(Me.ДатаПредл, "  dd-mm-yy ") & " .doc "
  If Err.Number Then
    MsgBox " Не могу скопировать файл  " & GetMainValue(" ФайлШаблПредл ")
    GoTo EndProc
  End If
  On Error GoTo EndProc
  
  Set WordApp = CreateObject(" Word.Application ")
  
  WordApp.Application.Documents.Open Nz(GetMainValue(" ДирГотПредл "), "  ") & Nz(Me.ПредлНом, "  ") & Format(Me.ДатаПредл, "  dd-mm-yy ") & " .doc "
  Set Document = WordApp.Application.ActiveDocument
  Set Range = Document.Range

  Range.Find.Execute FindText:=" %Receiver% ", ReplaceWith:=Nz(Me.Контра.Column(5 ), " "), Replace:=wdReplaceAll
  Range.Find.Execute FindText:=" %Ingener% ", ReplaceWith:=Nz(Me.КонтЛицо.Column(1 ), " "), Replace:=wdReplaceAll
  Range.Find.Execute FindText:=" %Sender% ", ReplaceWith:="  ", Replace:=wdReplaceAll
  Range.Find.Execute FindText:=" %DateSend% ", ReplaceWith:=Nz(Me.ДатаПредл, "  "), Replace:=wdReplaceAll
  Range.Find.Execute FindText:=" %FaxNumber% ", ReplaceWith:=Nz(Me.Контра.Column(4 ), " "), Replace:=wdReplaceAll
  Range.Find.Execute FindText:=" %PhoneNumber% ", ReplaceWith:=Nz(Me.Контра.Column(4 ), " "), Replace:=wdReplaceAll
  Range.Find.Execute FindText:=" %Pages% ", ReplaceWith:="  1  ", Replace:=wdReplaceAll
  Range.Find.Execute FindText:=" %NumDoc% ", ReplaceWith:=Nz(Me.ПредлНом, " "), Replace:=wdReplaceAll
  
  Document.Save
  WordApp.Visible = True

EndProc:
  On Error Resume Next
'  WordApp.Quit - убрано '
  On Error GoTo  0 
  Set Range = Nothing
  Set Document = Nothing
  Set WordApp = Nothing
Exit Function
...
Рейтинг: 0 / 0
Автоматизация. Как убить ссылку которая торчит в памяти?
    #32373508
Фотография # Darth Vader #
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Тогда надо просто получить ссылку на этот уже открытый документ и делать с этим документом все, что душе угодно.

Виктор!
Во во во! Это и нужно! Только вот как это "замочить" то? Как получить ссылку на открытый документ? Эта ссылка ведь Access создается? Им же и надо убить? Когда Word обычным образом закрываю, он не торчит же скрыто! А эта черт её дери автоматизация все переворачивает

Вечером из дома зайду в интернет и посмотрю. А сейчас надо домой.

Виктор еще раз спасибо.
...
Рейтинг: 0 / 0
Автоматизация. Как убить ссылку которая торчит в памяти?
    #32373628
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To [Eternal] проблема в непоказанном куске, который обозначен как

.....

потом идут действия где я используя DAO . Recordset - отбираю записи и пихаю в документ активный. И в конце вот очищаю ссылки

.....

Существо проблемы приблизительно вот в чем - в какой-то момент запускается ВТОРАЯ КОПИЯ Worda, причем документ в скрытом виде остается висеть, или документ в нем может быть даже закрыт, а эекземпляр остался.
Надо найти кто это делает.


Советы.
-2) что там за платформа и нет ли антивирусов каких, если есть,
переходи к -1), иначе к 0)

-1) (сервиспаки)

0) По завершении своей могучей процедуры запусти Word нормально, "обычным способом". В пункте меню окно посмотри, что творится со списком документов. Может быть все СРАЗУ поймешь

1) В своем коде, в первую очередь, ищи куски, организующие слияние, или пользущие WordApp.Run

С Уважением,
Виктоша
...
Рейтинг: 0 / 0
Автоматизация. Как убить ссылку которая торчит в памяти?
    #32373631
Фотография # Darth Vader #
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сижу вожусь уже дома.
...
Рейтинг: 0 / 0
Автоматизация. Как убить ссылку которая торчит в памяти?
    #32373636
Фотография AlexJuice
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
насколько я помню, решил такую проблему отказом от присвоения объектной переменной самого приложения.
То есть объявляешь
Dim doc As Word.Document
а дальше работаешь с ним. Если же нужно добраться до приложения,
используешь
doc.Application
(Надеюсь, вспомнил правильно, потому что времени на поиски нет)
...
Рейтинг: 0 / 0
Автоматизация. Как убить ссылку которая торчит в памяти?
    #32373638
Alexus12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Но пользователь сам хочет сохранять документ , где ему в голову взбредет. Если бы этого было не нужно, а нужно было
создавать готовый документ на винте, я бы думаю проблему решил бы.

Родной!
А как гаран-консультант-прочие щастья работают, выводя документ в ворд?
ПИШУТ ВРЕМЕННЫЙ ФАЙЛ КУДА сами программы ХОТЯТ (обычно хотят в win/temp)
а потом открывают его оттеда как я сказал (через API - то же самое будет)
- и юзер уже сохраняет куда хочет.
Зачэм велосепед изобретать и с зависонами описанными мучиться?!
...
Рейтинг: 0 / 0
Автоматизация. Как убить ссылку которая торчит в памяти?
    #32373994
Фотография # Darth Vader #
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я понял тебя.
...
Рейтинг: 0 / 0
Автоматизация. Как убить ссылку которая торчит в памяти?
    #32374236
Фотография SergeySV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У тебя скорей всего что-то напутано с ссылками. Вот накатал примерчик:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
  Dim WordApp As Word.Application
  Dim Document As Word.Document
   
  Set WordApp = CreateObject( "Word.Application" )
  Set Document = WordApp.Application.Documents.Add

  WordApp.Visible = True

  Set WordApp = Nothing
  Set Document = Nothing


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

Проверь повнимательнее все свои ссылки, если ты WordApp обнулишь, а Document оставишь, то система Word не отпустит и он будет висеть.

Отдельный разговор, если ты сам хочешь закрыть Word (программно), тоды надо одними Nothing не обойдешься, тут надо принудительно вызвать WordApp.Save [SaveChanges], а потом уже Nothing и тогда по идее все закроется, правда народ говорит, что на некоторых конфигурациях он иногда все таки забывает закрыться, но это уже глюки, с ними боряться в Microsoft :)
...
Рейтинг: 0 / 0
Автоматизация. Как убить ссылку которая торчит в памяти?
    #32374245
Фотография SergeySV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
очепятка:
имел ввиду - принудительно вызвать WordApp.Quit [SaveChanges]
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Автоматизация. Как убить ссылку которая торчит в памяти?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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