Microsoft Excel me da un error al seleccionar una columna para borrar su contenido

Me funciona correctamente, pero me daun error cuando selecciono la columna B7:B28 para borrar todo su contenido que me sale un error 13 en periodo de ejecución, no coinciden los tipos, ¿qué puedo añadirle para que me deje borrar el contenido y el color de todas las celdas de la columna b a la vez?
En la misma Hoja tengo una base de datos ( Buscar V) donde en unas determinadas celdas aparecen las provincias según la comunidad autónoma que has seleccionado en "B4"
En la columna "B" tengo validación a dichas celdas por lo que me aparece un desplegable con las provincias según la comunidad autónoma seleccionada en "B4", hasta aquí todo bien.
Necesito adjudicarle a cada provincia un color de fondo en las celdas de la columna "B", pero con la particularidad de poder cambiarlo cuantas veces necesite y que si en un desplegable de una celda de la columna "B" selecciono una provincia me aporte también el color,
no se si tengo que poner celdas con el nombre de la provincia y el color en una misma celda o en celdas distintas,
tengo: Private Sub Worksheet_Change(ByVal Target As Excel.Range)
'Asigna color segun provincia insertada en Hoja Datos
Set Relcell = Range("B7:B28")
If Not Application.Intersect(Relcell, Range(Target.Address(False, False))) Is Nothing Then
Application.EnableEvents = False
Select Case UCase(Trim(Target.Value))
Case "ÁLAVA"
Target.Interior.ColorIndex = RGB(80, 237, 194)
La idea es que el color en vez de decirle el color que es, decirle que lo copie de una celda determinada, por ejemplo en H2 tengo Alicante con fondo amarillo, o en H2 tengo Alicante y en I2 tengo la celda sin valor y con fondo amarillo
Un saludo y gracias de antemano
09/07/2009
Experto
Hola, mira esta macro y comprueba si te soluciona tu problema:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$7" Then
If Target.Value = "ALAVA" Then
Target.Interior.ColorIndex = Range("F7").Interior.ColorIndex
End If
End If
End Sub
Tan solo le dices de donde tiene que tomar el color. Si necesitas alguna aclaración me lo dices.
>Un saludo
>Julio
PD: Puntúa y finaliza la consulta, si quieres dejar un comentario es bienvenido. Gracias.
09/07/2009
Usuario
Soy muy novato en sba y he puesto la macro y no me funciona he itentado ponerla tal cual y no funciona y sustituyendo en mi macro por esta en la parte de la provincia alaba tampoco me funciona, me tiene que valerpara que coloree la celda independientemente de la altura de la fila B en que la ponga
10/07/2009
Experto
Hola, vamos a ver si lo hacemos correctamente, para colocar la macro debes de hacerlo así:
1º Estando en tu hoja de Excel (supongamos que es la Hoja1) pulsas Alt+F11 y se abrirá el editor de VBA en la columna de la izquierda verás los objetos que contiene el Libro que por defecto son Hoja1, Hoja2, Hoja3 y ThisWorkbook. Como estamos en la Hoja1 hacemos doble click sobre ese icono (Hoja1) y se te abrirá una pantalla en blanco en esa pantalla copias y pegas esta macro:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Colunm=2 Then
If Target.Value = "ALAVA" Then
Target.Interior.ColorIndex = Range("F7").Interior.ColorIndex
End If
End If
End Sub
Esta macro comprueba que estés en la Col B(2) que en la celda esté escrito ALABA y si es así copia el color de la celda F7 y lo pega en la celda donde escribiste ALABA, si quieres poner un color diferente dependiendo de los valores que escribas o selecciones de una lista para cada provincia tendrás que seguir poniendo instrucciones y tener una tabla de colores en celdas diferentes:
If Target.Value="ASTURIAS"
Target.Interior.ColorIndex = Range("C7").Interior.ColorIndex
En fin que tendrás que ir llenando la macro con todos los datos, tantas provincias diferentes tantas lineas, si quieres colorear por ejemplo un grupo con el mismo color quedaría así:
If Target.Value="ALAVA" Or Target.Value="VIZCAYA" Or Target.Value="GUIPUZCOA" Then
Target.Interior.ColorIndex = Range("C7").Interior.ColorIndex
Vas añadiendo Or y coloreas el conjunto de provincias a tu conveniencia.
Esperemos que me hayas entendido.
>Un saludo
>Julio

1 Respuesta

Respuesta
1
Es que amigo en ningún momento has dicho que el rango lo tengas que tomar desde otra hoja, esta instrucción como te explique es para ejecutarla en la misma hoja, si tu ahora te tienes que desplazar a otra hoja para seleccionar el rango no se puede hacer directamente con:
Range("B7:B28").Select
Primero te tienes que situar en la hoja:
Sheets("Datos").Select
Y ahora seleccionar el rango de esta forma:
ActiveSheet.Range("B7:B28").Select
Y ahora tu instruccion:
Set Relcell=Selection
Y si despues sigues trabajando en la primera hoja tienes que ir a ella:
Sheets("Nombre de la Hoja").Select
A ver si ahora solucinas tu problema
>Un saludo
>Julio
PD: Ya conoces el tramite si te ha servido puntúa y finaliza.
Perdona pero no me he explicado bien. Yo estoy en la misma hoja siempre, yo pongo el nombre de la provincia y gracias a tu fantástica macro me pone el color adecuadamente, si yo en esa misma hoja selecciono una celda que ya tiene el nombre de una provincia y le doy a borrar la celda se queda en blanco, hasta aquí todo bien.
El inconveniente viene cuando en vez de seleccionar una celda con el nombre de la provincia, selecciono varias y doy a boorar contenido, es en ese caso cuando me sale el error 13 en periodo de ejecución, no coinciden los tipos
Un saludo y gracias
Es un error lógico la macro analiza si el valor de la celda es "..." para cambiar el color pero no se puede comprobar el valor de varias celdas al mismo tiempo, tendrás que borrarlas de una en una, si no tendremos que hacer una macro que repasará toda la columna B para ir comprobando celda a celda y en función del valor ir cambiando los colores.
Tu decides pero es cantidad de molesto esperar a recorrer todo el rango cada vez que cambiamos los valores.
No existe otra solución, es lo mismo que si seleccionas varias celdas al mismo tiempo y en todas quieres introducir valores, no se puede si no es con macro.
>Un saludo
>Julio
Una vez finalizado el libro quiero proteger la hoja y ponerle contraseña a las macros, ¿si el usuario final selecciona varias celdas para borrar nos dará algún error o se lo saltara?
Ponle como primera linea :
On Error Resume Next
Quedaría así:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Colunm = 2 Then
If Target.Value = "ALAVA" Then
Target.Interior.ColorIndex = Range("F7").Interior.ColorIndex
End If
If Target.Value = "" Then
Target.Interior.ColorIndex = xlNone
End If
End If
End Sub
De esta forma no da error ademas si el valor es vacío te vuelve el color de la celda a blanco.
>Un saludo
>Julio
PD: Espero que ya te lo haya solucionado y puedas puntuar y finalizar la consulta, un comentario siempre es bienvenido.
La macro se ejecuta perfectamente y ya no da el error, ademas de esto seria posible que se ejecutase la macro pero que el usuario no viese es decir que para el usuario final fuese trasparente
Si como segunda linea de código pones esta:
Application.ScreenUpdating = False
Y antes del End sub vuelves a mostrar la ejecucion:
Application.ScreenUpdating = True
Y ya lo tienes hecho.
>Un saludo
>Julio
PD: Si ya lo tienes puntúa, comenta y finaliza la consulta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas