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
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
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" <NOhemio...@PLShotmail.com> escribió en el mensaje
news:ueZA0GeO...@TK2MSFTNGP02.phx.gbl...
> 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
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" <NOhemio...@PLShotmail.com> escribió en el mensaje
news:uwjjixsO...@TK2MSFTNGP06.phx.gbl...
> 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