Ayuda para una modificación código

Mi pregunta es la siguiente...
El siguiente código que muestro lo utilizo para que me analice y convierta con los datos que hay en las tres primeras columnas A, B, C, de una base de datos que corresponden al día, mes y año, y que en la columna "G", me escriba el día de la
semana que corresponde, y que igualmente haga lo mismo con las columnas DE, E, F, y coloque el día de la semana en columna H.
El código funciona bien si completo todos los datos de las columnas A hasta la F, pero si falta algún dato el código se detiene y solo analiza los datos hasta la celda en blanco.
En la base de datos no siempre tengo que poner una fecha obligatorio, por lo que necesitaría que el código cuando encuentre una celda en blanco que continúe analizando datos hasta el último dato que normalmente estará en la columna A, que no necesariamente tiene que ser la 65536, puede ser la 20.000, con celdas en blanco en ocasiones posiblemente de 20 o 25 filas.
He intentado varias formas de hacerlo pero no me funciona. En resumen, necesito que me analice todas las filas utilizadas aunque no hayan escritas fechas en algunas de las columnas, ya que en el ejemplo no están todas las columnas que utilizaré.
Sub cmdMostrarDia_Click()
Dim strFecha As String 'Nombramos la variable tipo texto
Dim strFecha2 As String
fil = 2
UltimaFila = Range("A65536").End(xlUp).Row
'If UltimaFila > Range("D65536").End(xlUp).Row Then
' UltimaFila = Range("D65536").End(xlUp).Row
'End If
'Garantizamos que haya minimo una fila de datos
If UltimaFila > 10 Then
'Iteramos desde la fila 2 y hasta donde haya datos, no tiene
'caso recorrer TODAS las filas, solo las que tengan datos
Application.ScreenUpdating = False
For j = 2 To UltimaFila
dia1 = Cells(fil, 1)
mes1 = Cells(fil, 2)
Ano1 = Cells(fil, 3)
dia2 = Cells(fil, 4)
mes2 = Cells(fil, 5)
Ano2 = Cells(fil, 6)
strFecha = Trim(dia1) & "/" & Trim(mes1) & "/" & Trim(Ano1) 'le asignamos un valor
If Cells(fil, 4).Value = "" Then
Cells(fil, 13).Value = ""
Else
strFecha2 = Trim(dia2) & "/" & Trim(mes2) & "/" & Trim(Ano2)
If IsDate(strFecha) Then 'si la variable strFecha es una fecha entonces:
Cells(fil, 12).Value = Format(strFecha, "dddd")
Cells(fil, 13).Value = Format(strFecha2, "dddd")
fil = fil + 1
End If
End If
Next j
End If
End Sub
Muchas gracias, te remito el archivo a tu correo.

1 Respuesta

Respuesta
1
Te anexo el código corregido con algunos comentarios...
Option Explicit
Public Sub MostrarDiasDeLaSemana()
Dim strFecha As String
Dim strFecha2 As String
Dim co1 As Long, UltimaFila As Long
'****************************************
'Si estas completamente seguro de que la mayor cantidad de datos
'SIEMPRE estara en la columna A con la siguiente linea es suficiente
UltimaFila = Range("A65536").End(xlUp).Row
'****************************************
'Garantizamos que haya minimo una fila de datos
'SI usas un valor de 10, entonces solo hará el ciclo si hay mínimo
'estas 10 filas, ¿es correcto?
If UltimaFila > 10 Then
Application.ScreenUpdating = False
For co1 = 2 To UltimaFila
Application.StatusBar = "Procesando el registro: " & Format(co1 - 1)
strFecha = Trim(Cells(co1, 1)) & "/" & _
Trim(Cells(co1, 2)) & "/" & _
Trim(Cells(co1, 3))
strFecha2 = Trim(Cells(co1, 4)) & "/" & _
Trim(Cells(co1, 5)) & "/" & _
Trim(Cells(co1, 6))
'si la variable strFecha es una fecha entonces:
If IsDate(strFecha) Then
Cells(co1, 12).Value = Format(strFecha, "dddd")
Else
Cells(co1, 12).Value = ""
End If
If IsDate(strFecha2) Then
Cells(co1, 13).Value = Format(strFecha2, "dddd")
Else
Cells(co1, 13).Value = ""
End If
Next co1
Application.StatusBar = False
Application.ScreenUpdating = True
End If
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas