Vb acceso excel
He visto tu currículo y he visto que tienes experiencia con VB y he pensado que podrías solucionar mi problema. Paso a explicar el problema, accedo a Excel desde VB vía Automation. Escribo mediante este método en un archivo Excel y cierro el objeto Excel. Application mediante el método Quit.
Si la aplicación de VB sigue ejecutándose, se puede observar en el Administrador de Tareas que hay un proceso Excel aun vivo. En este momento con la aplicación de VB en curso si voy al Administrador de Archivos y realizo doble click sobre el archivo Excel creado, éste no se abre. Sin embargo en la misma situación si voy a Microsoft Excel y pulso archivo->open-> el fichero creado, éste aparece en pantalla.
¿Sabes si estoy omitiendo alguna instrucción necesaria para que el proceso Excel concluya?
Gracias de antemano
'Formulario 1 codigo
Option Explicit
Private Sub Command1_Click()
name_fileXLS = App.Path & "\prueba.xls" 'Seleccionar el fichero Excel a modificar
Dim kk As String
Dim cont As Long
pulsacion = pulsacion + 1
'Función que abre el fichero en EXCEL:
Setup
'Escribir un nuevo datos en la primera hoja de Excel
Set shtplantilla = wbWorld.Worksheets(1)
shtplantilla.Activate
With shtplantilla
.Cells(pulsacion, 3) = "Hola PEPE"
End With
'Función que guarda los cambios en un fichero Excel con otro nombre
CleanUp
End Sub
'Codigo del modulo 1 donde se implementan la funciones Setup y CleanUp
Option Explicit
Global name_fileXLS As String
Global shtplantilla As Excel.Worksheet
Public appWorld As Excel.Application
Public wbWorld As Workbook
Public excelwasnorunning As Boolean
Global pulsacion As Integer
Public Sub Setup()
' IMPORTANT: If your machine does not have Excel 97 installed,
' you must change the reference to the Excel 95 Object Library.
' Then, in the Declarations section above, change the variable
' declaration "wbWorld as Workbook" to "shtWorld As Worksheet."
' Then change all references to "wbWorld" to "shtWorld."
On Error Resume Next 'ignore errors
Set appWorld = GetObject(, "Excel.Application") 'look for a running copy of Excel
If Err.Number <> 0 Then 'If Excel is not running then
Set appWorld = CreateObject("Excel.Application") 'run it
excelwasnorunning = True
End If
Err.Clear ' Clear Err object in case error occurred.
On Error GoTo 0 'Resume normal error processing
Set wbWorld = appWorld.Workbooks.Open(name_fileXLS)
End Sub
' Set the objects to Nothing.
Public Sub CleanUp()
Dim Name As String
' This should force an unload of Microsoft Excel,
' providing no other applications or users have it loaded.
On Error Resume Next 'ignore errors
Name = App.Path & "\kk.xls"
wbWorld.SaveCopyAs (Name)
wbWorld.Close (False)
Set wbWorld = Nothing
' If this copy of Microsoft Excel was not running when you
' started, close it using the Application property's Quit method.
' Note that when you try to quit Microsoft Excel, the
' title bar blinks and a message is displayed asking if you
' want to save any loaded files.
If excelwasnorunning = True Then
appWorld.Quit
End If
Set appWorld = Nothing
End Sub
Si la aplicación de VB sigue ejecutándose, se puede observar en el Administrador de Tareas que hay un proceso Excel aun vivo. En este momento con la aplicación de VB en curso si voy al Administrador de Archivos y realizo doble click sobre el archivo Excel creado, éste no se abre. Sin embargo en la misma situación si voy a Microsoft Excel y pulso archivo->open-> el fichero creado, éste aparece en pantalla.
¿Sabes si estoy omitiendo alguna instrucción necesaria para que el proceso Excel concluya?
Gracias de antemano
'Formulario 1 codigo
Option Explicit
Private Sub Command1_Click()
name_fileXLS = App.Path & "\prueba.xls" 'Seleccionar el fichero Excel a modificar
Dim kk As String
Dim cont As Long
pulsacion = pulsacion + 1
'Función que abre el fichero en EXCEL:
Setup
'Escribir un nuevo datos en la primera hoja de Excel
Set shtplantilla = wbWorld.Worksheets(1)
shtplantilla.Activate
With shtplantilla
.Cells(pulsacion, 3) = "Hola PEPE"
End With
'Función que guarda los cambios en un fichero Excel con otro nombre
CleanUp
End Sub
'Codigo del modulo 1 donde se implementan la funciones Setup y CleanUp
Option Explicit
Global name_fileXLS As String
Global shtplantilla As Excel.Worksheet
Public appWorld As Excel.Application
Public wbWorld As Workbook
Public excelwasnorunning As Boolean
Global pulsacion As Integer
Public Sub Setup()
' IMPORTANT: If your machine does not have Excel 97 installed,
' you must change the reference to the Excel 95 Object Library.
' Then, in the Declarations section above, change the variable
' declaration "wbWorld as Workbook" to "shtWorld As Worksheet."
' Then change all references to "wbWorld" to "shtWorld."
On Error Resume Next 'ignore errors
Set appWorld = GetObject(, "Excel.Application") 'look for a running copy of Excel
If Err.Number <> 0 Then 'If Excel is not running then
Set appWorld = CreateObject("Excel.Application") 'run it
excelwasnorunning = True
End If
Err.Clear ' Clear Err object in case error occurred.
On Error GoTo 0 'Resume normal error processing
Set wbWorld = appWorld.Workbooks.Open(name_fileXLS)
End Sub
' Set the objects to Nothing.
Public Sub CleanUp()
Dim Name As String
' This should force an unload of Microsoft Excel,
' providing no other applications or users have it loaded.
On Error Resume Next 'ignore errors
Name = App.Path & "\kk.xls"
wbWorld.SaveCopyAs (Name)
wbWorld.Close (False)
Set wbWorld = Nothing
' If this copy of Microsoft Excel was not running when you
' started, close it using the Application property's Quit method.
' Note that when you try to quit Microsoft Excel, the
' title bar blinks and a message is displayed asking if you
' want to save any loaded files.
If excelwasnorunning = True Then
appWorld.Quit
End If
Set appWorld = Nothing
End Sub
1 Respuesta
Respuesta de pepitorias
1