Тема: Объект Excel не обнаруживается

Dim Excel As Object
Set Excel = GetObject(, "Excel.Application")
Excel загружен, но не находится при помощи GetObject, ни так как в коде вверху, ни при использовании библиотеки из Reference и
Dim Excel As Excel.Application
Используется AutoCAD 2006. Может кто SP поделится?

Re: Объект Excel не обнаруживается

> Svetlana
А так?

  Dim XLApp As Object
  Dim WBook As Object
  Dim Sht As Object
  Set XLApp = CreateObject("Excel.Application")
  If XLApp Is Nothing Then Exit Function
и т.д.

~'J'~

Re: Объект Excel не обнаруживается

речь идет не о создании нового объекта, а о работе с уже имеющимся

Re: Объект Excel не обнаруживается

> Svetlana
В 2005 работает:
Окрываю существующий файл, сворачиваю и потом открываю Автокад

  Sub TestExcelConnect()
  Dim ExcelApp As Object
  Dim ExcelWorkbook As Object
  Dim ExcelSheet As Object
  Dim fname, filName, cDir As String
  On Error GoTo Err_Break
  Set ExcelApp = GetObject(, "Excel.Application")
  If ExcelApp Is Nothing Then Exit Sub
  Set ExcelWorkbook = ExcelApp.Workbooks.Add
  If ExcelWorkbook Is Nothing Then Exit Sub
  fname = InputBox("Имя файла Эксель без расширения")
  cDir = ThisDrawing.GetVariable("DWGPREFIX")
  filName = cDir + fname + ".xls"
  Set ExcelWorkbook = ExcelApp.Workbooks.Add(filName)
  Set ExcelSheet = ExcelApp.Worksheets(1)
  ExcelApp.DisplayAlerts = False
  ExcelApp.ScreenUpdating = False
  ExcelSheet.Cells(1, 1).Value = "Проверка связи"
  ExcelApp.DisplayAlerts = True
  ExcelApp.ScreenUpdating = True
Err_Break:
  MsgBox Err.Description
  End Sub

Re: Объект Excel не обнаруживается

О чем и речь: проверяется, не открыт ли Excel, если нет - то открывается, а у меня открываются новые и новые Excel.
На один из глюков получила совет обновить SP. Может таки кто поделится?

Re: Объект Excel не обнаруживается

Этим способом я пользуюсь давно и он меня обычно не подводит:

'Код в модуле ОписаниеПеременных.bas
Public ПриложениеExcell As Excel.Application
Public ПрограммаAutoCAD As AcadApplication
'Описываем необходимые процедуры API:
Private Declare Function FindWindow Lib "user32" Alias _
"FindWindowA" (ByVal lpClassName As String, _
               ByVal lpWindowName As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias _
"SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, _
               ByVal wParam As Long, _
               ByVal lParam As Long) As Long
Public Function DetectExcel() As Long
' Процедура находит выполняемый Excel и регистрирует его.
   Const WM_USER = 1024
   Dim hWnd As Long
' Если Excel выполняется, этот вызов API возвращает его дескриптор.
   hWnd = FindWindow("XLMAIN", 0)
   If hWnd = 0 Then  ' 0 означает, что Excel не выполняется.
      DetectExcel = 0
      Exit Function
   Else
   ' Excel выполняется. Используйте функцию API SendMessage, чтобы ввести его в таблицу выполняемых объектов (Running Object Table).
      SendMessage hWnd, WM_USER + 18, 0, 0
      DetectExcel = hWnd
   End If
End Function
'Код в любом модуле
Public Sub СоздатьТаблицу()
   НазваниеПрограммы = "Таблица"
On Error Resume Next
   Set ПрограммаAutoCAD = ThisDrawing.Application
   If ПриложениеExcell Is Nothing Then
ПроверитьПолучениеExcel:
   ' Функция GetObject, вызванная без указания первого аргумента,
   ' возвращает ссылку на экземпляр приложения. Если это приложение
   ' не запущено, возвращается ошибка. Обратите внимание на запятую,
   ' стоящую на месте отсутствующего первого аргумента.
      Set ПриложениеExcell = VBA.GetObject(, "Excel.Application")
      If ПриложениеExcell Is Nothing Then
         Set ПриложениеExcell = VBA.GetObject("", "Excel.Application")
         GoTo ПроверитьПолучениеExcel
      End If
   ' Проверка Excel. Если Excel выполняется,
   ' он вводится в таблицу выполняемых объектов (Running Object table).
   End If
   If DetectExcel = 0 Then
      Set ПриложениеExcell = Nothing
      GoTo ПроверитьПолучениеExcel
   End If
   Err.Clear
   ПриложениеExcell.Visible = True
Dim strИмяФайлаТаблицы As String
Dim strАдресФайлаТаблицы As String
   strАдресФайлаТаблицы = ПолучитьПутьФайла(ПрограммаAutoCAD.FullName) & "Создание таблицы.xls"
   strИмяФайлаТаблицы = ПолучитьИмяФайла(strАдресФайлаТаблицы)
Dim intКолвоОткрытыхКниг As Integer
Dim intНомКниги As Integer
   intКолвоОткрытыхКниг = ПриложениеExcell.Workbooks.Count
   For intНомКниги = 1 To intКолвоОткрытыхКниг
      If ПриложениеExcell.Workbooks(intНомКниги).Name = strИмяФайлаТаблицы Then
         If ПриложениеExcell.Workbooks(intНомКниги).FullName = strАдресФайлаТаблицы Then
            GoTo АктивизироватьExcel
         Else
            ПриложениеExcell.WindowState = xlMinimized
            ПрограммаAutoCAD.WindowState = acMax
            glngОтвет = MsgBox("В приложении Excel уже открыт файл с именем: """ & strИмяФайлаТаблицы & """," & vbLf & _
                  "но из другой директории: """ & ПолучитьПутьФайла(ПриложениеExcell.Workbooks(intНомКниги).FullName) & """." & vbLf & _
                  "Сохранить изменения и закрыть файл (glngОтвет Да)," & vbLf & _
                  "не сохранять изменения и закрыть файл (glngОтвет Нет)," & vbLf & _
                  "отменить создание таблицы (glngОтвет Отмена).", vbYesNoCancel, НазваниеПрограммы)
            If glngОтвет = vbYes Then
               ПриложениеExcell.Workbooks(intНомКниги).Save
            ElseIf glngОтвет = vbCancel Then
               Exit Sub
            End If
            ПриложениеExcell.Workbooks(intНомКниги).Close
            Exit For
         End If
      End If
   Next intНомКниги
'Создать новуй базу данных таблицы
   ПриложениеExcell.Workbooks.Open strАдресФайлаТаблицы
АктивизироватьExcel:
   ПриложениеExcell.WindowState = xlMinimized
   ПрограммаAutoCAD.WindowState = acMax
   MsgBox "База данных для создания таблицы открыта!", vbInformation, НазваниеПрограммы
   ПрограммаAutoCAD.WindowState = acMin
   ПриложениеExcell.WindowState = xlMaximized
End Sub

Но мною замечено, что открытый таким способом Excel после закрытия файла оставляет процесс "Excel" в таблице запущеных процессов работающим и если при работающем процессе попытаться снова открыть Excel то некоторые элементы окна Excel например ячейки не видны на экране и с ними невозможно работать. Чтобы нормально снова запустить Excel надо остановить процесс вручную и потом можно запускать Excel как обычно. В добавление у меня вопрос: как сделать так чтобы процесс Excel при закрытии Exel останавливался и что на это влияет, почему он сам не останавливается?

Re: Объект Excel не обнаруживается

ПриложениеExcell.quit не помогает? В тексте его не видно: книги закрыть недостаточно.

Re: Объект Excel не обнаруживается

DetectExcel() тоже не обнаруживает запущенный экземпляр Excel :(

Re: Объект Excel не обнаруживается

> Svetlana
У меня нормально работает такой код

Dim oExcel As Excel.Application
On Error Resume Next
Set oExcel = GetObject(, "Excel.Application")
If Not oExcel Is Nothing Then...

Имя Вашего объекта - Excel. Я бы попробовал назвать его любым другим именем. И, если можно приведите еще код. А то не ясно как Вы определяете доступность Excel. Может там что-то не так...

Re: Объект Excel не обнаруживается

Имя объекта было любое, а недоступность видна уже в отладчике - oExcel = nothing и в
    sub proba()
        Ваш код
    end sub

Re: Объект Excel не обнаруживается

у меня всё работает
офис 2003
акад 2006

Re: Объект Excel не обнаруживается

повезло :)
И бэйсик встроеный, а не VB6?

Re: Объект Excel не обнаруживается

VBA, that's right

Re: Объект Excel не обнаруживается

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