Formato personalizado de una celda

21/01/2006 - 11:56 por Mario | Informe spam
Hola, solicito ayuda para realizar lo siguiente:
En una celda tengo que almacenar un número de expediente con el siguiente
formato: 111/(año)/(nº de expediente).
Puedo hacer algo para al ponerme en la casilla ya salga el formato así y
sólo tenga que introducir año y nº de expediente? En visual basic me saldría
la casilla más o menos así en un MaskedEditBox: 111/____/_____
Muchas gracias.

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
21/01/2006 - 17:42 | Informe spam
hola, Mario !

En una celda tengo que almacenar un numero de expediente con el siguiente formato: 111/(a#o)/(no de expediente).
Puedo hacer algo para al ponerme en la casilla ya salga el formato asi y solo tenga que introducir a#o y no de expediente?
En visual basic me saldria la casilla mas o menos asi en un MaskedEditBox: 111/____/_____



1) considerando que excel es un programa [general/preferente]mente utilizado para realizar 'calculos'...
2) suponiendo que la 'entrada' sera SIEMPRE de 4 digitos para el a#o {+} 5 digitos para el expediente...
3) y... 'dependiendo' de lo que pudieras necesitar hacer DESPUES con las 'entradas' en las celdas...

-> aplica el siguiente formato 'personalizado' a la/s celda/s donde se vaya a dar entrada a dichos 'datos'...
111\/####\/##### o... 111"/"####"/"#####

nota: el '111' inicial sera SOLO una 'mascara' [presentacion en pantalla/impresora] -> NO 'cuenta' para los calculos ;)
para las 'operaciones posteriores'... el numero que cuenta seran los 9 digitos 'reales' ingresados [p.e. 200612345]
aunque en pantalla 'veras' -> 111/2006/12345 ;)

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#2 Mario
22/01/2006 - 00:44 | Informe spam
Muchas gracias!!!
Eso está muy bien, sólo sería aún mejor si al situarme en la el la casilla
se viera ya la máscara 111/____/_____ o algo así en lugar de la casilla en
blanco.
Eso es posible o pido ya demasiado?


"Héctor Miguel" escribió:

hola, Mario !

> En una celda tengo que almacenar un numero de expediente con el siguiente formato: 111/(a#o)/(no de expediente).
> Puedo hacer algo para al ponerme en la casilla ya salga el formato asi y solo tenga que introducir a#o y no de expediente?
> En visual basic me saldria la casilla mas o menos asi en un MaskedEditBox: 111/____/_____

1) considerando que excel es un programa [general/preferente]mente utilizado para realizar 'calculos'...
2) suponiendo que la 'entrada' sera SIEMPRE de 4 digitos para el a#o {+} 5 digitos para el expediente...
3) y... 'dependiendo' de lo que pudieras necesitar hacer DESPUES con las 'entradas' en las celdas...

-> aplica el siguiente formato 'personalizado' a la/s celda/s donde se vaya a dar entrada a dichos 'datos'...
111\/####\/##### o... 111"/"####"/"#####

nota: el '111' inicial sera SOLO una 'mascara' [presentacion en pantalla/impresora] -> NO 'cuenta' para los calculos ;)
para las 'operaciones posteriores'... el numero que cuenta seran los 9 digitos 'reales' ingresados [p.e. 200612345]
aunque en pantalla 'veras' -> 111/2006/12345 ;)

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.



Respuesta Responder a este mensaje
#3 Héctor Miguel
22/01/2006 - 04:35 | Informe spam
hola, Mario !

Eso esta muy bien, solo seria aun mejor si al situarme en la el la casilla se viera ya la mascara 111/____/_____
o algo asi en lugar de la casilla en blanco. Eso es posible o pido ya demasiado?



solo [me permito] 'recordarte/comentarte' dos o tres detalles, porque hay algunos 'gustos' que podrian 'costar' bastante :)) [p.e.]
'... que excel es un programa [general/preferente]mente utilizado para realizar calculos...'
NO es 'su fuerte', andar 'enmascarando/formateando' celdas previas a la entrada de los datos 'reales'
de todos modos, el usuario TENDRA que 'dar entrada' SIEMPRE a 4 digitos para el a#o {+} 5 digitos para el expediente...

-> ademas de que se requiere un 'cierto criterio' y sentido comun por parte del 'operador' de tu archivo :))

al final del presente te expongo dos 'alternativas/posibilidades/...' para 'administrar' la vista/entrada de los datos :))
si cualquier duda, falla... [o informacion adicional]... comentas ?
saludos,
hector.

suponiendo que el rango donde necesitas dar entrada a los ID's de los expedientes es 'A2:A5'
1) si SOLAMENTE deseas 'ver la mascara' -> 111/____/_____ 'previa' a la entrada de datos y en lugar de la celda 'vacia'...
copia/pega las siguientes lineas... -> en el modulo de codigo de 'esa' hoja...
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("a2:a5")) Is Nothing Then
If Target.Count > 1 Then ActiveCell.Select
If IsEmpty(Target) Then Target = "111/____/_____"
End If
End Sub

2) si deseas 'algo' mas... 'sofisticado' [a la vez que 'complicado']... prueba con las siguientes lineas [en lugar de las anteriores]...
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("a2:a5")) Is Nothing Then
Application.EnableEvents = False
If Target.Count > 1 Then ActiveCell.Select
If ActiveCell.Column > 1 Then GoTo Salida
If Not IsEmpty(ActiveCell) Then SendKeys "{f2}+{home}" _
Else ActiveCell = "111/____/_____": _
SendKeys "{f2}{home}{right 4}+{right 10}"
Salida:
Application.EnableEvents = True
If ActiveCell.Column = 1 Then Exit Sub
If Not IsEmpty(Cells(ActiveCell.Row, 1)) Then _
If Cells(ActiveCell.Row, 1).NumberFormat = "@" Then _
Worksheet_Change Cells(ActiveCell.Row, 1)
End If
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("a2:a5")) Is Nothing Then Exit Sub
If Target = "111/____/_____" Then Target.Clear
Target.NumberFormat = "111\/####\/#####"
If IsEmpty(Target) Then Exit Sub
Application.EnableEvents = False
If Target.Column = 1 Then
If Left(Target, 4) = "111/" _
Then Target = CLng(Mid(Target, 5, 4) & Right(Target, 5))
Target.Offset(, 1).Select
End If
Application.EnableEvents = True
End Sub
Respuesta Responder a este mensaje
#4 Mario
23/01/2006 - 09:12 | Informe spam
Bueno, muy complicado el tema. La primera opción que me diste va a ser la que
use.
Muchas gracias Héctor.


"Héctor Miguel" escribió:

hola, Mario !

> Eso esta muy bien, solo seria aun mejor si al situarme en la el la casilla se viera ya la mascara 111/____/_____
> o algo asi en lugar de la casilla en blanco. Eso es posible o pido ya demasiado?

solo [me permito] 'recordarte/comentarte' dos o tres detalles, porque hay algunos 'gustos' que podrian 'costar' bastante :)) [p.e.]
'... que excel es un programa [general/preferente]mente utilizado para realizar calculos...'
NO es 'su fuerte', andar 'enmascarando/formateando' celdas previas a la entrada de los datos 'reales'
de todos modos, el usuario TENDRA que 'dar entrada' SIEMPRE a 4 digitos para el a#o {+} 5 digitos para el expediente...

-> ademas de que se requiere un 'cierto criterio' y sentido comun por parte del 'operador' de tu archivo :))

al final del presente te expongo dos 'alternativas/posibilidades/...' para 'administrar' la vista/entrada de los datos :))
si cualquier duda, falla... [o informacion adicional]... comentas ?
saludos,
hector.

suponiendo que el rango donde necesitas dar entrada a los ID's de los expedientes es 'A2:A5'
1) si SOLAMENTE deseas 'ver la mascara' -> 111/____/_____ 'previa' a la entrada de datos y en lugar de la celda 'vacia'...
copia/pega las siguientes lineas... -> en el modulo de codigo de 'esa' hoja...
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("a2:a5")) Is Nothing Then
If Target.Count > 1 Then ActiveCell.Select
If IsEmpty(Target) Then Target = "111/____/_____"
End If
End Sub

2) si deseas 'algo' mas... 'sofisticado' [a la vez que 'complicado']... prueba con las siguientes lineas [en lugar de las anteriores]...
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("a2:a5")) Is Nothing Then
Application.EnableEvents = False
If Target.Count > 1 Then ActiveCell.Select
If ActiveCell.Column > 1 Then GoTo Salida
If Not IsEmpty(ActiveCell) Then SendKeys "{f2}+{home}" _
Else ActiveCell = "111/____/_____": _
SendKeys "{f2}{home}{right 4}+{right 10}"
Salida:
Application.EnableEvents = True
If ActiveCell.Column = 1 Then Exit Sub
If Not IsEmpty(Cells(ActiveCell.Row, 1)) Then _
If Cells(ActiveCell.Row, 1).NumberFormat = "@" Then _
Worksheet_Change Cells(ActiveCell.Row, 1)
End If
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("a2:a5")) Is Nothing Then Exit Sub
If Target = "111/____/_____" Then Target.Clear
Target.NumberFormat = "111\/####\/#####"
If IsEmpty(Target) Then Exit Sub
Application.EnableEvents = False
If Target.Column = 1 Then
If Left(Target, 4) = "111/" _
Then Target = CLng(Mid(Target, 5, 4) & Right(Target, 5))
Target.Offset(, 1).Select
End If
Application.EnableEvents = True
End Sub



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida