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
 

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

Preguntas similares