llamar a un libro excel desde un modulo VB

07/08/2008 - 15:23 por gongi | Informe spam
Hola Grupo!

Por favor, quiero utilizar este código para llevar un historico de mis
facturas (desgloso los cobros por cada factura) , pero el historico
esta en *otra hoja* de *otro libro*. ¿Como podría "llamar" a ese
libro, en el With ?
El código esta sacado de aquí, creo que es de Hector.

Saludos Cordiales
gongi

Sub Historico()
Dim Generales, Cobros, n As Byte, Col As Byte
With Worksheets("factura")
Generales = Array(.[b2], .[d53], .[d54], .[b7], .[b3], .[b4], .
[b5], .[b56], .[c56], .[e56])
n = Application.Count(.[f54:f62]) 'cuenta el nº de cobros'
Cobros = Array(.[f54].Resize(n).Value, .[g54].Resize(n).Value, .
[h54].Resize(n).Value) 'Array dinamico cambia de tamaño segun n'
End With
With Worksheets("historico")
With .Range("a" & .Range("h" & Rows.Count).End(xlUp).Row)
'detecta la ultima entrada'
.Offset(1).Resize(, 10) = Generales 'llena la primera fila
hasta la columan 10'
.Offset(1, 8) = n 'coloca en contador en la ultima columa '
For Col = 0 To 2 'segun el n de columnas a llenar detalle
de cobros 3 0-1-2'
.Offset(1, 10 + Col).Resize(n) = Cobros(Col)
Next
End With
End With
End Sub

Preguntas similare

Leer las respuestas

#1 Juan M
07/08/2008 - 16:25 | Informe spam
Hola,

Para emplear los datos de otro libro tienes dos opciones,
La primera sería abrir el libro y referirte a las hojas y rangos de ese
libro, algo como esto

dim mlh as workbook
Set mlh = Workbooks.Open("miruta", ReadOnly:=True)
With mlh.Worksheets("historico")
...
End With
mlh.Close
Set mlh = Nothing

Esto podría ocasionar que si existiera un error en el código el libro
histórico quedara abierto y accesible, a menos que controles los errores y
lo cierres al detectar dicho error.

La segunda opción sería si tu libro de datos histórico tiene forma de tabla,
es decir, tiene unos encabezados y a continuación los datos.
Si esto ocurre podrías emplear ADO para extraer los datos y no tener
necesidad de abrir ese archivo.

Un saludo,
Juan



"gongi" escribió
Hola Grupo!

Por favor, quiero utilizar este código para llevar un historico de mis
facturas (desgloso los cobros por cada factura) , pero el historico
esta en *otra hoja* de *otro libro*. ¿Como podría "llamar" a ese
libro, en el With ?
El código esta sacado de aquí, creo que es de Hector.

Saludos Cordiales
gongi

Sub Historico()
Dim Generales, Cobros, n As Byte, Col As Byte
With Worksheets("factura")
Generales = Array(.[b2], .[d53], .[d54], .[b7], .[b3], .[b4], .
[b5], .[b56], .[c56], .[e56])
n = Application.Count(.[f54:f62]) 'cuenta el nº de cobros'
Cobros = Array(.[f54].Resize(n).Value, .[g54].Resize(n).Value, .
[h54].Resize(n).Value) 'Array dinamico cambia de tamaño segun n'
End With
With Worksheets("historico")
With .Range("a" & .Range("h" & Rows.Count).End(xlUp).Row)
'detecta la ultima entrada'
.Offset(1).Resize(, 10) = Generales 'llena la primera fila
hasta la columan 10'
.Offset(1, 8) = n 'coloca en contador en la ultima columa '
For Col = 0 To 2 'segun el n de columnas a llenar detalle
de cobros 3 0-1-2'
.Offset(1, 10 + Col).Resize(n) = Cobros(Col)
Next
End With
End With
End Sub
Respuesta Responder a este mensaje
#2 gongi
07/08/2008 - 21:54 | Informe spam
On 7 ago, 16:25, "Juan M" wrote:
Hola,

Para emplear los datos de otro libro tienes dos opciones,
La primera sería abrir el libro y referirte a las hojas y rangos de ese
libro, algo como esto

dim mlh as workbook
Set mlh = Workbooks.Open("miruta", ReadOnly:=True)
With mlh.Worksheets("historico")
...
End With
mlh.Close
Set mlh = Nothing

Esto podría ocasionar que si existiera un error en el código el libro
histórico quedara abierto y accesible, a menos que controles los errores y
lo cierres al detectar dicho error.

La segunda opción sería si tu libro de datos histórico tiene forma de tabla,
es decir, tiene unos encabezados y a continuación los datos.
Si esto ocurre podrías emplear ADO para extraer los datos y no tener
necesidad de abrir ese archivo.

Un saludo,
Juan

"gongi"  escribió
Hola Grupo!

Por favor, quiero utilizar este código para llevar un historico de mis
facturas (desgloso los cobros por cada factura) , pero el historico
esta en *otra hoja*  de *otro libro*. ¿Como podría "llamar" a ese
libro, en el With ?
El código esta sacado de aquí, creo que es de Hector.

Saludos Cordiales
gongi

Sub Historico()
Dim Generales, Cobros, n As Byte, Col As Byte
   With Worksheets("factura")
     Generales = Array(.[b2], .[d53], .[d54], .[b7], .[b3], .[b4], .
[b5], .[b56], .[c56], .[e56])
     n = Application.Count(.[f54:f62]) 'cuenta el nº de cobros'
    Cobros = Array(.[f54].Resize(n).Value, .[g54].Resize(n).Value, .
[h54].Resize(n).Value) 'Array dinamico cambia de tamaño segun n'
   End With
With Worksheets("historico")
    With .Range("a" & .Range("h" & Rows.Count).End(xlUp).Row)
'detecta la ultima entrada'
        .Offset(1).Resize(, 10) = Generales 'llena la primera fila
hasta la columan 10'
        .Offset(1, 8) = n 'coloca en contador en la ultima columa '
           For Col = 0 To 2  'segun el n de columnas a llenar detalle
de cobros 3 0-1-2'
                .Offset(1, 10 + Col).Resize(n) = Cobros(Col)
           Next
    End With
End With
End Sub



Hola Juan !

Gracias por responder,

Set mlh = Workbooks.Open("miruta", ReadOnly:=True) --> creo que
debo indicar la ruta "c:\minuta.xls"

ya pruebo y comento.

Tambien puedo abril el libro *antes* y usar Activate ?
ADO se me escapa
Gracias de nuevo
Respuesta Responder a este mensaje
#3 Héctor Miguel
08/08/2008 - 02:36 | Informe spam
hol, domingo !

... quiero utilizar este codigo para llevar un historico de mis facturas (desgloso los cobros por cada factura)
pero el historico esta en *otra hoja* de *otro libro*. Como podria "llamar" a ese libro, en el With ? ...



si tu otro libro ya esta abierto en la sesion (en tu consulta no comentas que necesites trabajar con libros cerrados) -???-
solo cambia su referencia en la instruccion donde inicia el bloque With +/- como sigue:

de: -> With Worksheets("historico")
a: -> With Workbooks("el otro libro.xls").Worksheets("la otra hoja")

saludos,
hector.

