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

Dos Hojas de Excel distintas

Estas en el tema de Dos Hojas de Excel distintas en el foro de Visual Basic clásico en Foros del Web. Hace un tiempo pregunte como hacia para relacionar el excel con vb 60 y me esplicaron perfecrto. Y ahora me gustaria saber como hacer para ...
  #1 (permalink)  
Antiguo 23/10/2009, 04:37
 
Fecha de Ingreso: julio-2007
Mensajes: 79
Antigüedad: 16 años, 9 meses
Puntos: 0
Información Dos Hojas de Excel distintas

Hace un tiempo pregunte como hacia para relacionar el excel con vb 60 y me esplicaron perfecrto. Y ahora me gustaria saber como hacer para no solo leer datos de una sola hoja de excel si no de varias.

Dim xLibro As Excel.Workbook
Set objExcel = New Excel.Application
Set xLibro = objExcel.Workbooks.Open(ArchivoExcel)
With xLibro
With .Sheets("hoja1") 'Hacemos referencia a la Hoja1consola
'Nos situamos en la celda con el primer dato
.Cells(5, 1).Select 'me posiciono en la primera celda columna y fila
Selection.End(xlDown).Select 'Baja hasta la última celda llena
Primeraparte = ActiveCell.Row
alae = 1
For alae = 1 To Primeraparte
'For alae = 1 To 10
datos(alae, 0) = .Cells(alae + 4, 1)
datos(alae, 1) = .Cells(alae + 4, 2)
Next alae
Selection.End(xlDown).Select 'Baja hasta la última celda llena
Fila = ActiveCell.Row 'capturo la fila
'Columna = ActiveCell.Column 'capturo la columna
'hh = NumeroJuego - 6000
rr = .Cells(Fila + hh, 1) 'pongo en ll lo que dice en la celda
Selection.End(xlDown).Select 'Baja hasta la última celda llena
UltimaLinea = ActiveCell.Row 'capturo la fila
Ultimo= Val(.Cells(ActiveCell.Row, 1))
For qaq = Fila To UltimaLinea
datps(rr + kak, 0) = .Cells(qaq, 1)
datos(rr + kak, 1) = .Cells(qaq, 2)
kak = kak + 1
Next qaq
End With
End With
objExcel.DisplayAlerts = False
xLibro.Close
'Eliminamos los objetos si ya no los usamos
objExcel.Workbooks.Close
Set objExcel = Nothing
Set xLibro = Nothing


El tema es que eso me va bien para la primera hoja y ahora quiero hacer algo parecido para la segunda pot lo que vi una senstencia que me podia ayudar pero no me srivio


msgbox xLibro.Sheets("libro2").Cells(8, 2)

esto me da el contenido del dato de esa celda de la hoja2
pero cuando me quiero mover adentro de la hoja esta instruccion me da error

xLibro.Sheets("hoja2i").Cells(5, 1).Select

yo pensaba que haciendo referencia a la hoja antes de cada movimiento me resultaria pero no me sirvio. Alguien sabe como es la instruccion para moverme dentro de una hoja que yo elija. Gracias. Si no me explique intento explicarlo de otra forma. Gracoas.
Pd: lo hago asi porque cuando queria preguntar por un hoja abria el excel consultaba y andaba pero cuando volvia a preguntar me daba error como que quedaba abierto el objeto.
  #2 (permalink)  
Antiguo 23/10/2009, 05:02
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 9 meses
Puntos: 29
Respuesta: Dos Hojas de Excel distintas

¿El fallo no está en la "i" de "hoja2i"? ¿o que sea "libro2" como en el msgbox?
Si no, yo había visto referenciar la primera hoja con Sheets(1), igual a ti te sirve Sheets(2).

Suerte.
  #3 (permalink)  
Antiguo 26/10/2009, 03:00
 
Fecha de Ingreso: julio-2007
Mensajes: 79
Antigüedad: 16 años, 9 meses
Puntos: 0
Respuesta: Dos Hojas de Excel distintas

Gracias por responder pero ese fue un error mi al transcribirlo.
Yo sigo investigando pero tengo fe que me ayudes a resolverlo ya que con el otro tema de las cola de impresion lleve mucho tiempo con google y varios tutoriales y ejemplos que no me sirvieron de nada. Pero tu respues si me ayudo a resolverlo.
Mi problema es el siguiente yo llevo varias listas de productos en una planilla de excel la cual tiene varios libros. Cada libro tiene su particularidad para recorrerlo con las sentencias:

With xLibro
'With .Sheets("libro1") 'Hacemos referencia a la Hoja1

.Cells(5, 1).Select 'me posiciono en la primera celda columna y filaSelection.End(xlDown).Select 'Baja hasta la última celda llena
Primeraparte = ActiveCell.Row
alae = 1
For alae = 1 To Primeraparte
Productos1(alae, 0) = .Cells(alae + 4, 1)
Productos1(alae, 1) = .Cells(alae + 4, 2)
Next alae
Selection.End(xlDown).Select 'Baja hasta la última celda llena
Fila = ActiveCell.Row 'capturo la fila
'Columna = ActiveCell.Column 'capturo la columna
'hh = NumeroJuego - 6000 'hh es la fila del primer juego del 6000
rr = .Cells(Fila + hh, 1) 'pongo en ll lo que dice en la celda
'carpeta = .Cells(Fila + hh, 2) 'me posiciono donde elijo
'MsgBox "rr " & rr
Selection.End(xlDown).Select 'Baja hasta la última celda llena
UltimaLinea = ActiveCell.Row 'capturo la fila
UltimoJuego = Val(.Cells(ActiveCell.Row, 1))
'MsgBox "UltimoJuego " & UltimoJuego
'MsgBox "UltimaLinea " & UltimaLinea
For qaq = Fila To UltimaLinea
'MsgBox qaq & .Cells(qaq, 2)
Productos1(rr + kak, 0) = .Cells(qaq, 1)
Productos1(rr + kak, 1) = .Cells(qaq, 2)
kak = kak + 1
Next qaq
End With
End With

con esto cargo en el primer array (Productos1)


Ahora lo que necesito hacer es pasar al libro2 y con otra secuencia de intrucciones dentro del libro2 del excel poder capturar el array(Productos2)
Si hago de esto una rutina (cosa que seria lo ideal) siempre me da error entre que abro y cierro el excel desde vb, hice muchas pruebas y todas me fallaron asi que estoy tratando que lo primero que haga el programa es cargar en array todas las matrices asi despues no tener problemas con variable global algo asi como fuera de rango y demas errores.
Entoces la idea es que antes de cerrar el excel cargar la otra matriz pero como tiene el 'With .Sheets("libro1") no se como pasar al libro2 por lo que se me ocurrio al ver esta intruccion en un ejemplo por la web
msgbox xLibro.Sheets("wii").Cells(8, 2)
que tendria que existir como ir de una casillero a otro haciendo referencia al libro como por ejemplo que no me anda pero me imagino que podria ser esta sintaxis

xLibro.Sheets("libro2").Cells(8, 2).Select
xLibro.Sheets("libro2").Selection.End(xlDown).Sele ct

y asi pero esto me da error capaz existe esto pero con otra sintaxis que no logro encontrar en la web

La idea es hacer referencia en la misma apertura de excel a varios libros de excel

libro1
libro2
libro3


Si sabes algo de esto un ejemplo seria de gran ayuda Gracias.
  #4 (permalink)  
Antiguo 26/10/2009, 04:05
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 9 meses
Puntos: 29
Respuesta: Dos Hojas de Excel distintas

Yo con excel no tengo experiencia, pero estuve probando a crear un fichero xls según un ejemplo que ví hace poco por aquí y, aunque conseguí poco más que crearlo, modificando mi código he conseguido escribir en 2 hojas.

Hago algo como:

Código :
Ver original
  1. Dim ExcObj As Object
  2. Set ExcObj = CreateObject("Excel.application")
  3. Dim xLibro As Object
  4. Set xLibro = ExcObj.workbooks.Open(App.Path & "\archivo.xls")
  5. Dim Hoja As Object
  6. Set Hoja = xLibro.Sheets("Hoja1")
  7. 'y trabajas con:
  8. With Hoja
  9.   'cells.....
  10.   '....
  11. End With
  12.  
  13. 'Para pasar a otra hoja:
  14. Set Hoja = xLibro.Sheets("Hoja2")
  15. With Hoja
  16.   '....
  17. End With
  18.  
  19. 'Al final se guarda y se descarga la memoria:
  20. ExcObj.Application.ActiveWorkbook.Save
  21. ExcObj.Application.Quit
  22.  
  23. Set ExcObj = Nothing
  24. Set xLibro = Nothing
  25. Set Hoja = Nothing

A ver si te sirve para arreglar tu código o quizá alguien que controle más me corrija o amplíe la información.

Suerte
  #5 (permalink)  
Antiguo 26/10/2009, 04:07
 
Fecha de Ingreso: julio-2007
Mensajes: 79
Antigüedad: 16 años, 9 meses
Puntos: 0
Respuesta: Dos Hojas de Excel distintas

Lo probare y te aviso a ver que me salio. 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 05:04.