Тема: Не срабатывает - AppActivate "Microsoft Excel"

Задача простая: из Excel взять координаты полилинии в рисунке AutoCAD и продолжать дальше работать в Excel. Макрос находится в Excel. Оба документа открыты. Методом AppActivate "AutoCAD" окно AutoCAD активизируется, координаты берутся, но обратная активизация Excel методом AppActivate "Microsoft Excel" не срабатывает. Ошибку не выдает. Приходится возвращаться вручную. Скорее всего нужно что-то другое. Как обратно активизировать Excel?

Re: Не срабатывает - AppActivate "Microsoft Excel"

> Saor
В Office 2003 я использую примерно такой вариант:
(измени название рисунка и листа книги)

Sub Ac2Ex()
Dim objAcad As AcadApplication
Dim p, i, retCoord
Dim fn As String
Dim objDoc As AcadDocument
Dim oEnt As AcadEntity
Dim oPline As AcadLWPolyline
On Error GoTo Err_Msg
Set objAcad = CreateObject("AutoCAD.Application")
fn = ThisWorkbook.Path & "\MyDrawing.dwg"
objAcad.Visible = True
objAcad.WindowState = acMax
Set objDoc = objAcad.Documents.Open(fn)
objDoc.Activate
objDoc.Utility.GetEntity oEnt, p, ">> Select polyline"
If TypeOf oEnt Is AcadLWPolyline Then
Set oPline = oEnt
retCoord = oPline.Coordinates
End If
objDoc.Close False
Set objDoc = Nothing
objAcad.Quit
Set objAcad = Nothing
AppActivate ThisWorkbook.Application.Name
Dim rngObj As Range
Set rngObj = ThisWorkbook.Sheets("Sheet1").Range("A:A")
For i = 1 To UBound(retCoord) + 1
rngObj.Cells(rngObj.Row, i) = retCoord(i - 1)
Next
MsgBox "Done"
Err_Msg:
If Err Then
MsgBox Err.Description
AppActivate ThisWorkbook.Application.Name
End If
End Sub

~'J'~

Re: Не срабатывает - AppActivate "Microsoft Excel"

> [Re:] Fatty
Извиняюсь за поздний ответ: командировка.
Почему-то в Вашем коде строка
rngObj.Cells(rngObj.Row, i) = retCoord(i — 1)
у меня светится красным. Пробовал подставить - .Value, все равно светится. Пока нет времени разбираться. Все равно это мне не подойдет. В моем случае, когда оба документа открыты вручную, это - лишний листинг (плюс диалог поиска имени и пути файла) и дополнительная работа юзера. В моем случае из Excel с помошью

AppActivate "AutoCAD"
GetObject(, "AutoCAD.Application.16").ActiveDocument.Utility.GetEntity objPLin, basePnt, ""

активизируется окно AutoCAD берутся координаты полилинии и вставляются в ячейки листа Excel. Все срабатывает, но сам лист автоматичеки никак не активизируется. Пробовал

AppActivate "Microsoft Excel"
Application.Workbooks(nameBook).Worksheets(nameSheet).Activate

ошибки не выдает, но и не активизирует. Деактивация окна AutoCAD (не закрытие) то же не получается.

Re: Не срабатывает - AppActivate "Microsoft Excel"

> Saor
Извини, я не шибко какой учитель...
Мне проще 10 кодов написать чем один раз объяснить :)
Насчет ошибки в моем коде возможно копируется
неправильно отсюда, нет времени проверить
И совет (уже из учебника)
не используй неявные объявления типа:

GetObject(, "AutoCAD.Application.16").ActiveDocument.Utility.GetEntity objPLin, basePnt, ""

намного лучше:

Set objAcad = CreateObject("AutoCAD.Application")

и так для всех объектов
Просто догадка: если оба файла открыты, уже
произошла активация обоих приложений, может проще не открывать
файл Эксель вручную, а в программе (в коде модуля)
поместить скрытие / визуализацию формы
~'J'~

Re: Не срабатывает - AppActivate "Microsoft Excel"

> Fatty
Все правильно. Спасибо!

Re: Не срабатывает - AppActivate "Microsoft Excel"

Люди help! Писал на WSH (Windows Script Host).
Запускаю скрипт.
В нём есть цикл, всё работает абсолютно правильно(!), но почемуто.
вот, запустил, потом запустил игру Warcraft III и мграю, но в это время цикл делает паузу, спит...
Помогите, как сделать так, чтобы он не "спал"?
Я уже пробовал ставить приорететы. Не помогает =(

Re: Не срабатывает - AppActivate "Microsoft Excel"

> Dancer
Может комп не тянет. Вообще-то вопрос не в тему. Неужели нет форумов по WSN. Хотя бы здесь: http://forum.script-coding.info/viewtopic.php?id=10

Re: Не срабатывает - AppActivate "Microsoft Excel"

> Saor

AppActivate "Microsoft Excel"

Аргументом функции AppActivate должно быть Имя Окна Приложения. Попробуйте так

AppActivate Application.Caption

Re: Не срабатывает - AppActivate "Microsoft Excel"

> brigval

AppActivate Application.Caption

то же не получается. В каком-то сочетании с .Activate (запутался, боюсь ошибиться в каком)получалось, но не стабильно, хотя между Excel и  Word достаточно:

AppActivate "Microsoft Excel"
AppActivate "Microsoft Word"

Все работает стабильно. Может быть это косяк программной среды (что-то в библиотеке там и т.п.). Приходится, по "догадке" Fatty, закрывать визуализацию окна AutoCAD кодом:

GetObject(, "AutoCAD.Application.16").Visible = False

Но AutoCAD при этом прячется так, что его диспечере задач не видно. Приходится опять его открывать программно. А это не дело. Все равно, спасибо всем.

Re: Не срабатывает - AppActivate "Microsoft Excel"

> Fatty
В догонку. Только что написал ответ, поднял глаза на Ваш код и увидел .WindowState = acMax. А я, когда смотрел help, посчтитал, что это обозначает событие (плохой английский). Попробовал минимизировать окно - получается лучше.

Re: Не срабатывает - AppActivate "Microsoft Excel"

Saor пишет:

то же не получается

А у меня получается.
Иногда, бывает и не так уж редко, офис "криво" встает. Переустановка может помочь снять проблемы. Лучше с другого дистрибутива. Но это уже на Ваше усмотрение. Может и не помочь.

Re: Не срабатывает - AppActivate "Microsoft Excel"

> brigval
Скорее всего так оно и есть. Но на то, что у меня стоит, обижаться не имею права. Что ж, еще один повод подумать о нормальном ПО.

Re: Не срабатывает - AppActivate "Microsoft Excel"

FindWindow
SetWindowPos