__ el codigo expuesto __
Sub Historico()
Dim Generales, Cobros, n As Byte, Col As Byte
With Worksheets("factura")
Generales = Array(.[b2], .[d53], .[d54], .[b7], .[b3], .[b4], .[b5], .[b56], .[c56], .[e56])
n = Application.Count(.[f54:f62]) ' cuenta el nº de cobros'
Cobros = Array(.[f54].Resize(n).Value, .[g54].Resize(n).Value, .[h54].Resize(n).Value) ' Array dinamico cambia de tamano segun n
End With
With Worksheets("historico")
With .Range("a" & .Range("h" & Rows.Count).End(xlUp).Row) ' detecta la ultima entrada
.Offset(1).Resize(, 10) = Generales ' llena la primera fila hasta la columan 10
.Offset(1, 8) = n ' coloca en contador en la ultima columa
For Col = 0 To 2 ' segun el n de columnas a llenar detalle de cobros 3 0-1-2
.Offset(1, 10 + Col).Resize(n) = Cobros(Col)
Next
End With
End With
End Sub
Respuesta Responder a este mensaje
#4 Juan M
08/08/2008 - 07:53 | Informe spam
Hola,

Sí puedes tener ya abierto el libro pero, por lo menos para mi, es más
fácil/cómodo referirme a cada objeto independientemente de cual sea el que
está activo, con lo que evito problemas de qué datos tomo de qué hoja o de
qué libro.

La sugerencia de usar ADO, es en el caso de que solo tengas que extraer
extraer/introducir datos de ese libro sin necesidad de aplicar formatos,
operaciones o cosas en las que necesites algo más que los datos y si tiene
la estructura tabular típica de las bases de datos.
Si esto es así y comentas detalles significativos podríamos intentar
desarrollarlo.

Un saludo,
Juan



"gongi" escribió
On 7 ago, 16:25, "Juan M" wrote:
Hola,

Para emplear los datos de otro libro tienes dos opciones,
La primera sería abrir el libro y referirte a las hojas y rangos de ese
libro, algo como esto

dim mlh as workbook
Set mlh = Workbooks.Open("miruta", ReadOnly:=True)
With mlh.Worksheets("historico")
...
End With
mlh.Close
Set mlh = Nothing

Esto podría ocasionar que si existiera un error en el código el libro
histórico quedara abierto y accesible, a menos que controles los errores y
lo cierres al detectar dicho error.

La segunda opción sería si tu libro de datos histórico tiene forma de
tabla,
es decir, tiene unos encabezados y a continuación los datos.
Si esto ocurre podrías emplear ADO para extraer los datos y no tener
necesidad de abrir ese archivo.

Un saludo,
Juan

"gongi" escribió
Hola Grupo!

Por favor, quiero utilizar este código para llevar un historico de mis
facturas (desgloso los cobros por cada factura) , pero el historico
esta en *otra hoja* de *otro libro*. ¿Como podría "llamar" a ese
libro, en el With ?
El código esta sacado de aquí, creo que es de Hector.

Saludos Cordiales
gongi

Sub Historico()
Dim Generales, Cobros, n As Byte, Col As Byte
With Worksheets("factura")
Generales = Array(.[b2], .[d53], .[d54], .[b7], .[b3], .[b4], .
[b5], .[b56], .[c56], .[e56])
n = Application.Count(.[f54:f62]) 'cuenta el nº de cobros'
Cobros = Array(.[f54].Resize(n).Value, .[g54].Resize(n).Value, .
[h54].Resize(n).Value) 'Array dinamico cambia de tamaño segun n'
End With
With Worksheets("historico")
With .Range("a" & .Range("h" & Rows.Count).End(xlUp).Row)
'detecta la ultima entrada'
.Offset(1).Resize(, 10) = Generales 'llena la primera fila
hasta la columan 10'
.Offset(1, 8) = n 'coloca en contador en la ultima columa '
For Col = 0 To 2 'segun el n de columnas a llenar detalle
de cobros 3 0-1-2'
.Offset(1, 10 + Col).Resize(n) = Cobros(Col)
Next
End With
End With
End Sub



Hola Juan !

Gracias por responder,

Set mlh = Workbooks.Open("miruta", ReadOnly:=True) --> creo que
debo indicar la ruta "c:\minuta.xls"

ya pruebo y comento.

Tambien puedo abril el libro *antes* y usar Activate ?
ADO se me escapa
Gracias de nuevo
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida