Error al ejecutar código macro en sistema de reserva

Estoy trabajando en un libro el cual consta de 3 hojas.
Detallo solo 1
- Info dic-ene-feb: en esta hoja ingreso la información requerida. En esta hoja las columnas J y K se obtienen de cálculos auxiliares. Me sirven para determinar si la reserva es un ingreso del trimestre anterior o en su defecto la salida del huésped es en el trimestre que sigue. Para que la macro me funcione, realice cálculos auxiliares para determinar que si la reserva termina en el trimestre que sigue tome como valor el ultimo día del trimestre en el que estoy trabajando y si la reserva viene del trimestre anterior tome el primer día de trimestre en vigencia.

Cuando ejecuto la macro me da error y luego depuro. El tema es que cuando voy a la hoja donde debe repercutir lo solicitado en la macro, esta ha sido ejecutada. Haciendo pruebas para ver que podía ser y poder evitar ese mensaje error, me he percatado que este error no me sale cuando en las columnas J y K no hay fórmulas (es decir solo valores), pero necesito que estas se mantengan para el funcionamiento de la planilla.

Linea error: Set Destino = .Range(.Cells(Room.Row, Ini.Column), .Cells(Room.Row, Fin. Column))

COPIO el código

Sub Planing()
Dim Room As Range
Dim Ini As Range
Dim Fina As Range
Dim Destino As Range
'--
Application.ScreenUpdating = False
Application.DisplayAlerts = False
With Sheets("Planing")
   For x = 5 To .Range("A" & Rows.Count).End(xlUp).Row
      .Range("B" & x & ":Bj" & x).UnMerge
      .Range("B" & x & ":Bj" & x).Interior.Color = .Range("B" & x).Interior.Color
      .Range("B" & x & ":Bj" & x) = ""
   Next
   For x = 2 To Range("A" & Rows.Count).End(xlUp).Row
      Set Room = .Columns("A").Find(Range("O" & x), , , xlWhole)
      If Room Is Nothing Then
         Range("Z" & x) = ""
      Else
         Set Ini = .Rows(4).Find(Range("J" & x), , xlValues, xlWhole)
         Set Fin = .Rows(4).Find(Range("K" & x), , xlValues, xlWhole)
         Set Destino = .Range(.Cells(Room.Row, Ini.Column), .Cells(Room.Row, Fin.Column))
         Destino.Merge
         Destino = Range("E" & x) & "-" & Range("C" & x) & "-" & Range("F" & x)
         Destino.HorizontalAlignment = xlCenter
         Destino.Font.Bold = True
      End If
   Next
   .Select
End With
End Sub

1 Respuesta

Respuesta
2

Desconozco tu hoja por lo tanto solo puedo marcarte un error leyendo el código.

Cada vez que se utiliza FIND hay que tener presente que puede no encontrarse el dato buscado. Por lo tanto antes de utilizar la columna de INI debieras evaluar quedó vacía o no.

Fijate que en mi ejemplo, Ini quedó vacía. Por lo tanto en Destino no puedo hacer mención a su columna. Lo mismo pasa con Fin o Fina (revisa el nombre declarado para la variable Fin o Fina).

Sdos,

Elsa

En mi canal encontrarás varios videos con el tema FIND (n° 16, 25, 29, + ) y allí comento el error de dejar asumido que el dato se encuentra... quizás si ... ¿pero y si no lo encuentra?

¡Gracias!

Muchas gracias elsa

Haré la corrección! Espero poder resolverlo

Saludos y que tenga usted un excelente día

Atentamente

Luego de esta línea:

Set Ini = .Rows(4).Find(Range("J" & x), , xlValues, xlWhole)

Debes evaluar:

If Ini is Nothing Then   

'... Y aquí tomarás alguna otra decisión (avanzar a la siguiente fila o cancelar o lo que creas conveniente)

Y aquí lo mismo:

Set Fin = .Rows(4).Find(Range("K" & x), , xlValues, xlWhole)

If Fin is Nothing Then   

'... Y aquí tomarás alguna otra decisión (avanzar a la siguiente fila o cancelar o lo que creas conveniente)

Si te quedan dudas o nuevos errores volvé a colocar el código como te quedó y lo sigo ajustando.

Y si la consulta queda resuelta no olvides marcar una valoración para darla por cerrada. Encontrarás 2 opciones para ello: excelente o buena.

Sdos!

Buenas noches Elsa

Podrá usted orientarme sobre las dos líneas que hace usted mención.

No comprendo que debo hacer.

En estas líneas:

Set Ini = .Rows(4).Find(Range("J" & x), , xlValues, xlWhole)
Set Fin = .Rows(4).Find(Range("K" & x), , xlValues, xlWhole)

la columna J contiene los datos de ingreso del huésped, la macro toma esta fecha para llevarla a la hoja destino llamada "Planing", lo mismo para la columna K que contiene la salida del huésped.

Hallados estos valores combina las celdas comprendidas en este rango y en dicha combinación se escriben los datos que están comprendidos en las celdas E-C-F.

No tengo ningún paso más para completar, al menos eso creo.

Desde ya agradezco mucho su aporte.

Atentamente

CSI

Elsa estoy tratando de aplicar lo sugerido

el código me ha quedado así:

Sub ene_feb()
Dim Room As Range
Dim Ini As Range
Dim Find As Range
Dim x As Long
Dim Destino As Range
'--
Application.ScreenUpdating = False
Application.DisplayAlerts = False
With Sheets("ene-feb")
   For x = 5 To .Range("A" & Rows.Count).End(xlUp).Row
      .Range("B" & x & ":Bk" & x).UnMerge
      .Range("B" & x & ":Bk" & x).Interior.Color = .Range("B" & x).Interior.Color
      .Range("B" & x & ":Bk" & x) = ""
   Next
   For x = 2 To Range("A" & Rows.Count).End(xlUp).Row
      Set Room = .Columns("A").Find(Range("M" & x), , , xlWhole)
      If Room Is Nothing Then
         Range("Q" & x) = ""
      Else
         Set Ini = .Rows(4).Find(Range("I" & x), , xlValues, xlWhole)
         If Ini Is Nothing Then
         Set Fin = .Rows(4).Find(Range("J" & x), , xlValues, xlWhole)
         If Fin Is Nothing Then
         Set Destino = .Range(.Cells(Room.Row, Ini.Column), .Cells(Room.Row, Find.Column))
         Destino.Merge
         Destino = Range("E" & x) & "-" & Range("C" & x) & "-" & Range("F" & x)
         Destino.HorizontalAlignment = xlCenter
         Destino.Font.Bold = True
      End If
   Next
   .Select
End With
End Sub

Al ejecutar me da el siguiente error

en la linea Next

el mensaje dice error de compilación - Next sin for

Agradecería me ayudase a corregirla

Saludos

Te agregué las 2 comparaciones juntas porque DESTINO necesita las referencias de las 2 col J y K. Si falta alguna se pasa al registro siguiente, línea del Next.

Fijate que dejé la variable como 'Fina' en lugar de 'Fin' porque así estaba declarada al iniciol.

Sub Planing()
Dim Room As Range
Dim Ini As Range
Dim Fina As Range
Dim Destino As Range
'--
Application.ScreenUpdating = False
Application.DisplayAlerts = False
With Sheets("Planing")
   For x = 5 To .Range("A" & Rows.Count).End(xlUp).Row
      .Range("B" & x & ":Bj" & x).UnMerge
      .Range("B" & x & ":Bj" & x).Interior.Color = .Range("B" & x).Interior.Color
      .Range("B" & x & ":Bj" & x) = ""
   Next
   For x = 2 To Range("A" & Rows.Count).End(xlUp).Row
      Set Room = .Columns("A").Find(Range("O" & x), , xlValues, xlWhole)
      If Room Is Nothing Then
         Range("Z" & x) = ""
      Else
         Set Ini = .Rows(4).Find(Range("J" & x), , xlValues, xlWhole)
         Set Fina = .Rows(4).Find(Range("K" & x), , xlValues, xlWhole)
         'si no se encuentra alguna de las fechas se pasa al registro siguiente
         If Ini Is Nothing Or Fina Is Nothing Then
            GoTo sigue
         Else
            Set Destino = .Range(.Cells(Room.Row, Ini.Column), .Cells(Room.Row, Fina.Column))
            Destino.Merge
            Destino = Range("E" & x) & "-" & Range("C" & x) & "-" & Range("F" & x)
            Destino.HorizontalAlignment = xlCenter
            Destino.Font.Bold = True
         End If
      End If
sigue:
    Next
   .Select
End With
End Sub

Sdos!

Acabo de ver tu nuevo código y atención que cambiaste algunas referenicas. Yo te lo dejé como en la primer imagen.

Sdos!

ELSA! muchas gracias

Estoy entendiendo un poco mejor, la aplique y corre de maravillas.

Solo una consulta más, si es factible.

Puede ocurrir que deba borrar los registros de la hoja y aplicar la macro para que "borre" el contenido aplicado anteriormente en la hoja "Planing". Lo aplique y me sale lo siguiente:

"Se ha producido el error 13 en tiempo de ejecución: no coinciden los tipos"

Al dar depurar

la linea resaltada es: Set Fina = .Rows(4).Find(Range("X" & x), , xlValues, xlWhole)

cuando voy a la hoja Planing los datos han sido borrados exitosamente (estimo que habría que corregir algo en el código para que no salga el error, ya que el objetivo de borrar el contenido se efectúa), sólo deberia mantenerse la celda con los bordes.

Desde ya muy agradecido

Atte

CSI

Elsa en la columna X, los datos son el resultado de una fórmula. Me he percatado que si los cambio por valores el error no se muestra. Pero el resultado que obtengo de esa operación es el valor que necito en esa celda, ósea no puedo omitir la fórmula. Cuando probé la macro las celdas tenían datos hasta la fila 7, luego cuando estiré la fórmula hasta la fila que necesito salto el error antes mencionado. Si usted me pudiera facilitar un mail al cual yo le pudiera mandar la planilla para que pueda verla mas claramente, ya que por este medio no puedo subirla o le envio capturas de pantalla.

Atte

CSI

Mis correos aparecen en la sección CONTACTOS de mi sitio 'aplicaexcel' que dejo al pie. Copia cualquiera de ellos.

En mi sitio no hay publicidad, ni se requiere suscripción, ni necesitas registrarte. Solo entrar allí y disfrutar de su contenido: funciones, herramientas, ejemplos para descargar gratis. Además demos de manuales y aplicaciones que también pueden servir para tomar ideas ;)

Si lo escribo aquí el corrector siempre me lo transforma mal ;( pero intenta con esto reemplazando los textos en mayúsculas por el caracter:

CibersoftPUNTOargARROBAgmailPUNTOcom

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas