Script para autocompletar celdas con datos de una columna

No soy programador ni nada parecido, pero estuve buscando la manera de auto rellenar las celdas de alguna columna de mi Hoja1 con los datos de alguna columna de mi Hoja2 y aquí en todoexpertos conseguí alguien que posteó este código:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Fila, Columna, Longi As Integer
Dim Valor As String
Dim Celda As Variant
Fila = Target.Row
Columna = Target.Column
Valor = UCase(Cells(Fila, Columna))
If (Valor <> "") And (Columna = 2) Then
Longi = Len(Valor)
For Each Celda In Sheets(2).Range("A2", Sheets(2).Range("A2").End(xlDown))
If Valor = Left(UCase(Celda.Value), Longi) Then
Cells(Fila, Columna) = Celda.Value
Exit For
End If
Next Celda
End If
End Sub

Funciona casi perfecto, pero cuando escribo y presiono ENTER o TAB me lanza un "Error en el método 'Range' de objeto '_Worksheet'", y si presiono finalizar puedo continuar llenando los datos. El problema es que cada vez que guardo y abro de nuevo la hoja me lanza el mismo error. Estoy trabajando con Office 2007. ¿Qué podrá ser?

La explicación de lo que hace la macro está en este enlace:

<a>http://www.todoexpertos.com/categorias/tecnologia-e-internet/software-y-aplicaciones/microsoft-excel/respuestas/33f6aok4y41ao/macro-que-autocomplete-datos-de-otra-hoja-del-mismo-libro-en-excel</a>

En mi hoja 2 tengo una lista de diferentes localidades de Venezuela:

ACARIGUA
Anaco
Barinas
Barquisimeto
Santa rosa
Cabimas
Cagua
Calabozo
Caracas
Carora
Carupano
Ciudad bolivar
Ciudad ojeda
CORO

...

1 respuesta

Respuesta
1

Mándame el libro para poder ver el problema exacto que tienes, con la descripción que has hecho puede no ser suficiente.

Mándalo a [email protected]

Pon como asunto el título de la pregunta.

Es un problema que te deja algo perplejo porque se produce la primera vez que introduces una palabra pero no en las siguientes. He recordado cosas raras que pasaban cuando se usaban subrutinas que se disparaban con eventos. Y en efecto veo que esta subrutina se llama a sí misma cuando escribe el valor que ha encontrado y pueden pasar cosas raras, aunque no he logrado entender porque pasan.

Entonces, evitaremos que la subrutina se llame a si misma, porque el momento en que ella escribe el valor en la celda no debe considerarse como cuando es el usuario el que lo ha escrito.

Para eso ponemos estas ordenes una antes y otra después de la escritura

If Valor = Left(UCase(Celda.Value), Longi) Then
Application.EnableEvents = False
Cells(Fila, Columna) = Celda.Value
Application.EnableEvents = True
Exit For
End If

Yo creo que con eso sirve, pruébalo y me lo dices.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas