tener - Encontrar un libro de trabajo en una de las mĂșltiples instancias de Excel
que es un libro de excel (3)
Tengo una macro en Outlook VBA que necesita tomar datos de un libro abierto de Excel (" Workbook1
").
Hago referencia al libro de trabajo que necesito seleccionar de la siguiente manera:
Dim objApp As Excel.Application
Set objApp = GetObject(, "Excel.Application")
Set wb = objApp.Workbooks("Workbook1.xlsx")
Sin embargo, a menudo obtengo el error de tiempo de ejecución 9 , que VBA no puede encontrar el libro de trabajo.
Creo que el problema puede ser que, dado que tengo más de una instancia de Excel abierta, VBA está buscando mi libro de trabajo en la instancia incorrecta .
Es importante para mí tener instancias separadas ya que estoy ejecutando muchos Excels.
¿Cómo hago referencia a mi libro de trabajo cuando ejecuto más de una instancia de Excel ?
Prueba esto
Option Explicit
Public Sub Example()
Dim xlApp As Excel.Application
Dim Book As Workbook
Set xlApp = New Excel.Application
Set Book = xlApp.Workbooks.Open(Environ( _
"USERPROFILE") & "/Documents/Temp/Temp.xlsm")
'' Do something
Set xlApp = Nothing
Set Book = Nothing
End Sub
O esto que funciona para mí
Option Explicit
Public Sub Example()
Dim xlApp As Excel.Application
Dim Book As Excel.Workbook
Dim Sht As Excel.Worksheet
Dim xlStarted As Boolean
Dim FilePath As String
Dim Cell As Range
Dim Rng As Range
'' // File Path
FilePath = "C:/Temp/Temp.xlsx"
Debug.Print FilePath
'' // If Error get Excel Application
On Error Resume Next
Set xlApp = GetObject(, "Excel.Application")
If Err <> 0 Then
Application.StatusBar = "Please wait while Excel source is opened ... "
Set xlApp = CreateObject("Excel.Application")
xlStarted = True
End If
'' // Open Workbook, Sheet1 to get data
Set Book = xlApp.Workbooks.Open(FilePath)
Set Sht = Book.Sheets("Sheet1")
'' // Set range variable
Set Rng = Sht.Range("A1")
For Each Cell In Rng
Debug.Print Cell.Value
Next
''// Close & SaveChanges
Book.Close SaveChanges:=True
If xlStarted Then
xlApp.Quit
End If
Set xlApp = Nothing
Set Book = Nothing
Set Sht = Nothing
End Sub
Si desea establecer objApp
en una instancia particular de Excel,
puede hacerlo usando el nombre de un libro abierto en esa instancia:
Dim objApp As Excel.Application
Dim objWbk As Excel.Workbook
Dim wB As Excel.Workbook
Set objWbk = GetObject("Workbook1.xlsx")
Set objApp = objWb.Application
Set wB = objApp.Workbooks("Workbook1.xlsx")
Sospecho que cambiar el nombre del archivo para agregar en la ruta completa del archivo funcionaría, así que intente cambiar la línea:
Set wb = objApp.Workbooks("Workbook1.xlsx")
Para algo como:
Set wb = objApp.Workbooks("C:/Users/Documents/Workbook1.xlsx")