¿Cómo aplicar macro en hojas activas de libro? ¿Cómo resolver un mensaje de error NEXT sin For en VBA?
Estoy empezando a usar VBA y me imagino que como hace mucha gente voy copiando compilaciones que funcionan y adaptándolas a los que yo quiero hacer. En este caso quiero que la macro guarde un libro que tiene varias hojas, algunas ocultas y otras no, sin las fórmulas, es decir, obtener el mismo libro, con otro nombre y sólo con los valores de las celdas de las hojas activas en el libro inicial.
He encontrado una compilación que al parecer funciona, es la siguiente:
Sub GuardarSinFormulas()
Application.ScreenUpdating = False
Dim copia As String
copia = Left(ThisWorkbook.FullName, _
Len(ThisWorkbook.FullName) - 4) & " (Sin fórmulas).xls"
ActiveWorkbook.SaveCopyAs copia
Workbooks.Open copia
With ActiveWorkbook
For Each hoja In .Sheets
hoja.Rows("1:200").Value = hoja.Rows("1:200").Value
Next
Call EliminarHojasOcultas
Call EliminsProyectosVbaTodos
.Save
.Close
End With
Application.ScreenUpdating = True
End Sub
Sub EliminarHojasOcultas()
Application.DisplayAlerts = False
For i = Sheets.Count To 1 Step -1
If Sheets(i).Visible = False Then
Sheets(i).Delete
End If
Next i
Application.DisplayAlerts = True
End Sub
Sub EliminsProyectosVbaTodos()
Dim VBProj As VBIDE.VBProject
Dim VBComp As VBIDE.VBComponent
Dim CodeMod As VBIDE.CodeModule
Set VBProj = ActiveWorkbook.VBProject
For Each VBComp In VBProj.VBComponents
If VBComp.Type = vbext_ct_Document Then
Set CodeMod = VBComp.CodeModule
With CodeMod
.DeleteLines 1, .CountOfLines
End With
Else
VBProj.VBComponents.Remove VBComp
End If
Next VBComp
End Sub
Mi problema es que en mi libro tengo tablas dinámicas y por algún motivo, esta complicación da error con las tablas dinámicas. Como las tablas dinámicas las tengo en hojas ocultas y no me hace falta aplicar la macro, estoy modificando la complicación para que se aplique sólo a las hojas activas
Para ello he hecho esto:
Sub GuardaSinformulas()
Application.ScreenUpdating = False
Dim copia As String
copia = Left(ThisWorkbook.FullName, _
Len(ThisWorkbook.FullName) - 4) & "(sin fórmulas).xls"
ActiveWorkbook.SaveCopyAs copia
Workbooks.Open copia
With ActiveWorkbook
Call OcultarHojas
Dim j As Byte
For j = Sheets.Count To 1 Step -1
If Sheets(j).Visible = True Then
hoja.Rows("1:200").Value = hoja.Rows("1:200").Value
Else
Next
Call EliminarHojasOcultas
Call EliminsProyectosVbaTodos
.Save
.Close
End With
Application.ScreenUpdating = True
End Sub
En este punto me sale el error NEXT sin FOR
Veréis he he añadido otra macro llamada OcultarHojas
es un poco chapuza pero funciona:
Sub OcultarHojas()
Dim i As Byte
Sheets(3).Visible = False
Sheets(7).Visible = False
Sheets(24).Visible = False
Sheets(25).Visible = False
Sheets(28).Visible = False
Sheets(33).Visible = False
For i = 9 To 15
Sheets(i).Visible = False
Next
For i = 20 To 22
Sheets(i).Visible = False
Next
For i = 30 To 31
Sheets(i).Visible = False
Next
End Sub