Как с помощью VBA в Exel подключить AutoCAD. У меня работает через раз. Пример во вложении
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как с помощью VBA в Exel подключить AutoCAD. У меня работает через раз. Пример во вложении

Как с помощью VBA в Exel подключить AutoCAD. У меня работает через раз. Пример во вложении

Ответ
Поиск в этой теме
Непрочитано 22.02.2010, 11:59 #1
Как с помощью VBA в Exel подключить AutoCAD. У меня работает через раз. Пример во вложении
pungarov
 
Регистрация: 10.11.2008
Сообщений: 10

Вобщем приложение запускается со второго раза. С первого пишет, что приложение OLE выполняет другую операцию. С другого обращения уже работает. Данное приложение удаляет прочие свойства файла.
Код:
[Выделить все]
Private Sub CommandButton5_Click()
Dim strPath As String
Dim strName As String
Dim strVal As String
Dim objProp As Object
Dim sFileName As Variant
‘ Получаем имя файла
sFileName = Application.GetOpenFileName(FileFilter:="Любимый АвтоКад (*.dwg), *.dwg", Title:="Серёга Открой файл Автокада")
If sFileName = False Then
' They pressed Cancel
MsgBox "Наша песня хороша, начинай сначала "
Exit Sub
Else
'MsgBox "Now running " + sFileName
End If
      ‘ Подключаем приложение АвтоКад
 Dim acadApp As New AcadApplication
On Error Resume Next
   Set acadApp = GetObject(, "AutoCAD.Application.16")
  If Err Then
 Err.Clear
' MsgBox(" не открылось ")
  Set acadApp = CreateObject("AutoCAD.Application.16")
   If Err Then
 MsgBox Err.Description
 Exit Sub
 End If
 End If
 ‘ Запускаем выбранный документ Автокад
 Dim acaddoc As AcadDocuments
Set acaddoc = acadApp.Documents.Open(sFileName)
'Очищаем прочие свойства файла
Dim Index As Long
Dim Index2 As Long
Index2 = 0
Dim CustomKey As String
Dim CustomValue As String
For Index = 0 To acadApp.ActiveDocument.SummaryInfo.NumCustomInfo - 1
acadApp.ActiveDocument.SummaryInfo.RemoveCustomByIndex Index2
Next Index
MsgBox ("Удаление свойств выполнено! Серёжа молодец!")
Dim savech As Variant
savech = True
acadApp.ActiveDocument.Close savech
acadApp.Quit
End Sub

Последний раз редактировалось Кулик Алексей aka kpblc, 22.02.2010 в 13:05.
Просмотров: 6949
 
Автор темы   Непрочитано 23.02.2010, 17:29
#2
pungarov


 
Регистрация: 10.11.2008
Сообщений: 10


А в ответ тишина... Странно, что программа работает, но со второго раза
Думал, что проблема в том, что быстрый запуск АвтоКада запущен - убрал ... не помогло
Знаю, что проблемма зарыта где то зделся
Цитата:
Dim acadApp As New AcadApplication
Set acadApp = CreateObject("AutoCAD.Application.16")
Уже менял на
Цитата:
Dim acadApp As New AutoCAD.AcadApplication
Set acadApp = CreateObject("AutoCAD.Application.16")
тоже не помогло... пишет, что Оле приложение занято другой программой, а потом Что АктивХ подключить не удалось.
Второй раз клацаем на кнопоньке - и все гуд... работает уже дальше без проблем... не могу понять почему

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

Версия AutoCAD 16 -я AutoCAD.Application.16 или 2006 - 2008. Версия Windows Vista, на ХР тоже самое.
Так как у меня стоит лицензионная 2010 - я версия и она мне не нравится из за того что тормозит при редактировании большого МТекста, я сделал жесткую привязку к 2006-му. Хотя можно сделать

Set acadApp = GetObject(sFileName) и тогда запускается без проблем , но в 2010-й версии, а поменять на то, что бы запускалась 2006 мне не удалось.

Последний раз редактировалось pungarov, 24.02.2010 в 15:57.
pungarov вне форума  
 
Непрочитано 24.02.2010, 15:37
#3
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Убери New из
Код:
[Выделить все]
Dim acadApp As New AcadApplication

Последний раз редактировалось Александр Ривилис, 24.02.2010 в 16:04.
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 24.02.2010, 17:25
#4
pungarov


 
Регистрация: 10.11.2008
Сообщений: 10


Цитата:
Сообщение от Александр Ривилис Посмотреть сообщение
Убери New из
Код:
[Выделить все]
Dim acadApp As New AcadApplication
Тоже самое, как раз New добавлял что бы решить данную проблему - не помогло. Вообщем ошибка следующая :

Потом она повторяется, а за ней вообщем ошибка следующая


При запущенном АвтоКаде все работает
pungarov вне форума  
 
Непрочитано 25.02.2010, 01:45
#5
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Зайди в Tools->Options->General в редакторе
и поставь галочку на Break on Unhandled Errors
Может помочь

~'J'~
Олег (jr.) вне форума  
 
Непрочитано 25.02.2010, 11:25
#6
KronSerg

Вода - моя работа
 
Регистрация: 10.11.2009
Санкт-Петербург
Сообщений: 3,638


Ты знаешь, я
Цитата:
Set acadApp = GetObject(, "AutoCAD.Application.16")
и
Цитата:
Set acadApp = CreateObject("AutoCAD.Application.16")
апострафами забил и заработало
__________________
Нерешаемых проблем не бывает.
KronSerg вне форума  
 
Непрочитано 25.02.2010, 12:01
#7
AlexV

Инженер
 
Регистрация: 02.10.2008
С-Пб
Сообщений: 3,692


Цитата:
Сообщение от KronSerg Посмотреть сообщение
Ты знаешь, я
Цитата:
Set acadApp = GetObject(, "AutoCAD.Application.16")
и
Цитата:
Set acadApp = CreateObject("AutoCAD.Application.16")
апострафами забил и заработало
__________________
Ну да, так как
Код:
[Выделить все]
"Dim acadApp As New AcadApplication"
(если не ошибаюсь, це "раннее связывание" зовется), то acadApp инициализируется при первом обращении к ней в коде. При этом должна быть заранее подключена библиотека "Autocad 2... Type Librare".

Если использовать Set acadApp = GetObject(, "AutoCAD.Application.16") и Set acadApp = CreateObject("AutoCAD.Application.16"), то надо объявлять acadApp as object ("позднее связывание")
__________________
...Не пытайся гнуть ты ложку,
Не вяжи её узлом.
Ложка - ложка понарошку,
А по правде, - это лом!
AlexV вне форума  
 
Автор темы   Непрочитано 25.02.2010, 13:06
#8
pungarov


 
Регистрация: 10.11.2008
Сообщений: 10


Цитата:
Сообщение от AlexV Посмотреть сообщение
Ну да, так как
Код:
[Выделить все]
"Dim acadApp As New AcadApplication"
(если не ошибаюсь, це "раннее связывание" зовется), то acadApp инициализируется при первом обращении к ней в коде. При этом должна быть заранее подключена библиотека "Autocad 2... Type Librare".

Если использовать Set acadApp = GetObject(, "AutoCAD.Application.16") и Set acadApp = CreateObject("AutoCAD.Application.16"), то надо объявлять acadApp as object ("позднее связывание")
Немножко не так, когда объявляешь
Dim acadApp As New AcadApplication
New - означает новый экземпляр приложения, а раннее связывание у нас реализовано следующим образом
Dim acadApp As AcadApplication
Вместо Dim acadApp As Object
Правда у тебя ложна быть подключена библиотека "Autocad 2... Type Librare"

KronSerg я не понял, каким образом ты забил апострофами и заработало, можно с этого места поподробнее. Я же писал, что со второго раза обращении к программе после выдачи ошибки она работает...

Вот что я еще интересного нашёл

AutoCAD.Application.16.1 = AutoCAD 2005
AutoCAD.Application.16.2 = AutoCAD 2006
AutoCAD.Application.17 = AutoCAD 2007
AutoCAD.Application.17.1 = AutoCAD 2008

Тоесть
Set acadApp = GetObject(, "AutoCAD.Application.16.2") и Set acadApp = CreateObject("AutoCAD.Application.16.2")

Но у меня все равно ошибка, если только открыл файл и автокад не запущен

В тулсах стоит Tools->Options->General в редакторе
галочка на Break on Unhandled Errors
pungarov вне форума  
 
Непрочитано 25.02.2010, 13:35
#9
KronSerg

Вода - моя работа
 
Регистрация: 10.11.2009
Санкт-Петербург
Сообщений: 3,638


Всё что сделал:
1. Создал макрос
2. Заменил ‘ на '
3. Поставил ' слева от указанных строчек
4. Подключил AutoCad 2008 Type Library и AutoCad Focus Control for VBA Type Library
5. Убрал Private
6. Назначил кнопке
7. Нажал кнопку
__________________
Нерешаемых проблем не бывает.
KronSerg вне форума  
 
Непрочитано 25.02.2010, 16:39
#10
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Цитата:
Сообщение от KronSerg Посмотреть сообщение
Всё что сделал:
1. Создал макрос
2. Заменил ‘ на '
3. Поставил ' слева от указанных строчек
4. Подключил AutoCad 2008 Type Library и AutoCad Focus Control for VBA Type Library
5. Убрал Private
6. Назначил кнопке
7. Нажал кнопку
Если ты будешь пользовать вместо указания конкретных версий это:
Код:
[Выделить все]
Set acadApp = GetObject(, "AutoCAD.Application")
тогда по умолчанию должно вызываться приложение с наиболее
старой версией из тех что загружены на твоей машине

~'J'~
Олег (jr.) вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как с помощью VBA в Exel подключить AutoCAD. У меня работает через раз. Пример во вложении



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
на злобу дня !! zaza-noza Разное 63 22.05.2009 15:10
Мониторы LCD CRT Разное 94 17.06.2008 10:51
Юмор 2007 Огурец Разное 1172 29.12.2007 11:16
ЮМОР 2006 =) Perezz!! Разное 1122 04.01.2007 00:46