#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
…