varios en commandbutton

07/11/2007 - 12:48 por JForero | Informe spam
Buen día grupo

Pensando en simplificar un proceso deseo hacer lo siguiente:

1-. Tengo un libro llamado informes.xls, en la hoja1 tengo un commandbutton

2-. Tengo un libro llamado base.xls con la información a procesar

3-. el command button debe abrir el libro base.xls, copiar las columnas
B,C,D, H, J y pegarmelas en el libro informes.xls en una hoja nueva
(insertada a la derecha de hoja1) que se llame info_fecha (donde fecha es la
fecha del día de proceso)

4-. En la columna C de info_fecha tengo la fecha de colocación del dato,
necesito insertar en la siguiente columna vacía el número de días
transcurridos entre la columna C y la fecha de proceso

5-. Ahora necesito filtrar de info_fecha, de la columna D las filas que
digan "Finalizado" y crear una hoja nueva que se llame Final_fecha donde
fecha es la fecha del día de proceso)

6-. Luego filtrar también de la columna D las filas que digan "En Prueba" y
crear una hoja nueva que se llame Prueba_fecha donde fecha es la fecha del
día de proceso)

7-. Finalmente filtrar de la columna C las filas que tengan la fecha del día
de proceso y crear una hoja nueva que se llame Hoy_fecha donde fecha es la
fecha del día de proceso)

al hacer esto a diario, en el libro se acumularán info_fecha por cada día de
proceso y las hojas filtradas también en cada día de proceso.

He tratado de hacer todo esto en el botón, ya puedo abrir el libro base.xls,
filtrar pero no he podido pegarlos en las hojas nuevas y tengo errores que
no he podido resolver.

gracias por la colaboración

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
08/11/2007 - 01:56 | Informe spam
hola, jorge !

Pensando en simplificar un proceso deseo hacer lo siguiente: (...)
He tratado de hacer todo esto en el boton, ya puedo abrir el libro base.xls, filtrar
pero no he podido pegarlos en las hojas nuevas y tengo errores que no he podido resolver.
gracias por la colaboracion



en tanto aparece alguien con el suficiente tiempo para desmenuzar/adivinar/preparar/acomodar/... (y probar)
con alguna base de datos que se parezca a lo que expones como "detalles"... -?-
serviria si expones el codigo que ya estas usando (incluye las lineas con/y los errores que estas obteniendo)
y/o comentas si esperas que todo esto se desarrolle "desde ceros" -?-

saludos,
hector.

__ la consulta original (completa) __
1-. Tengo un libro llamado informes.xls, en la hoja1 tengo un commandbutton
2-. Tengo un libro llamado base.xls con la informacion a procesar
3-. el command button debe abrir el libro base.xls, copiar las columnas B,C,D, H, J
y pegarmelas en el libro informes.xls en una hoja nueva (insertada a la derecha de hoja1)
que se llame info_fecha (donde fecha es la fecha del dia de proceso)
4-. En la columna C de info_fecha tengo la fecha de colocacion del dato,
necesito insertar en la siguiente columna vacia el numero de dias transcurridos entre la columna C y la fecha de proceso
5-. Ahora necesito filtrar de info_fecha, de la columna D las filas que digan "Finalizado"
y crear una hoja nueva que se llame Final_fecha donde fecha es la fecha del día de proceso)
6-. Luego filtrar también de la columna D las filas que digan "En Prueba"
y crear una hoja nueva que se llame Prueba_fecha donde fecha es la fecha del día de proceso)
7-. Finalmente filtrar de la columna C las filas que tengan la fecha del dia de proceso
y crear una hoja nueva que se llame Hoy_fecha donde fecha es la fecha del dia de proceso), al hacer esto a diario
en el libro se acumularan info_fecha por cada dia de proceso y las hojas filtradas tambien en cada dia de proceso.
Respuesta Responder a este mensaje
#2 JForero
08/11/2007 - 15:15 | Informe spam
Hola hector,

a continuación describo el código utilizado, pero si hay una alternativa de
ceros que me optimice el código y me sirva para aprender más... bienvenida..

de antemano gracias por tu colaboración

Nota: de pronto las columnas no coincidan ejemplo en el código quiero
filtrar la columna E pero en la exposición inicial en el ejemplo coloco la
H,

Private Sub btnGernerarReporte_Click()
'abre libro base
'copia hoja principal a libro generador de reportes
Application.ScreenUpdating = False
With ThisWorkbook.Worksheets.Add
.Name = "Info_" & Format(Date, "ddmmyy")
Set AbreBase = Workbooks.Open(ThisWorkbook.Path & "\base.xls")
ActiveSheet.Range("a1:k1").EntireColumn.Copy
Destination:=.Range("a1")
ActiveWorkbook.Close False

Dim nCols As Byte, n As Byte, Criterios, Nombres
Criterios = Array("Finalizado", "Pruebas usuario")
Nombres = Array("Finalizado_", "PrUsuario_")
Application.ScreenUpdating = False
With Worksheets("Info_311007")
If .FilterMode Then .ShowAllData
.[iv:iv].Clear: nCols = .[a1].End(xlToRight).Column
For n = LBound(Criterios) To UBound(Criterios)
.[iv2].Formula = "=(d2=""" & Criterios(n) & """)"
ThisWorkbook.Worksheets.Add after:=Worksheets("Reportes")
.[a1].CurrentRegion.AdvancedFilter Action:=xlFilterCopy,
criteriarange:=.[iv1:iv2], copytorange:=Range(Cells(1, 1), Cells(1, nCols)),
unique:=False
ActiveSheet.Name = Nombres(n) & Format(Date, "ddmmyy")
Next
.[iv2].Clear
End With
End With
end sub


"Héctor Miguel" escribió en el mensaje
news:uQl$
hola, jorge !

Pensando en simplificar un proceso deseo hacer lo siguiente: (...)
He tratado de hacer todo esto en el boton, ya puedo abrir el libro
base.xls, filtrar
pero no he podido pegarlos en las hojas nuevas y tengo errores que no he
podido resolver.
gracias por la colaboracion



en tanto aparece alguien con el suficiente tiempo para
desmenuzar/adivinar/preparar/acomodar/... (y probar)
con alguna base de datos que se parezca a lo que expones como
"detalles"... -?-
serviria si expones el codigo que ya estas usando (incluye las lineas
con/y los errores que estas obteniendo)
y/o comentas si esperas que todo esto se desarrolle "desde ceros" -?-

saludos,
hector.

__ la consulta original (completa) __
1-. Tengo un libro llamado informes.xls, en la hoja1 tengo un
commandbutton
2-. Tengo un libro llamado base.xls con la informacion a procesar
3-. el command button debe abrir el libro base.xls, copiar las columnas
B,C,D, H, J
y pegarmelas en el libro informes.xls en una hoja nueva (insertada a la
derecha de hoja1)
que se llame info_fecha (donde fecha es la fecha del dia de proceso)
4-. En la columna C de info_fecha tengo la fecha de colocacion del dato,
necesito insertar en la siguiente columna vacia el numero de dias
transcurridos entre la columna C y la fecha de proceso
5-. Ahora necesito filtrar de info_fecha, de la columna D las filas que
digan "Finalizado"
y crear una hoja nueva que se llame Final_fecha donde fecha es la fecha
del día de proceso)
6-. Luego filtrar también de la columna D las filas que digan "En Prueba"
y crear una hoja nueva que se llame Prueba_fecha donde fecha es la fecha
del día de proceso)
7-. Finalmente filtrar de la columna C las filas que tengan la fecha del
dia de proceso
y crear una hoja nueva que se llame Hoy_fecha donde fecha es la fecha del
dia de proceso), al hacer esto a diario
en el libro se acumularan info_fecha por cada dia de proceso y las hojas
filtradas tambien en cada dia de proceso.




Respuesta Responder a este mensaje
#3 Héctor Miguel
09/11/2007 - 05:25 | Informe spam
hola, jorge !

... si hay una alternativa de ceros que me optimice el codigo y me sirva para aprender... bienvenida...



con base en los datos de tu consulta original:
- insertar las hojas a la derecha de "hoja1"
- pasar del libro base las columnas B,C,D,H y J (la constante de tipo String para facilidad de modificaciones)
- filtrar columna D (antes la columna H de la hoja en el libro base) por "Finalizado" y "En Prueba"
- filtrar columna C (antes la columna D) por la fecha del dia del proceso

prueba con la siguiente propuesta de macro (no uso filtros avanzados sino autofiltros)

nota: (creo que) te ahorrarias las 3 hojas de reportes ("Final_", "Prueba_" y "Hoy_")
-> si dejas solamente la hoja "Info_" y utilizas los autofiltros segun el concepto que necesites imprimir/reportar/... -?-

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.

Private Const Base As String = "b1:d1,h1,j1"
Private Sub btnGernerarReporte_Click()
Application.ScreenUpdating = False
Dim Fecha As String, nCols As Byte, n As Byte, Hojas
Fecha = Format(Date, "ddmmyy")
nCols = Range(Base).Count
Hojas = Array("Hoy_", "Prueba_", "Final_", "Info_")
For n = LBound(Hojas) To UBound(Hojas)
With Worksheets.Add(After:=Worksheets("hoja1"))
.Name = Hojas(n) & Fecha: End With: Next
With Worksheets("Info_" & Fecha)
Workbooks.Open ThisWorkbook.Path & "\base.xls"
Range(Base).EntireColumn.Copy .Range("a1")
ActiveWorkbook.Close False
With .Range("a1").Offset(1, nCols).Resize(1, 1)
.Offset(-1) = "Dias a " & Fecha
.Formula = "=today()-c2": .NumberFormat = "0"
.AutoFill .Resize(Range("a65536").End(xlUp).Row - 1), xlFillDefault
With .Resize(Range("a65536").End(xlUp).Row - 1): .Value = .Value: End With
End With
With .Range("a1")
.AutoFilter Field:=4, Criteria1:="Finalizado"
.CurrentRegion.SpecialCells(xlCellTypeVisible).Copy _
Worksheets("Final_" & Fecha).Range("a1"): .AutoFilter
.AutoFilter Field:=4, Criteria1:="En Prueba"
.CurrentRegion.SpecialCells(xlCellTypeVisible).Copy _
Worksheets("Prueba_" & Fecha).Range("a1"): .AutoFilter
.AutoFilter Field:=3, Criteria1:Íate(Date)
.CurrentRegion.SpecialCells(xlCellTypeVisible).Copy _
Worksheets("Hoy_" & Fecha).Range("a1"): .AutoFilter
End With
End With
End Sub
Respuesta Responder a este mensaje
#4 JForero
11/11/2007 - 20:17 | Informe spam
Hola Hector,

he puesto en práctica las lineas que planteas, pero me produce el siguiente
error

"1004" en tiempr de ejecución
error en el método 'Range' de objeto '_Worksheet'

al depurar es en:
nCols = Range(Base).Count

saludos.. y gracias por tu colaboración


"Héctor Miguel" escribió en el mensaje
news:%
hola, jorge !

... si hay una alternativa de ceros que me optimice el codigo y me sirva
para aprender... bienvenida...



con base en los datos de tu consulta original:
- insertar las hojas a la derecha de "hoja1"
- pasar del libro base las columnas B,C,D,H y J (la constante de tipo
String para facilidad de modificaciones)
- filtrar columna D (antes la columna H de la hoja en el libro base) por
"Finalizado" y "En Prueba"
- filtrar columna C (antes la columna D) por la fecha del dia del proceso

prueba con la siguiente propuesta de macro (no uso filtros avanzados sino
autofiltros)

nota: (creo que) te ahorrarias las 3 hojas de reportes ("Final_",
"Prueba_" y "Hoy_")
-> si dejas solamente la hoja "Info_" y utilizas los autofiltros segun
el concepto que necesites imprimir/reportar/... -?-

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.

Private Const Base As String = "b1:d1,h1,j1"
Private Sub btnGernerarReporte_Click()
Application.ScreenUpdating = False
Dim Fecha As String, nCols As Byte, n As Byte, Hojas
Fecha = Format(Date, "ddmmyy")
nCols = Range(Base).Count
Hojas = Array("Hoy_", "Prueba_", "Final_", "Info_")
For n = LBound(Hojas) To UBound(Hojas)
With Worksheets.Add(After:=Worksheets("hoja1"))
.Name = Hojas(n) & Fecha: End With: Next
With Worksheets("Info_" & Fecha)
Workbooks.Open ThisWorkbook.Path & "\base.xls"
Range(Base).EntireColumn.Copy .Range("a1")
ActiveWorkbook.Close False
With .Range("a1").Offset(1, nCols).Resize(1, 1)
.Offset(-1) = "Dias a " & Fecha
.Formula = "=today()-c2": .NumberFormat = "0"
.AutoFill .Resize(Range("a65536").End(xlUp).Row - 1), xlFillDefault
With .Resize(Range("a65536").End(xlUp).Row - 1): .Value = .Value: End
With
End With
With .Range("a1")
.AutoFilter Field:=4, Criteria1:="Finalizado"
.CurrentRegion.SpecialCells(xlCellTypeVisible).Copy _
Worksheets("Final_" & Fecha).Range("a1"): .AutoFilter
.AutoFilter Field:=4, Criteria1:="En Prueba"
.CurrentRegion.SpecialCells(xlCellTypeVisible).Copy _
Worksheets("Prueba_" & Fecha).Range("a1"): .AutoFilter
.AutoFilter Field:=3, Criteria1:Íate(Date)
.CurrentRegion.SpecialCells(xlCellTypeVisible).Copy _
Worksheets("Hoy_" & Fecha).Range("a1"): .AutoFilter
End With
End With
End Sub

Respuesta Responder a este mensaje
#5 Héctor Miguel
11/11/2007 - 21:11 | Informe spam
hola, Jorge !

he puesto en practica las lineas que planteas, pero me produce el siguiente error
"1004" en tiempr de ejecucion: error en el metodo 'Range' de objeto '_Worksheet'
al depurar es en:
nCols = Range(Base).Count



(segun mis pruebas, no debieras obtener errores -> con los supuestos de la propuesta-) -?-

1) de la linea que causa el error segun comentas: -> nCols = Range(Base).Count
a) "nCols" es una variable definida con el tipo de datos Byte (enteros con alcance de 0 a 255)
b) "Base" es una variable definida como constante: -> Private Const Base As String = "b1:d1,h1,j1"
c) la instruccion: -> nCols = Range(Base).Count "debiera" devolver el numero entero 5 (cinco)
como podras ver, el contenido de (Base) es la referencia a tus 5 celdas/columnas [B1, C1, D1, H1, H1]
d) asumo que btnGernerarReporte es un boton de la barra de herramientas cuadro de controles incrustado en la hoja

2) revisa en el editor de vba, en (menu) herramientas / referencias...
por si hubiera perdida alguna referencia a librerias basicas que diga: FALTA: xxx o MISSING: xxx

comentas (si hubiera) algun detalle mas significativo ? (que pudiera interferir con la ejecucion de la macro)
saludos,
hector.

__ las consultas anteriores __
... si hay una alternativa de ceros que me optimice el codigo y me sirva para aprender... bienvenida...



con base en los datos de tu consulta original:
- insertar las hojas a la derecha de "hoja1"
- pasar del libro base las columnas B,C,D,H y J (la constante de tipo String para facilidad de modificaciones)
- filtrar columna D (antes la columna H de la hoja en el libro base) por "Finalizado" y "En Prueba"
- filtrar columna C (antes la columna D) por la fecha del dia del proceso

prueba con la siguiente propuesta de macro (no uso filtros avanzados sino autofiltros)

nota: (creo que) te ahorrarias las 3 hojas de reportes ("Final_", "Prueba_" y "Hoy_")
-> si dejas solamente la hoja "Info_" y utilizas los autofiltros segun el concepto que necesites imprimir/reportar/... -?-

Private Const Base As String = "b1:d1,h1,j1"
Private Sub btnGernerarReporte_Click()
Application.ScreenUpdating = False
Dim Fecha As String, nCols As Byte, n As Byte, Hojas
Fecha = Format(Date, "ddmmyy")
nCols = Range(Base).Count
Hojas = Array("Hoy_", "Prueba_", "Final_", "Info_")
For n = LBound(Hojas) To UBound(Hojas)
With Worksheets.Add(After:=Worksheets("hoja1"))
.Name = Hojas(n) & Fecha: End With: Next
With Worksheets("Info_" & Fecha)
Workbooks.Open ThisWorkbook.Path & "\base.xls"
Range(Base).EntireColumn.Copy .Range("a1")
ActiveWorkbook.Close False
With .Range("a1").Offset(1, nCols).Resize(1, 1)
.Offset(-1) = "Dias a " & Fecha
.Formula = "=today()-c2": .NumberFormat = "0"
.AutoFill .Resize(Range("a65536").End(xlUp).Row - 1), xlFillDefault
With .Resize(Range("a65536").End(xlUp).Row - 1): .Value = .Value: End With
End With
With .Range("a1")
.AutoFilter Field:=4, Criteria1:="Finalizado"
.CurrentRegion.SpecialCells(xlCellTypeVisible).Copy _
Worksheets("Final_" & Fecha).Range("a1"): .AutoFilter
.AutoFilter Field:=4, Criteria1:="En Prueba"
.CurrentRegion.SpecialCells(xlCellTypeVisible).Copy _
Worksheets("Prueba_" & Fecha).Range("a1"): .AutoFilter
.AutoFilter Field:=3, Criteria1:Íate(Date)
.CurrentRegion.SpecialCells(xlCellTypeVisible).Copy _
Worksheets("Hoy_" & Fecha).Range("a1"): .AutoFilter
End With
End With
End Sub
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida