EDITAR MACRO PARA VALIDAR varios Valores en Misma Celda

10/05/2005 - 18:22 por HMS | Informe spam
Hola a Tod@s.
La macro que les adjunto trabaja excelente.
El objetivo de la macro es que en una misma CELDA, aparezca el cuadro de
validación y yo pueda escoger varios valores de la lista, pero que queden en
la misma celda.

Sin embrago me he encontrado que tiene un pequeño problema, si trato de
BORRAR algo en la lista que ya he validado, en vez de borrar, lo que hace es
AGREGAR, otro valor o valores.

Quisiera saber si alguno de ustedes me puede ayudar con este asunto !!!
De antemano gracias.
HMS

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngDV As Range
Dim oldVal As String
Dim newVal As String
If Target.Count > 1 Then GoTo exitHandler

On Error Resume Next
Set rngDV = Cells.SpecialCells(xlCellTypeAllValidation)
On Error GoTo exitHandler

If rngDV Is Nothing Then GoTo exitHandler

If Intersect(Target, rngDV) Is Nothing Then
'do nothing
Else
Application.EnableEvents = False
newVal = Target.Value
Application.Undo
oldVal = Target.Value
Target.Value = newVal
If Target.Column = 5 Then
If oldVal = "" Then
'do nothing
Else
If newVal = "" Then
'do nothing
Else
Target.Value = oldVal _
& "; " & newVal
End If
End If
End If
End If

Preguntas similare

Leer las respuestas

#1 KL
11/05/2005 - 13:34 | Informe spam
Hola HMS,

Creo que el codigo funciona de acuerdo con la idea. Si quieres que al borrar
algun elemento de la cadena que ya esta en la celda te lo acepte tal cual
sin modificar tendras que pensar primero en como sabria Excel si el nuevo
valor resultante de la modificacion ya es lo que quieres tener en la celda o
es un nuevo valor que se tiene que añadir entero a la cadena existente.

Creo que algunas de las posibles opciones podrian ser: la de evaluar si el
valor nuevo ya contiene algun separador (";") o la de comparar el nuevo
valor con todos los elementos de la lista de posibles valores unitarios.
Solo quedaria un inconveniente: si al borrar algo te queda solo un elemento
sin separador, se duplicara y si se queda con separador quedara con este.
Asi que, a no ser que alguien tenga una idea mejor, si quires dejar solo un
elemento tendrias que borrar todos y volver a introducirlo mediante el
desplegable.

Prueba modificar el codigo sustituyendo:

Else
If newVal = "" Then
'do nothing
Else

con lo siguiente:

Else
If newVal = "" Or InStr(newVal, ";") Then
'do nothing
Else

Saludos,
KL


"HMS" wrote in message
news:%
Hola a
La macro que les adjunto trabaja excelente.
El objetivo de la macro es que en una misma CELDA, aparezca el cuadro de
validación y yo pueda escoger varios valores de la lista, pero que queden
en la misma celda.

Sin embrago me he encontrado que tiene un pequeño problema, si trato de
BORRAR algo en la lista que ya he validado, en vez de borrar, lo que hace
es AGREGAR, otro valor o valores.

Quisiera saber si alguno de ustedes me puede ayudar con este asunto !!!
De antemano gracias.
HMS

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngDV As Range
Dim oldVal As String
Dim newVal As String
If Target.Count > 1 Then GoTo exitHandler

On Error Resume Next
Set rngDV = Cells.SpecialCells(xlCellTypeAllValidation)
On Error GoTo exitHandler

If rngDV Is Nothing Then GoTo exitHandler

If Intersect(Target, rngDV) Is Nothing Then
'do nothing
Else
Application.EnableEvents = False
newVal = Target.Value
Application.Undo
oldVal = Target.Value
Target.Value = newVal
If Target.Column = 5 Then
If oldVal = "" Then
'do nothing
Else
If newVal = "" Then
'do nothing
Else
Target.Value = oldVal _
& "; " & newVal
End If
End If
End If
End If

Respuesta Responder a este mensaje
#2 HMS
12/05/2005 - 18:58 | Informe spam
KL. Excelente
Muchas Gracias
HMS

Ing. Héctor Montero Sobrado
HMS ENGINE VISUAL KNOWLEDGE CA PCR
Mail :
Ofic 506-2317858 Cel 506-376-9751
Skype User Name: hmonteros
San José, Costa Rica.

"KL" wrote in message
news:%
Hola HMS,

Creo que el codigo funciona de acuerdo con la idea. Si quieres que al
borrar algun elemento de la cadena que ya esta en la celda te lo acepte
tal cual sin modificar tendras que pensar primero en como sabria Excel si
el nuevo valor resultante de la modificacion ya es lo que quieres tener en
la celda o es un nuevo valor que se tiene que añadir entero a la cadena
existente.

Creo que algunas de las posibles opciones podrian ser: la de evaluar si el
valor nuevo ya contiene algun separador (";") o la de comparar el nuevo
valor con todos los elementos de la lista de posibles valores unitarios.
Solo quedaria un inconveniente: si al borrar algo te queda solo un
elemento sin separador, se duplicara y si se queda con separador quedara
con este. Asi que, a no ser que alguien tenga una idea mejor, si quires
dejar solo un elemento tendrias que borrar todos y volver a introducirlo
mediante el desplegable.

Prueba modificar el codigo sustituyendo:

Else
If newVal = "" Then
'do nothing
Else

con lo siguiente:

Else
If newVal = "" Or InStr(newVal, ";") Then
'do nothing
Else

Saludos,
KL


"HMS" wrote in message
news:%
Hola a
La macro que les adjunto trabaja excelente.
El objetivo de la macro es que en una misma CELDA, aparezca el cuadro de
validación y yo pueda escoger varios valores de la lista, pero que queden
en la misma celda.

Sin embrago me he encontrado que tiene un pequeño problema, si trato de
BORRAR algo en la lista que ya he validado, en vez de borrar, lo que hace
es AGREGAR, otro valor o valores.

Quisiera saber si alguno de ustedes me puede ayudar con este asunto !!!
De antemano gracias.
HMS

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngDV As Range
Dim oldVal As String
Dim newVal As String
If Target.Count > 1 Then GoTo exitHandler

On Error Resume Next
Set rngDV = Cells.SpecialCells(xlCellTypeAllValidation)
On Error GoTo exitHandler

If rngDV Is Nothing Then GoTo exitHandler

If Intersect(Target, rngDV) Is Nothing Then
'do nothing
Else
Application.EnableEvents = False
newVal = Target.Value
Application.Undo
oldVal = Target.Value
Target.Value = newVal
If Target.Column = 5 Then
If oldVal = "" Then
'do nothing
Else
If newVal = "" Then
'do nothing
Else
Target.Value = oldVal _
& "; " & newVal
End If
End If
End If
End If





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