El Do...Loop permite realizar una un procedimiento de forma iterativa mientras se cumpla una condición definida por el usuario.
Generalmente, el Do...Loop se combina con las condiciones While y Until. Para ello se define un contador, que sera el que romperá o cumplirá la condición definida por el usuario.
A diferencia de un llenado en bloques se podría hacer usando combinaciones con otras funciones o variables y que podría ser más rapido, el DoLoop permite tener una revisión más estricta y permite detectar error en los datos.
Utilizaremos la función DoLoop para el llenado de unas fechas de Venta de solicitudes. En caso en la base de datos con la que se hará el cruce, no haya información disponible, se tomará como fecha de venta el último estado registrado. Para ello emplearemos condicionales y cambios de tipo de variable.
A continuación se presenta el código usado:
Sub CompletarFecha()
'Definicion de Variables
Dim FilaFinal As Long
Dim FilaActual As Long
Dim ValorActual As String
FilaFinal = Range("B1048576").End(xlUp).Row
FilaActual = 5
'Defincion de la condicion de DoUntilLoop
Do Until FilaActual > FilaFinal
Cells(FilaActual, 3).Select
ActiveCell.FormulaR1C1 = "=+VLOOKUP(RC2,HojaQuery!R2C2:R26873C3,2,0)"
ActiveCell.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ValorActual = CStr(ActiveCell)
Application.CutCopyMode = False
If ValorActual = "Error 2042" Then
'Aqui se cambia a la fecha ultimo estado registrado
ActiveCell = Cells(FilaActual, 4)
ActiveCell.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ElseIf ValorActual = Empty Then
'Aqui se cambia a la fecha ultimo estado registrado
ActiveCell = Cells(FilaActual, 4)
ActiveCell.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Else
'Aqui se cambia a la fecha ultimo estado registrado
ActiveCell.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End If
Application.CutCopyMode = False
FilaActual = FilaActual + 1
Loop
MsgBox "Se terminó el llenado de Fecha, Gracias!", vbOKOnly, "Sistema"
End Sub
Elaborado por: Jesús Tapia
27/09/2014 a las 10:16 am
BUENOS DIAS MUCHAS GRACIAS POR EL APORTE Y ME GUSTARIA SABER SI AL CAMBIAR DE DIFERENTES COLUMNAS TENGO QUE CAMBIAR DATOS DE ESTA FILA Y QUE SIGNIFICAN
ActiveCell.FormulaR1C1 = "=+VLOOKUP(RC2,HojaQuery!R2C2:R26873C3,2,0)"
28/09/2014 a las 9:30 pm
Hola Alexander y Paola
Ese contenido fue obtenido con el grabador de macros, formulaR1C1 equivale al offset ... en este caso solo coloca el resultado en la celda activa ... y vlookup equivale al buscarv
https://www.excel-avanzado.com/7469/uso-de-worksheetfunction-vlookup.html
06/09/2021 a las 5:33 am
Excelentes explicaciones.
Estimado Fernando, cual libro recomendarias para aprender todos los comandos de VBA.
Saludos
07/09/2021 a las 6:07 pm
Gracias Victor
Te sugiero que uses https://www.excel-avanzado.com/introduccion-a-las-macros
Saludos