Откройте презентацию PowerPoint из Excel с помощью VBA без указания пути к файлу Excel

#excel #vba #powerpoint

#excel #vba #powerpoint

Вопрос:

Я ищу способ для VBA в PowerPoint автоматически определять единственный открытый файл Excel на моем компьютере и использовать этот файл Excel для чтения из него данных. Я бы хотел избежать необходимости вручную вставлять путь к файлу Excel в свой код. Возможно ли это?

 Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Open("PATHFILENAME.xlsm")
    xlBook.Application.Visible = False
  

Спасибо!

Комментарии:

1. Посмотрите на GetObject(,"Excel.Application")

2. CreateObject создает новый экземпляр Excel; если вы собираетесь работать с экземпляром Excel, который уже существует, вам нужно использовать GetObject вместо этого …но все равно следует учитывать случай, когда в Excel еще не открыт ожидаемый файл — если ваш макрос предназначен для работы с одной конкретной книгой Excel, то GetObject подобное использование предполагает, что ожидаемая книга открыта и активна: вам придется проверять / утверждать эти предположения, иначе ваш код может в конечном итоге не работать с ожидаемой конкретной книгой / листами.

Ответ №1:

Попробуйте следующий код, пожалуйста:

 Sub testOpenWorkbook()
  Dim Ex As Object, wb As Object
   On Error Resume Next
    Set Ex = GetObject(, "Excel.Application")
     If Err.Number <> 0 Then
        Err.Clear: On Error GoTo 0
        MsgBox "There is not any Excel session open...", vbInformation, "Ups...": Exit Sub
     Else
        On Error GoTo 0
        If Ex.Workbooks.count = 1 Then
            Set wb = Ex.Workbooks(1)
        Else
            MsgBox "There are more Excel Workbooks open...", vbInformation, "Ups...": Exit Sub
        End If
     End If
End Sub
  

Комментарии:

1. Вы перепутали инструкции If Error и if not, и в конце кодовых строк msgbox указаны неправильные Exit For коды. wb должно быть определено как Object или Excel нуждается в ранней привязке, поскольку код будет размещен в Powerpoint. Как насчет использования функции и возврата wb (ссылка на рабочую книгу).

2. @ComputerVersteher: Да, я намеревался использовать Exit Sub . Я мог бы поклясться, что это я сделал… И у меня была ссылка на Microsoft Excel ... Object Library , с помощью которой я написал код Dim Ex As Excel.Application . Затем я вспомнил, что некоторые люди боятся внешних ссылок и адаптированного (только) Ex объявления… Я, конечно, не проверял код, выглядящий таким простым… Но спасибо! Я адаптирую код, чтобы он был рабочим … :). Создание функции не сложно.. Но у меня все равно нет никакой обратной связи… Я думал, что он начнет свой код с приведенного выше, а затем будет использовать wb