Ejecutar Excel desde VBasic

anirac
10 de Abril del 2004
Hola: Necesito si me pueden ayudar.....
Al hacer click en un boton, necesito abrir un archivo de excel, como hago para ejecutar el programa desde el Visual Basic y para llamar a un *.xls determinado????
Muchsimas Gracias
Carina

ATV
10 de Abril del 2004
'Tu proyecto debe tener referencias a las siguientes bibliotecas de clases y controles:
' Microsoft Scripting Runtime
' Microsoft Excel 10.0 Object Library (o la versión de Excel que tu vayas a usar)
' Microsoft Common Dialog Control 6.0
'En este caso se asume que tienes los siguientes elementos ya configurados:
' Un formulario llamado frmMain
' Un control CommonDialog llamado cdlLoad con todas sus propiedades bien
' definidas (Filter, DefaultExt, MaxFileSize, CancelError, etc)
' Un control Label llamado lblMain
' Un control CommandButton llamado cmdMain con un código parecido a este:
' Private Sub cmdMain_Click()
' If basHeaders.FileDefined Then
' MsgBox basHeaders.strMsg_8, vbInformation + vbOKOnly, basHeaders.strMsg_0
' Else
' basHeaders.ReadXLSFile
' End If
' End Sub
' Y recomendablemente un módulo para las declaraciones públicas, etc llamado basHeaders (donde deberías pegar
' TODO el contenido de este mensaje, menos el código asociado al botón de comando)

' Este ejemplo te muestra como cargar cualquier archivo de excel (siempre y cuando la maquina en que lo ejecutes
' tenga instalada la versión de excel que definiste en la biblioteca referenciada, claro que si quieres comprobarlo
' en el mismo código podrías crear una función que determine dinámicamente la versión de excel que esta corriendo
' en la máquina donde ejecutes el programa) y leer los valores de un rango con nombre almacenándolos en una matriz
' pública dinámica. El ejemplo usa una variable boleana pública que evita que un archivo se abra de nuevo sin antes
' cerrar el actual. Sin embargo, que desde el momento en que tienes acceso a la aplicación puedes hacer cualquier
' cosa con el archivo que habriste, así como usar cualquiera de las funciones incorporadas en excel.

Public FileDefined As Boolean
Public strNombres() As String
Public Const strMsg_0 As String = "Nombre de la aplicación"
Public Const strMsg_1 As String = "El archivo de Excel se cargo con éxito."
Public Const strMsg_2 As String = "El archivo de Excel no se ha cargado."
Public Const strMsg_3 As String = "Hoja de Cálculo de Microsoft Excel"
Public Const strMsg_4 As String = "Datos" 'cambiar por el nombre de la hoja
Public Const strMsg_5 As String = "DatosParaLeer" 'cambiar por el nombre de un rango de excel
Public Const strMsg_6 As String = "El archivo elegido no contiene rango con nombre válido."
Public Const strMsg_7 As String = "La matriz pública strNombres tiene ahora una copia de todos los valores del rango de Excel especificado"
Public Const strMsg_8 As String = "El archivo ya esta cargado"
Public Sub ReadXLSFile()

Dim strFileNameWOPath As String
Dim strFileNameWPath As String
Dim fso As New FileSystemObject
Dim objArchivoExcel As File
Dim objExcelApp As New Excel.Application
Dim objExcelWorkBook As New Excel.Workbook
Dim objExcelSheet As Variant
Dim strNewname As Variant
Dim lngCellsCounter As Long

If FileDefined = True Then
MsgBox strMsg_1, vbInformation + vbOKOnly, strMsg_0
Exit Sub
Else
On Error GoTo UserCancel
frmMain.cdlLoad.ShowOpen
strFileNameWOPath = frmMain.cdlLoad.FileTitle
strFileNameWPath = frmMain.cdlLoad.FileName
If strFileNameWOPath <> " " And UCase(Right(strFileNameWOPath, 3)) = "XLS" Then
Set objArchivoExcel = fso.GetFile(strFileNameWPath)
If UCase(objArchivoExcel.Type) = UCase(strMsg_3) Then
Set objArchivoExcel = Nothing
Set objExcelWorkBook = objExcelApp.Workbooks.Open(strFileNameWPath)
For Each objExcelSheet In objExcelWorkBook.Worksheets
If objExcelSheet.Name = strMsg_4 Then
lngCellsCounter = 0
ReDim strNombres(objExcelSheet.Range(strMsg_5).Rows.Count - 1)
For Each strNewname In objExcelSheet.Range(strMsg_5)
strNombres(lngCellsCounter) = strNewname.Value
lngCellsCounter = lngCellsCounter + 1
Next strNewname
FileDefined = True
objExcelWorkBook.Close False
Set objExcelWorkBook = Nothing
Set objExcelApp = Nothing
frmMain.lblMain.Caption = strMsg_7
Exit Sub
End If
Next objExcelSheet
objExcelWorkBook.Close False
Set objExcelWorkBook = Nothing
Set objExcelApp = Nothing
FileDefined = False
MsgBox strMsg_6, vbCritical + vbOKOnly, strMsg_0
Exit Sub
Else
MsgBox strMsg_2, vbCritical + vbOKOnly, strMsg_0
FileDefined = False
Exit Sub
End If
Else
MsgBox strMsg_2, vbCritical + vbOKOnly, strMsg_0
FileDefined = False
Exit Sub
End If
End If
UserCancel:
FileDefined = False
Exit Sub
End Sub