Modificar rango de valores en Macro

Tengo esta macro que copio abajo.

He descifrado que coge los valores de Enviado a partir de la fila 21, ¿no? Creo que es lo de i=21. Si cambio el 21 por un 12 (que es desde donde los quiero), no me funciona bien.

¿Debo cambiar algo más? Yo quiero que vayan del 12 al 30.

Saludos,

Private Sub Worksheet_Calculate()
'Por Dante Amor
Set h1 = Sheets("AVISO ORDENES") 'hoja con datos
Set h2 = Sheets("Enviados") 'hoja de control de filas enviadas
'
For i = 21 To h1.Range("P" & Rows.Count).End(xlUp).Row
para = ""
Select Case LCase(h1.Cells(i, "P").Value)
Case LCase("Enviar1")
para = "[email protected]" 'Destinatarios
asunto = "Aviso IBEX "
cuerpo = Cells(14, "AB").Value 'Cuerpo
Case LCase("Enviar2")
para = "[email protected]" 'Destinatarios
asunto = "Aviso IBEX "
cuerpo = Cells(15, "AB").Value 'Cuerpo
Case LCase("Enviar3")
para = "[email protected]" 'Destinatarios
asunto = "Aviso IBEX "
cuerpo = Cells(16, "AB").Value 'Cuerpo
Case LCase("Enviar4")
para = "[email protected]" 'Destinatarios
asunto = "Aviso IBEX "
cuerpo = Cells(17, "AB").Value 'Cuerpo
Case LCase("Enviar5")
para = "[email protected]" 'Destinatarios
asunto = "Aviso IBEX "
cuerpo = Cells(18, "AB").Value 'Cuerpo
Case LCase("Enviar6")
para = "[email protected]" 'Destinatarios
asunto = "Aviso IBEX "
cuerpo = Cells(23, "AB").Value 'Cuerpo
Case LCase("Enviar7")
para = "[email protected]" 'Destinatarios
asunto = "Aviso IBEX "
cuerpo = Cells(24, "AB").Value 'Cuerpo
Case LCase("Enviar8")
para = "[email protected]" 'Destinatarios
asunto = "Aviso IBEX "
cuerpo = Cells(25, "AB").Value 'Cuerpo
Case LCase("Enviar9")
para = "[email protected]" 'Destinatarios
asunto = "Aviso IBEX "
cuerpo = Cells(26, "AB").Value 'Cuerpo
Case LCase("Enviar10")
para = "[email protected]" 'Destinatarios
asunto = "Aviso IBEX "
cuerpo = Cells(27, "AB").Value 'Cuerpo
End Select
If para <> "" Then
Set b = h2.Columns("A").Find(i, lookat:=xlWhole)
If b Is Nothing Then
'la fila no se ha enviado, se envía el correo
fila = i
Set Dam = CreateObject("outlook.application").createitem(0)
Dam.To = para
Dam.Subject = asunto
Dam.Body = cuerpo
'dam. Send 'El correo se envía en automático
Dam. Display 'El correo se muestra
Dam. Send
'
'Se agrega la fila para que el correo no sea enviado
'
u2 = h2.Range("A" & Rows.Count).End(xlUp).Row + 1
h2.Range("A" & u2).Value = fila
h2.Range("B" & u2).Value = "Enviado"
End If
End If
Next
End Sub

1 Respuesta

Respuesta
1

Cambia esta línea:

For i = 21 To h1.Range("P" & Rows.Count).End(xlUp).Row

'

Por esta:

For i = 12 To 30

'

Si no te funciona, dime qué mensaje de error te aparece.

Pon una imagen de tu pantalla para ver cómo están los datos.

Me dice:

Se ha producido el error 13 en tiempo de ejecución. No coinciden los tipos.

Y me indica en amarillo la fila que pongo en negrita:

Private Sub Worksheet_Calculate()
'Por Dante Amor
Set h1 = Sheets("AVISO ORDENES") 'hoja con datos
Set h2 = Sheets("Enviados") 'hoja de control de filas enviadas
'
For i = 12 To 30
para = ""
Select Case LCase(h1.Cells(i, "P").Value)
Case LCase("Enviar1")

Puedes ponerme los valores que tienes en cada celda de la columna P desde la fila 12 hasta la 30

¿Alguno de los valores en la celda tiene error?

¿Tienes celdas combinadas?

Pon imagen de tu hoja donde se vean los valores, las filas y las columnas

Ah pues puede ser eso porque en algunas de esta columna P al no poder calcular el valor o no existir, indica algo así como #href#. Esto en las nuevas al ampliar el rango desde la fila 12. Antes siempre había valor correcto y funcionaba bien.

Es posible que eliminando ese #href# mediante SI.ERROR(“”,...) se quede la celda vacía y funcione la macro?

Lo probaré.

Igualmente, es correcto como lo he dejado desde la fila 12 y no la 21? 

For i = 12 To 30
para = ""
Select Case LCase(h1.Cells(i, "P").Value)

.....

Está bien así

For i = 12 To 30

Si ya eliminaste los errores con si. Error( ), entonces ya no debes tener problemas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas