Macro reemplazar no se ejecuta en excel

Tengo la siguiente macro

Sub buscar_reemplazar_colorear()
Set DATOS = Range("b2:co40").CurrentRegion
Set lista = Range("di2").CurrentRegion
MATRIZ = DATOS
With lista
For i = 1 To .Rows.Count
numeros = .Cells(i, 1)
cuenta = WorksheetFunction.CountIf(DATOS, numeros)
If cuenta > 0 Then
For j = 1 To cuenta
If j = 1 Then Set busca = DATOS.Find(numeros, LookAt:=xlWhole)
If j > 1 Then Set busca = DATOS.FindNext(busca)
celda = busca.Address
With Range(celda)
.Value = lista.Cells(1, 1)
.Interior.ColorIndex = 44
.Select
End With
Next j
Else
GoTo SIGUIENTE
End If
ASK = MsgBox("DEJAR TODO COMO ESTABA?", vbYesNo, "AVISO")
If ASK = 7 Then GoTo SALIDA
Range(DATOS.Address) = MATRIZ
SIGUIENTE:
Next i
End With
SALIDA:
End Sub

pero al ejecutarla en mi libro aparece lo siguiente

Que le puedo cambiar al código para que realmente funcione

1

1 respuesta

Respuesta
1

Pon esa misma pantalla con ese mismo error solo quita el panel de explorador de proyectos y en su lugar pon el panel de locales

Menu VBA, ver, ventanas locales, hay se ve el estado de todas las variables y con eso se puede determinar que variable es la que esta provocando el error.

me dice que no hay variables

Las variables en la ventana locales las pone conforme va corriendo la macro y se quedan fijas cuando sale algún error. Te debe poner algo así en ese panel

+datos

+lista

numeros=x

cuenta=y

Solo abre el panel ventanas locales y corre la macro hasta que cometa el error y pones esa pantalla.

Corrí el código y funciona bien, no me marca ningún error

Lo he corrido en otra hoja y funciona bien pero en esta hoja no lo hace sera que de pronto el formulario que es no modal estará interfiriendo en su proceso

al parecer es por el formulario no modal que hace que esta linea no se ejecute

If j = 1 Then Set busca = DATOS.Find(numeros, LookAt:=xlWhole)

Entonces cambia la condición modal del formulario el error que aparece es porque hay un objeto ausente (hoja, set, o que los rangos (b2:co40) y o el di2 estén vacíos o en otro lugar, por eso quería ver la ventana locales

Algún correo para enviar la hoja

Esto fue lo que me escribió el experto antoni cuando me la envío tal vez puedas mejorarla ya que sigue señalando la línea y culpa la función find

If j = 1 Then Set busca = DATOS.Find(numeros, lookat:=xlWhole)

Al abrir el adjunto, aparecerá tu formulario en la parte superior de la pantalla, de manera que puedas interactuar con la hoja, ya que el formulario se muestra como NO MODAL.
Al formulario le he quitado controles que eran redundantes y he sustituido el control ScrollBar por un control SpinButton.
También he eliminado los botones de la hoja por innecesarios.
Si cierras el formulario, pulsa Ctrl+f para volver a mostrarlo.
Cada vez que selecciones una celda de la columna AB, se seleccionará de forma automática el número del formulario y viceversa.
.

Publica un correo y ya que te responda me envías el archivo

La función find no tiene que ver nada con el problema que tiene la macro el problema es el siguiente y por cierto tienes razón el problema esta en el formulario que creaste pero no es porque lo creaste como no modal sino por el nombre que le diste DATOS en Excel hay jerarquía de objetos y cuando hiciste esto el objeto con mayor prioridad es el formulario así que todo lo que tenga que ver con DATOS excel lo va a tomar como si fuera del formulario y si te fijas en la macro el SET (que es tan bien un objeto se llama igual DATOS), esto confunde a la macro y le asigna todas las propiedades del set al formulario por eso te marca error, la solución es fácil o le cambias el nombre al formulario o bien le cambias el nombre al SET DATOS en las pruebas que hice le cambie inconscientemente el nombre al SET DATOS a SET XDATOS y toda instrucción datos la cambie a XDATOS y la macro funciono.

Como ves aun siendo expertos pueden ver sin observar los detalles

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas