Como puedo mejorar esta macro

Tengo esta macro que funciona bien:

Sub SALTO()

'texto a buscar en A1 - Ajustar
Dato = Range("A1").Value
ultima = Range("A2000").End(xlUp).Row
Range("A2").Select
While ActiveCell.Row <= ultima
If ActiveCell.Value = "Salto" Then
ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCell
End If
ActiveCell.Offset(1, 0).Select
Wend
End Sub

Con esta macro cuando encuentra la palabra "Salto" introduce un salto de página. Hasta aquí todo va bien. Lo que necesito es que si desaparece la palabra salto, elimine el salto de página que ha introducido.

2 Respuestas

Respuesta
2

.

Hola! Puedes intentar con lo siguiente:

Sub SALTO()
Dim Rng As Range, C As Range, iniCell$, i%
For i = ActiveSheet.HPageBreaks.Count To 1 Step -1
  ActiveSheet.HPageBreaks(i).Delete: DoEvents
Next
Set Rng = Range("a1", Cells(Rows.Count, "a").End(xlUp))
Set C = Rng.Find("Salto", LookIn:=xlValues, LookAt:=xlWhole, SearchDirection:=xlNext, MatchCase:=False)
If C Is Nothing Then Exit Sub Else iniCell = C.Address
Do
  ActiveSheet.HPageBreaks.Add Before:=C: DoEvents
  Set C = Rng.FindNext(C)
Loop Until C.Address = iniCell
End Sub

Saludos, Mario (Cacho) R.

.

.

.

O, utilizando una parte de la "receta" que sugiere Sebas, también podría hacerse:

Sub SALTO()
Dim Rng As Range, C As Range, iniCell$
ActiveSheet.ResetAllPageBreaks: DoEvents
Set Rng = Range("a1", Cells(Rows.Count, "a").End(xlUp))
Set C = Rng.Find("Salto", LookIn:=xlValues, LookAt:=xlWhole, SearchDirection:=xlNext, MatchCase:=False)
If C Is Nothing Then Exit Sub Else iniCell = C.Address
Do
  ActiveSheet.HPageBreaks.Add Before:=C: DoEvents
  Set C = Rng.FindNext(C)
Loop Until C.Address = iniCell
End Sub
Respuesta
1

Con la siguiente línea eliminas el primer salto de página

 ActiveSheet. HPageBreaks(1).Delete ' El "1" es el salto que borra

No sabria decirte como hacer que el numero de salto varie

Porque intente con un

Dim count as Long
count = 2  ' al principio que es la fila donde comienza
count = count + 1 ' que seria para agregarle 1 fila para cuando el bucle 
vuelva a revisar

pero no funciona quizas alguien mas sepa que variable sirve para indicarle el numero de salto =/

si es que se puede...

Porque la otra opcion seria borrar todos los saltos si alguna celda no coincide pero tendrias que asignarle un rango especifico

If range("a2").value <> "Salto" then
   ActiveSheet.ResetAllPageBreaks
End if

En ese ejemplo si el valor de A2 no es "Salto" entonces se borran todos los Saltos de pagina

Para cambiar la Hoja activa por Oferta cambia donde dice "ActiveSheet" por "Sheets("OFERTA")"

Recuerda que tiene que estar escrito tal cual el nombre de la hoja con respecto a mayúsculas y minúsculas, en cuanto a los márgenes yo no veo que la macro de el compañero Mario Rodríguez los toque🤔

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas