Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Excel y Visual Basic 6.0

Estas en el tema de Excel y Visual Basic 6.0 en el foro de Visual Basic clásico en Foros del Web. Saludos. Estoy haciendo un programa que en un momento dado abre una hoja de Excel que tengo hecha al darle a un botón e introduce ...
  #1 (permalink)  
Antiguo 31/07/2008, 14:59
 
Fecha de Ingreso: julio-2008
Mensajes: 36
Antigüedad: 15 años, 9 meses
Puntos: 0
Excel y Visual Basic 6.0

Saludos. Estoy haciendo un programa que en un momento dado abre una hoja de Excel que tengo hecha al darle a un botón e introduce los datos de un textbox en una celda de dicha hoja. También he conseguido que los datos de otra celda de esa misma hoja de Excel aparezcan en un label del programa de Visual Basic, el problema que tengo es que solo aparecen si los datos estaban en la hoja de Excel antes de abrirla con el Visual Basic o guardo y vuelvo abrir la hoja con Visual Basic. Pues bien mi pregunta es ¿cómo puedo hacer para que una vez que se abre la hoja de Excel con Visual Basic y se introducen los datos del textbox, la hoja de Excel trabaje y el resultado que ha aparecido en la celda aparezca en el label de Visual Basic automáticamente, sin que tenga que guardar los cambios hechos en la hoja de Excel?
Respondedme por favor.
Gracias.
  #2 (permalink)  
Antiguo 31/07/2008, 15:05
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Excel y Visual Basic 6.0

Puedes declarar el objeto Excel.Application con alcance de módulo, y trabajar con ella en un Timer, que vaya tomando los datos del objeto.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 31/07/2008, 15:25
 
Fecha de Ingreso: julio-2008
Mensajes: 36
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Excel y Visual Basic 6.0

¿Me puedes explicar cómo podría hacer eso? es que no llevo mucho tiempo en esto de Visual basic y no controlo todavía lo suficiente.
Gracias.

Última edición por javiergarciaperez; 31/07/2008 a las 15:47
  #4 (permalink)  
Antiguo 31/07/2008, 15:28
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Exclamación Respuesta: Excel y Visual Basic 6.0

Bueno, para empezar se supone que estás llamando a Excel haciendo esto:
Código PHP:
Set AppExcel CreateObject("Excel.Application"
Tal vez con alguna pequeña variación, pero usando el mismo principio.
Entonces, lo que tienes que hacer es definir AppExcel en las declaraciones del formulario (arriba de todo) poniendo:
Código PHP:
Private AppExcel As Object 
Esto hace que no se pierda el objeto al salir de la función.
Luego, colocas un Timer con el Interval que quieras y en su evento Timer obtienes el valor. Por ejemplo:
Código PHP:
Private Sub Timer1_Timer()
Label1.Caption AppExcel.Worksheets("Hoja1").Range("A1")
End Sub 
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #5 (permalink)  
Antiguo 31/07/2008, 15:47
 
Fecha de Ingreso: julio-2008
Mensajes: 36
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Excel y Visual Basic 6.0

¿El código quedaría así? Es esto a lo que te refieres?
Gracias.

Private objExcel As Object
Private Sub Timer1_Timer()
Label1.Caption = objExcel.Worksheets("Hoja1").Range("A1")
End Sub
Private Sub Command1_Click()
Dim objExcel As Excel.Application
Dim xLibro As Excel.Workbook
Dim Col As Integer, Fila As Integer
Set objExcel = New Excel.Application
Set xLibro = objExcel.Workbooks.Open("C:\hoja.xls")
objExcel.Visible = True
With xLibro
With .Sheets(1)
Fila = 1
Label1.Caption = cells(Fila, 2)
Fila = 2
cells(Fila, 2) = Text1.Text
End With
End With
Set objExcel = Nothing
Set xLibro = Nothing
End Sub
  #6 (permalink)  
Antiguo 31/07/2008, 15:54
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Exclamación Respuesta: Excel y Visual Basic 6.0

Bueno, más o menos, en ese código también deberías incluir entre las declaraciones el libro. Algo como esto:
Código PHP:
Private xLibro As Object 
Debes reemplazar esta línea (la puse mal):
Código PHP:
Label1.Caption objExcel.Worksheets("Hoja1").Range("A1"
Por esta:
Código PHP:
Label1.Caption xLibro.Worksheets("Hoja1").Range("A1"
Y, por último, eliminar estas líneas:
Código PHP:
Set objExcel Nothing
Set xLibro 
Nothing 
Solo debes colocarla al cerrar la ventana, quizás en el evento Unload.

Me avisas si te funciona.

También debes quitar estas declaraciones dentro del evento Click, ya que están duplicadas:
Código PHP:
Dim objExcel As Excel.Application
Dim xLibro 
As Excel.Workbook 
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #7 (permalink)  
Antiguo 31/07/2008, 18:34
 
Fecha de Ingreso: julio-2008
Mensajes: 36
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Excel y Visual Basic 6.0

He probado el código que me has dicho, lo que pasa es que en el texto del label no se pone el texto de la celda de excel si no guardo el archivo de excel y vuelvo a abrirlo, es decir no aparece en tiempo real o por lo menos de una manera rápida el texto de la celda del excel en el label.
  #8 (permalink)  
Antiguo 01/08/2008, 06:48
 
Fecha de Ingreso: julio-2008
Mensajes: 36
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Excel y Visual Basic 6.0

Ya he conseguido que funcione, pero he tenido que cambiar el código que tú me diste por este otro:

Private objExcel As Object
Private xLibro As Object
Private Sub Timer1_Timer()
Label1.Caption = cells(1, 2)
End Sub
Private Sub Command1_Click()
Dim Col As Integer, Fila As Integer
Set objExcel = New Excel.Application
Set xLibro = objExcel.Workbooks.Open("C:\hoja.xls")
objExcel.Visible = True
With xLibro
With .Sheets(1)
Fila = 1
Label1.Caption = cells(Fila, 2)
Fila = 2
cells(Fila, 2) = Text1.Text
End With
End With
End Sub

He cambiado "Label1.Caption = xLibro.Worksheets("Hoja1").Range("A1")" por: "Label1.Caption = cells(1, 2)", de esta manera sí me funciona.
Gracias.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:52.