Mascara ALFA-NUMERICA

01/08/2004 - 14:08 por LISANDRO | Informe spam
Estimados.-
Como puedo colocar una mascara donde el numero de digitos
son 15 pero son Alfa-Numericos en cualquiera de sus
posiciones Ej: SEGURI8-G5ANT-005 (Los 3 ultimos caracteres
siempre son Numeros)
Por otro lado como hacer para proteger que siempre al
tipear si se pasa de 15Dig de un mensaje de ALTO. o
simplemente no permita la modificacion.

==Me ha resultado pero solo cuando el codigo es numerico.
Ej: [1658968-53621-867] La mascara consta de los digitos
separados por [-] [7-5-3]
Un mil gracias.-

Preguntas similare

Leer las respuestas

#1 David Canales
01/08/2004 - 22:20 | Informe spam
Coloca el siguiente codigo en el modulo de la hoja (click-derecho en la pestaña
de la hoja, Ver Codigo). Tienes la opcion de usar los dos primeros ElseIf que le
dan un mensaje al usuario, mantiene la info erronea en la celda y le permite
corregirla para no tener que escribirla toda de nuevo (es posible que el usuario
opte por no corregirla). Si decides dejar el tercer ElseIf y no los dos
primeros, este no permite al usuario introducir un codigo diferente a 15
caracteres. Puedes dejar este ultimo sin el mensaje.

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Intersect(Target, Range("A2:A100")) Is Nothing Then Exit Sub
On Error GoTo Fin
Application.EnableEvents = False
Target = Replace(Target, "-", "")
With Target
If Len(.Value) = 15 Then
.Value = Left(.Value, 7) & "-" & Right(.Value, 5) & _
"-" & Right(.Value, 3)
ElseIf Len(.Value) < 15 Then
MsgBox "Codigo tiene menos de 15 caracteres"
ElseIf Len(.Value) > 15 Then
MsgBox "Codigo tiene mas de 15 caracteres"
'ElseIf Len(.Value) <> 15 Then
'MsgBox "Codigo debe ser de 15 caracteres"
' .Value = ""
End If
End With
Fin:
Application.EnableEvents = True
End Sub


Saludos,

David Canales


"LISANDRO" wrote in message
news:826601c477c0$320d38d0$
Estimados.-
Como puedo colocar una mascara donde el numero de digitos
son 15 pero son Alfa-Numericos en cualquiera de sus
posiciones Ej: SEGURI8-G5ANT-005 (Los 3 ultimos caracteres
siempre son Numeros)
Por otro lado como hacer para proteger que siempre al
tipear si se pasa de 15Dig de un mensaje de ALTO. o
simplemente no permita la modificacion.

==Me ha resultado pero solo cuando el codigo es numerico.
Ej: [1658968-53621-867] La mascara consta de los digitos
separados por [-] [7-5-3]
Un mil gracias.-
Respuesta Responder a este mensaje
#2 David Canales
01/08/2004 - 23:20 | Informe spam
Una correccion en el codigo anterior. Reemplaza
.Value = Left(.Value, 7) & "-" & Right(.Value, 5) & _
"-" & Right(.Value, 3)

por

.Value = Left(.Value, 7) & "-" & Mid(.Value, 8, 5) & _
"-" & Right(.Value, 3)

Saludos,

David Canales


"David Canales" wrote in message
news:uKX49Q$
Coloca el siguiente codigo en el modulo de la hoja (click-derecho en la


pestaña
de la hoja, Ver Codigo). Tienes la opcion de usar los dos primeros ElseIf que


le
dan un mensaje al usuario, mantiene la info erronea en la celda y le permite
corregirla para no tener que escribirla toda de nuevo (es posible que el


usuario
opte por no corregirla). Si decides dejar el tercer ElseIf y no los dos
primeros, este no permite al usuario introducir un codigo diferente a 15
caracteres. Puedes dejar este ultimo sin el mensaje.

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Intersect(Target, Range("A2:A100")) Is Nothing Then Exit Sub
On Error GoTo Fin
Application.EnableEvents = False
Target = Replace(Target, "-", "")
With Target
If Len(.Value) = 15 Then
.Value = Left(.Value, 7) & "-" & Right(.Value, 5) & _
"-" & Right(.Value, 3)
ElseIf Len(.Value) < 15 Then
MsgBox "Codigo tiene menos de 15 caracteres"
ElseIf Len(.Value) > 15 Then
MsgBox "Codigo tiene mas de 15 caracteres"
'ElseIf Len(.Value) <> 15 Then
'MsgBox "Codigo debe ser de 15 caracteres"
' .Value = ""
End If
End With
Fin:
Application.EnableEvents = True
End Sub


Saludos,

David Canales


"LISANDRO" wrote in message
news:826601c477c0$320d38d0$
> Estimados.-
> Como puedo colocar una mascara donde el numero de digitos
> son 15 pero son Alfa-Numericos en cualquiera de sus
> posiciones Ej: SEGURI8-G5ANT-005 (Los 3 ultimos caracteres
> siempre son Numeros)
> Por otro lado como hacer para proteger que siempre al
> tipear si se pasa de 15Dig de un mensaje de ALTO. o
> simplemente no permita la modificacion.
>
> ==Me ha resultado pero solo cuando el codigo es numerico.
> Ej: [1658968-53621-867] La mascara consta de los digitos
> separados por [-] [7-5-3]
> Un mil gracias.-


Respuesta Responder a este mensaje
#3 Héctor Miguel
02/08/2004 - 05:12 | Informe spam
¿que tal, chicos?

LISANDRO escribio en el mensaje
... colocar una mascara ... digitos son 15 ... Alfa-Numericos ... Ej: SEGURI8-G5ANT-005
... 3 ultimos ... siempre son Numeros
... otro lado ... proteger que siempre al tipear si se pasa de 15 Dig de un mensaje de ALTO o [...]

David Canales escribio en el mensaje
... el siguiente codigo en el modulo de la hoja [...]





si [como supongo] se trata de...
- 'facilitar' la captura [¿de codigos de control?] y...
- 'evitar' los [mas posibles] errores 'involuntarios' [por parte del 'operador']...
los siguientes pasos 'optimizan' [o tratan de optimizar] el uso de codigo 'combinado' con procesos 'normales' y...
[si son de utilidad] 'ofrecen [algunas] ventajas' en el sentido de 'prevencion de errores' ;)
[suponiendo el mismo rango que David... 'A2:A100']

si cualquier duda... [la podemos 'ampliar'] :D
saludos,
hector.

1° asegurar que el operador introduce SOLO 15 caracteres y los ultimos 3 son numeros...
-> selecciona 'el rango' y... [menu] datos / validacion...
-> elije 'personalizada' y usa la siguiente formula: =y(largo(a2),esnumero(valor(derecha(a2,3))))
-> asegurate de usar un estilo de 'limite' [opcionalmente puedes 'informar' al operador con los 'mensajes']
2° ahora... el codigo ya NO 'tiene que validar' el dato... solo... 'convertirlo'.
en el modulo de codigo de 'la hoja' ==Private Const Listado As String = "a2:a100"
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range(Listado)) Is Nothing Then Exit Sub
If IsEmpty(Target) Or Len(Target) <> 15 Then Exit Sub
Application.EnableEvents = False
Target = UCase(Left(Target, 7) & "-" & Mid(Target, 8, 5) & "-" & Right(Target, 3))
Application.EnableEvents = True
End Sub
¨¨¨¨¨¨¨¨¨¨¨¨
=> los siguientes pasos son 'opcionales' [para 'pevenir' los 'horrores']
puesto que una [celda con] validacion puede ser 'borrada/cambiada' cuando 'se pega' desde otro lado...
2° 'evitamos' que el usuario pueda usar el 'copiar/cortar/pegar' mientras 'navega por el rango'
[solo por los 'atajos' de teclado... por las barras de herramientas... es 'otra cosa'] ;)
en el modulo de codigo de 'la hoja' ==Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
With Application
If Not Intersect(Target, Range(Listado)) Is Nothing Then
.CutCopyMode = False: .OnKey "^c", "": .OnKey "^x", ""
Else: .OnKey "^c": .OnKey "^x"
End If
End With
End Sub
3° y como estamos 'reasignando' metodos abreviados 'de excel'... los restablecemos 'donde se ocupa'...
en el modulo de codigo de 'la hoja' ==Private Sub Worksheet_Deactivate()
Application.OnKey "^c": Application.OnKey "^x"
End Sub
en el modulo de codigo 'del libro' ==Private Sub Workbook_Deactivate()
Application.OnKey "^c": Application.OnKey "^x"
End Sub
Respuesta Responder a este mensaje
#4 Héctor Miguel
02/08/2004 - 09:01 | Informe spam
hola, David !

Tambien se podria poner la validacion en el evento SelectionChange y siempre convertir con el evento Change [...]



es muy cierto, David ;)
[yo solo trataba de 'adelgazar' las lineas -y los modulos- de codigo] :D

