Macro con Calendario

08/12/2007 - 19:21 por JForero | Informe spam
Buenos días grupo

Necesito realizar lo siguiente:

En la hoja1 tengo un un textbox para la captura de la fecha dd/mm/aaaa y un
botón

en la hoja2 tengo la información desde la columna A a la I
En la columna J tengo el día de la semana: que puede ser lunes, martes,
etc...

necesito en el botón buscar la fecha en el calendario de windows y saber a
que día corresponde, lunes martes etc...

entonces me debe crear una nueva hoja que se llame "fecha" en donde fecha es
dd/mm/aaaa (digitado en el textbox) y me debe pegar las columnas A, B, C, E,
de la hoja2 filtrando el día encontrado en el calendario.

es decir si digito 07/12/2007, que corresponde a viernes, buscar enhoja2 lo
que diga viernes y pegarlo en una hoja nueva llamada 07/12/2007, que se debe
incrustar a la derecha de hoja2.

Sería ideal si se puede que al digitar una fecha errada, por ejemplo texto o
no separada por /, me sacara un error (pero es opcional)

gracias por la colaboración

Jorgef

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
08/12/2007 - 22:31 | Informe spam
hola, Jorge !

1) (solo para no repetir comentarios anteriores)...
por lo relacionado a trabajar con fechas, textboxes (en formularios o en hoja de calculo) y vba/excel
asi como para obtener a que dia de la semana corresponde una fecha (valida) "determinada",
y para (tratar de) comprobar si un dato es factible de validar como dato-fecha (con algunos "imponderabls")...
-> revisa (de nuevo) la siguiente conversacion: -> http://tinyurl.com/2jcft8

2) si ninguna de las eventualidades que se tratan de cubrir en el punto anterior es relavante o importante para tu proyecto...
(plis, disculpa la insistencia de mandarte a dicha conversacion) :))

3) para el resto de tu consulta, prueba con la opcion de filtros avanzados por codigo ;)

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

__ la consulta original __
Necesito realizar lo siguiente:
En la hoja1 tengo un un textbox para la captura de la fecha dd/mm/aaaa y un boton
en la hoja2 tengo la informacion desde la columna A a la I
En la columna J tengo el día de la semana: que puede ser lunes, martes, etc...
necesito en el botón buscar la fecha en el calendario de windows y saber a que dia corresponde, lunes martes etc...
entonces me debe crear una nueva hoja que se llame "fecha" en donde fecha es dd/mm/aaaa (digitado en el textbox)
y me debe pegar las columnas A, B, C, E, de la hoja2 filtrando el día encontrado en el calendario.
es decir si digito 07/12/2007, que corresponde a viernes, buscar en hoja2 lo que diga viernes
y pegarlo en una hoja nueva llamada 07/12/2007, que se debe incrustar a la derecha de hoja2.
Sería ideal si se puede que al digitar una fecha errada, por ejemplo texto o no separada por /, me sacara un error (pero es opcional)
Respuesta Responder a este mensaje
#2 JForero
09/12/2007 - 19:17 | Informe spam
Hola Hector,

me he leído tus comentarios, los de iván y demás participantes y
definitivamente conviene más utilizar el control calendar que sugieres, ya
lo inclui en mi hoja de cálculo (calendar1), pero ahora necesito comparar la
fecha escogida (seleccionada) con el día a que corresponda (lunes, martes,
etc..) y realizar el filtro...

como lo hago?? ...

nuevamente gracias por tu colaboración e importantes aportes

Jorgef.


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

1) (solo para no repetir comentarios anteriores)...
por lo relacionado a trabajar con fechas, textboxes (en formularios o
en hoja de calculo) y vba/excel
asi como para obtener a que dia de la semana corresponde una fecha
(valida) "determinada",
y para (tratar de) comprobar si un dato es factible de validar como
dato-fecha (con algunos "imponderabls")...
-> revisa (de nuevo) la siguiente conversacion: ->
http://tinyurl.com/2jcft8

2) si ninguna de las eventualidades que se tratan de cubrir en el punto
anterior es relavante o importante para tu proyecto...
(plis, disculpa la insistencia de mandarte a dicha conversacion) :))

3) para el resto de tu consulta, prueba con la opcion de filtros avanzados
por codigo ;)

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

__ la consulta original __
Necesito realizar lo siguiente:
En la hoja1 tengo un un textbox para la captura de la fecha dd/mm/aaaa y
un boton
en la hoja2 tengo la informacion desde la columna A a la I
En la columna J tengo el día de la semana: que puede ser lunes, martes,
etc...
necesito en el botón buscar la fecha en el calendario de windows y saber
a que dia corresponde, lunes martes etc...
entonces me debe crear una nueva hoja que se llame "fecha" en donde fecha
es dd/mm/aaaa (digitado en el textbox)
y me debe pegar las columnas A, B, C, E, de la hoja2 filtrando el día
encontrado en el calendario.
es decir si digito 07/12/2007, que corresponde a viernes, buscar en hoja2
lo que diga viernes
y pegarlo en una hoja nueva llamada 07/12/2007, que se debe incrustar a
la derecha de hoja2.
Sería ideal si se puede que al digitar una fecha errada, por ejemplo
texto o no separada por /, me sacara un error (pero es opcional)




Respuesta Responder a este mensaje
#3 Héctor Miguel
10/12/2007 - 02:31 | Informe spam
hola, Jorge !

me he leido tus comentarios, los de ivan y demas participantes y definitivamente conviene mas utilizar el control calendar que sugieres
ya lo inclui en mi hoja de calculo (calendar1), pero ahora necesito comparar la fecha escogida (seleccionada)
con el dia a que corresponda (lunes, martes, etc..) y realizar el filtro...
como lo hago?? ...



1) para obtener el nombre del dia de la fecha seleccionada en el control "calendar1"...
y establecerlo como valor de alguna variabla declarada de tipo texto (p.e. DiaFiltro As String)

DiaFiltro = Format(Calendar1, "dddd")

2) para insertar una nueva hoja a a derecha de "hoja2" cuyo nombre sera la fecha seleccionada en el "calendar1"...

With Worksheets.Add(After:=Worksheets("hoja2"))
.Name = Format(Calendar1, "dd-mm-yyyy")
End With

3) para terminar las acciones de tu consulta (con los datos conocidos hasta ahora)...
prueba con una macro +/- como la siguiente que deberas copiar/pegar...
-> en el modulo de codigo de "la hoja" donde tienes incrustado el objeto "calendar1" (la hoja1 ?)

OJO: estoy suponiendo que en la hoja2 la fila 1 corresponde a los titulos y los datos "reales" a partir de la fila 2
-> y... que a partir de la columna K de la hoja2 se pueden utilizar (para las acciones del codigo)
(K se deja vacia y L se usa para los filtros avanzados solo las celdas L1 y L2)
-> y que en la columna "I" donde tienes los dias de la semana estan "completos" y en espanol (lunes, martes, ...)
(nuevamente, podrias obtener 0 -cero- datos filtrados si se ejecuta la macro en un equipo en idioma NO en espanol) :-((

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

Private Sub Calendar1_Click()
Application.ScreenUpdating = False
Dim DiaFiltro As String, NuevaHoja As String, Existe As Boolean
DiaFiltro = Format(Calendar1, "dddd")
NuevaHoja = Format(Calendar1, "dd-mm-yyyy")
On Error Resume Next
Existe = Len(Worksheets(NuevaHoja).Name) > 0
If Existe Then MsgBox "La hoja: " & NuevaHoja & " YA existe !!!": Exit Sub
On Error GoTo 0
With Worksheets("hoja2")
With Worksheets.Add(After:=Worksheets(.Name))
.Name = NuevaHoja
End With
.Range("a1:c1,e1").Copy Worksheets(NuevaHoja).Range("a1")
.Range("j1").Copy .Range("l1")
.Range("l2") = DiaFiltro
.Range("a1").CurrentRegion.AdvancedFilter _
Action:=xlFilterCopy, _
CriteriaRange:=.Range("l1:l2"), _
CopyToRange:=Worksheets(NuevaHoja).Range("a1:d1"), _
Unique:=False
.Range("l1:l2").Clear
End With
End Sub
Respuesta Responder a este mensaje
#4 JForero
10/12/2007 - 04:22 | Informe spam
Saludos Hector...

Funciona a la perfección...

solo dos cosillas...

1-. los títulos van desde la fila 1 a la fila 8, como puedo hacer para que
pegue todo el título..

2-. como puedo hacer para que cuando me genere la nueva hoja, me pegue los
datos con el formato que tienen las celdas en cuanto a tamaño y por ejemplo
tengo algunas marcadas con ajustar texto. etc...

Gracias por tu ayuda

Jorgef.




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

me he leido tus comentarios, los de ivan y demas participantes y
definitivamente conviene mas utilizar el control calendar que sugieres
ya lo inclui en mi hoja de calculo (calendar1), pero ahora necesito
comparar la fecha escogida (seleccionada)
con el dia a que corresponda (lunes, martes, etc..) y realizar el
filtro...
como lo hago?? ...



1) para obtener el nombre del dia de la fecha seleccionada en el control
"calendar1"...
y establecerlo como valor de alguna variabla declarada de tipo texto
(p.e. DiaFiltro As String)

DiaFiltro = Format(Calendar1, "dddd")

2) para insertar una nueva hoja a a derecha de "hoja2" cuyo nombre sera la
fecha seleccionada en el "calendar1"...

With Worksheets.Add(After:=Worksheets("hoja2"))
.Name = Format(Calendar1, "dd-mm-yyyy")
End With

3) para terminar las acciones de tu consulta (con los datos conocidos
hasta ahora)...
prueba con una macro +/- como la siguiente que deberas copiar/pegar...
-> en el modulo de codigo de "la hoja" donde tienes incrustado el
objeto "calendar1" (la hoja1 ?)

OJO: estoy suponiendo que en la hoja2 la fila 1 corresponde a los titulos
y los datos "reales" a partir de la fila 2
-> y... que a partir de la columna K de la hoja2 se pueden utilizar (para
las acciones del codigo)
(K se deja vacia y L se usa para los filtros avanzados solo las celdas
L1 y L2)
-> y que en la columna "I" donde tienes los dias de la semana estan
"completos" y en espanol (lunes, martes, ...)
(nuevamente, podrias obtener 0 -cero- datos filtrados si se ejecuta la
macro en un equipo en idioma NO en espanol) :-((

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

Private Sub Calendar1_Click()
Application.ScreenUpdating = False
Dim DiaFiltro As String, NuevaHoja As String, Existe As Boolean
DiaFiltro = Format(Calendar1, "dddd")
NuevaHoja = Format(Calendar1, "dd-mm-yyyy")
On Error Resume Next
Existe = Len(Worksheets(NuevaHoja).Name) > 0
If Existe Then MsgBox "La hoja: " & NuevaHoja & " YA existe !!!": Exit
Sub
On Error GoTo 0
With Worksheets("hoja2")
With Worksheets.Add(After:=Worksheets(.Name))
.Name = NuevaHoja
End With
.Range("a1:c1,e1").Copy Worksheets(NuevaHoja).Range("a1")
.Range("j1").Copy .Range("l1")
.Range("l2") = DiaFiltro
.Range("a1").CurrentRegion.AdvancedFilter _
Action:=xlFilterCopy, _
CriteriaRange:=.Range("l1:l2"), _
CopyToRange:=Worksheets(NuevaHoja).Range("a1:d1"), _
Unique:=False
.Range("l1:l2").Clear
End With
End Sub

Respuesta Responder a este mensaje
#5 Héctor Miguel
10/12/2007 - 05:18 | Informe spam
hola, Jorge !

solo dos cosillas...
1-. los titulos van desde la fila 1 a la fila 8, como puedo hacer para que pegue todo el titulo..
2-. como puedo hacer para que cuando me genere la nueva hoja, me pegue los datos con el formato que tienen las celdas
en cuanto a tamano y por ejemplo tengo algunas marcadas con ajustar texto. etc...



con los siguientes cambios, se copian las columnas A:C,E (toda, para pasar formatos, tamano de columnas, etc.)
y en la "segunda vuelta" se dejan solo las filas que cumplieron con el criterio de los filtros avanzados
(ya no se filtra-copiando, si no que -ahora- se filtra en el lugar de la lista original)
OJO: se asume que la fila 8 toma el lugar del titulo para los filtros (la celda [L9] contendra el criterio-dia)

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

Private Sub Calendar1_Click()
Application.ScreenUpdating = False
Dim DiaFiltro As String, NuevaHoja As String, Existe As Boolean
DiaFiltro = Format(Calendar1, "dddd")
NuevaHoja = Format(Calendar1, "dd-mm-yyyy")
On Error Resume Next
Existe = Len(Worksheets(NuevaHoja).Name) > 0
If Existe Then MsgBox "La hoja: " & NuevaHoja & " YA existe !!!": Exit Sub
On Error GoTo 0
With Worksheets("hoja2")
With Worksheets.Add(After:=Worksheets(.Name))
.Name = NuevaHoja
End With
.Range("a1:c1,e1").EntireColumn.Copy Worksheets(NuevaHoja).Range("a1")
.Range("j8").Copy .Range("l8")
.Range("l9") = DiaFiltro
.Range("a1").CurrentRegion.Offset(7).AdvancedFilter _
Action:=xlFilterInPlace, _
CriteriaRange:=.Range("l8:l9"), _
Unique:=False
.Range("a1:c1,e1").EntireColumn.Copy Worksheets(NuevaHoja).Range("a1")
.ShowAllData
.Range("l8:l9").Clear
End With
x = Worksheets(NuevaHoja).UsedRange.Address
End Sub
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida