Ver Mensaje Individual
  #8 (permalink)  
Antiguo 09/10/2008, 09:53
Avatar de mrocf
mrocf
 
Fecha de Ingreso: marzo-2007
Ubicación: Bs.As.
Mensajes: 1.103
Antigüedad: 17 años, 1 mes
Puntos: 88
De acuerdo Respuesta: VBA - Mensaje de espere

Es sencillo. Mientras que
Código:
For j = 2 To numRows(2)
If (Workbooks(2).Worksheets(1).Range(varCellOriginalColumn & i).Value = Workbooks(3).Worksheets(1).Range(varCellDestinyColumn & j).Value) Then
    encontrada = True
    pos = j
    Exit For
  End If
Next j
recorre -una a una- las celdas del rango que se inicia en la celda
Workbooks(3).Worksheets(1).Range(varCellDestinyCol umn & "2")

hasta la celda
Workbooks(3).Worksheets(1).Range(varCellDestinyCol umn & numRows(2))

buscando cual de ellas contiene el mismo valor que
Workbooks(2).Worksheets(1).Range(varCellOriginalCo lumn & i)

el código
Código:
Set Celda = Range(Range(Workbooks(3).Worksheets(1).Range(varCellDestinyColumn & 2)), _
    Range(Workbooks(3).Worksheets(1).Range(varCellDestinyColumn & numRows(2)))).Find( _
    What:=(Workbooks(2).Worksheets(1).Range(varCellOriginalColumn & i).Value), _
    LookIn:=xlValues, LookAt:=xlWhole)
equivale al comando "Buscar" (Ctrl + B) del Excel ("Find" en inglés).

Como este comando es "inmensamente" más rápido que buscar -una a una- en las celdas del rango en cuestión la igualdad, deberías notar la diferencia inmediatamente.

Investiga en la ayuda del VBA sobre las características del método "Find": verás que devolverá como resultado una celda.

De allí es que, más abajo en tu código, reemplacé:
valueSearch = Range(varCellDestinyCopy & pos).Value

por:
valueSearch = Celda.Value

Cualquier otra duda comenta, ¿si?.
Saludos, Cacho.