solo una 'observacion'... no siempre es 'bueno' [como insistes en]...
- 'brincar' los eventos cuando se selecciona mas de una celda ;)
=> si el 'operador' selecciona un rango [mas de una celda]...
las reglas de validacion que 'maneja' el codigo [probablemente]...
=> tambien se veran 'omitidas' y... [obviamente]...
=> dejarian de 'cumplir su cometido' :((

¿comentas?
saludos,
hector.
Respuesta Responder a este mensaje
#5 David Canales
02/08/2004 - 10:30 | Informe spam
Tambien se podria poner la validacion en el evento SelectionChange y siempre
convertir con el evento Change:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("A:A")) Is Nothing Then
With Selection.Validation: .Delete
.Add Type:=xlValidateCustom, AlertStyle:=xlValidAlertStop, _
Operator:=xlBetween, Formula1:="=AND(LEN(" & Target.Address & _
"),ISNUMBER(VALUE(RIGHT(" & Target.Address & ",3))))"
.InputMessage = "Digite Código"
.ErrorMessage = "Código debe ser de 15 caracteres y" & vbCrLf & _
"los tres ultimos deben ser numeros."
.ShowInput = True: .ShowError = True
End With
With Application
.CutCopyMode = False: .OnKey "^c", "": .OnKey "^x", ""
End With
Else
With Application: .OnKey "^c": .OnKey "^x": End With
End If
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("A:A")) Is Nothing Then
If IsEmpty(Target) Or Len(Target) <> 15 Then Exit Sub
Target = UCase(Left(Target, 7) & "-" & _
Mid(Target, 8, 5) & "-" & Right(Target, 3))
End If
End Sub

Si se utiliza lo anterior tambien habria que utilizar los eventos Deactivate.

Saludos,

David Canales


"Héctor Miguel" wrote in message
news:%
¿que tal, chicos?

> LISANDRO escribio en el mensaje
> ... colocar una mascara ... digitos son 15 ... Alfa-Numericos ... Ej:


SEGURI8-G5ANT-005
> ... 3 ultimos ... siempre son Numeros
> ... otro lado ... proteger que siempre al tipear si se pasa de 15 Dig de un


mensaje de ALTO o [...]

>> David Canales escribio en el mensaje
>> ... el siguiente codigo en el modulo de la hoja [...]

si [como supongo] se trata de...
- 'facilitar' la captura [¿de codigos de control?] y...
- 'evitar' los [mas posibles] errores 'involuntarios' [por parte del


'operador']...
los siguientes pasos 'optimizan' [o tratan de optimizar] el uso de codigo


'combinado' con procesos 'normales' y...
[si son de utilidad] 'ofrecen [algunas] ventajas' en el sentido de 'prevencion


de errores' ;)
[suponiendo el mismo rango que David... 'A2:A100']

si cualquier duda... [la podemos 'ampliar'] :D
saludos,
hector.

1° asegurar que el operador introduce SOLO 15 caracteres y los ultimos 3 son


numeros...
-> selecciona 'el rango' y... [menu] datos / validacion...
-> elije 'personalizada' y usa la siguiente formula:


=y(largo(a2),esnumero(valor(derecha(a2,3))))
-> asegurate de usar un estilo de 'limite' [opcionalmente puedes


'informar' al operador con los 'mensajes']
2° ahora... el codigo ya NO 'tiene que validar' el dato... solo...


'convertirlo'.
en el modulo de codigo de 'la hoja' ==> Private Const Listado As String = "a2:a100"
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range(Listado)) Is Nothing Then Exit Sub
If IsEmpty(Target) Or Len(Target) <> 15 Then Exit Sub
Application.EnableEvents = False
Target = UCase(Left(Target, 7) & "-" & Mid(Target, 8, 5) & "-" &


Right(Target, 3))
Application.EnableEvents = True
End Sub
¨¨¨¨¨¨¨¨¨¨¨¨
=> los siguientes pasos son 'opcionales' [para 'pevenir' los 'horrores']
puesto que una [celda con] validacion puede ser 'borrada/cambiada' cuando 'se


pega' desde otro lado...
2° 'evitamos' que el usuario pueda usar el 'copiar/cortar/pegar' mientras


'navega por el rango'
[solo por los 'atajos' de teclado... por las barras de herramientas... es


'otra cosa'] ;)
en el modulo de codigo de 'la hoja' ==> Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
With Application
If Not Intersect(Target, Range(Listado)) Is Nothing Then
.CutCopyMode = False: .OnKey "^c", "": .OnKey "^x", ""
Else: .OnKey "^c": .OnKey "^x"
End If
End With
End Sub
3° y como estamos 'reasignando' metodos abreviados 'de excel'... los


restablecemos 'donde se ocupa'...
en el modulo de codigo de 'la hoja' ==> Private Sub Worksheet_Deactivate()
Application.OnKey "^c": Application.OnKey "^x"
End Sub
en el modulo de codigo 'del libro' ==> Private Sub Workbook_Deactivate()
Application.OnKey "^c": Application.OnKey "^x"
End Sub

Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida