если Excel Excel открыт, то ...... VBA - PullRequest
4 голосов
/ 15 октября 2011

Как я могу написать код, чтобы сказать.

    Dim xlApp As Excel.Application
    Dim xlWorkbook As Excel.Workbook
    Dim xlWorksheet As Excel.Worksheet

, если книга уже открыта, то ....

    Set xlApp = GetObject(, "Excel.Application")

    elseif xlApp is nothing then
    Set xlApp = New Excel.Application
    xlApp.Visible = True
    Set xlWorkbook = xlApp.Workbooks.Open("E:\InspectionCreator\InspectionSheet.xlsx")
End if

Я неЯ не хочу, чтобы это была конкретная рабочая тетрадь, просто любая рабочая тетрадь, которую я не могу найти в Интернете.Любая помощь будет потрясающей.

Ответы [ 3 ]

6 голосов
/ 15 октября 2011

Сначала попробуйте использовать getobject: если он выдает ошибку, используйте createobject:

  Dim xlApp As Excel.Application

  On Error Resume Next
  Set xlApp = GetObject(, "Excel.Application")
  On Error GoTo 0

  If xlApp Is Nothing Then
    Set xlApp = CreateObject("Excel.Application")
    xlApp.Visible = True
  End If
3 голосов
/ 15 октября 2011

Раньше я запускал код, очень похожий на код Тима, пока Кевин Джонс не указал в сообщении Experts-Exchange, что я повторю здесь (поскольку пост EE находится за платным доступом)

"Знайтечто при запуске Excel через автоматизацию с использованием функции CreateObject Excel не загружает надстройки или другие книги, обычно загружаемые автоматически. Это не хороший способ запустить сеанс Excel, который будет использоваться пользователем. Запуск приложения ExcelНапример, без использования автоматизации из какого-либо приложения, кроме Excel, приложение Excel должно быть запущено с использованием средств, не связанных с автоматизацией. Приведенный ниже код иллюстрирует шаги, необходимые для этого. Сначала код пытается получить дескриптор автоматизации для существующего экземпляра приложения.существующий экземпляр не найден, затем новый экземпляр запускается с помощью команды Shell. "

 Dim ExcelApplication As Object
   Dim TimeoutTime As Long

   On Error Resume Next
   Set ExcelApplication = GetObject(, "Excel.Application")
   On Error GoTo 0
   If ExcelApplication Is Nothing Then
       Shell "Excel.exe"
       TimeoutTime = Timer + 5
       On Error Resume Next
       Do
           DoEvents
           Err.Reset
           Set ExcelApplication = GetObject(, "Excel.Application")
       Loop Until Not ExcelApplication Is Nothing Or Timer > TimeoutTime
       On Error GoTo 0
   End If
   If ExcelApplication Is Nothing Then
       MsgBox "Unable to launch Excel."
   Else
       ' Do something with the Excel instance...
   End If
1 голос
/ 15 октября 2011

Это может идти не в том направлении, но вот что я использовал в прошлом ..

    If Workbooks.Count > 1 Then 'Or in your case = 0
       'Do Something Here'
    Else
       'Do Something Else'
    End If

Таким образом, он сообщит вам, если у вас открыто более одной рабочей книги. В противном случае это звучит так, как будто вы хотите узнать, открыто ли что-то конкретное.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...