Ejecutar Excel desde VBasic
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
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
'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
' 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
