Eliminar código vba de hoja nueva hasta cierta línea de código

Como les va. Al momento de crear una copia de una hoja de excel con una macro, en la hoja nueva también se copia el código vba que tiene la hoja original. Es por ello que para eliminar el código vba de la hoja nueva utilizo estas líneas de código:

Worksheets(2).Copy After:=Sheets(Sheets.Count)
'
'Codigo de eliminar codigo
With ActiveSheet
With .Parent.VBProject.VBComponents(.CodeName)
.CodeModule.DeleteLines 1, .CodeModule.CountOfLines
End With
End With

Pero no se que debo hacer o como puedo adaptar las anteriores líneas para eliminar el código vba de la hoja nueva hasta cierta línea. Osea que no se elimine todo el código vba de la hoja nueva.

1 respuesta

Respuesta
3

Juan, se me ocurre que el código para borrar lo dejaras tal y como está, y elaborar otro para crear el código borrado, pero con las líneas que deseas incluir, sería bueno que subas el código que se borra y resaltar las líneas que quieres dejar, no se si me expliqué bien, sino acá te dejo mi correo para que envíes tu archivo y vemos que podemos hacer. [email protected]

ESTA PARTE DEL CÓDIGO QUIERO QUE SE ME BORRE DE LA HOJA NUEVA

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Cancel = True
Set Activador1 = Range("D10:D19") ' También puedes utilizar el nombre de un rango que exista en la hoja activa
If Not Intersect(Target, Activador1) Is Nothing Then
UserForm1.Show
End If
Set Activador2 = Range("D24:D28")
If Not Intersect(Target, Activador2) Is Nothing Then
UserForm1.Show
End If
Set Activador3 = Range("D33:D35")
If Not Intersect(Target, Activador3) Is Nothing Then
UserForm4.Show
End If
End Sub

Sub borrarmateriales()
Worksheets("Hoja2").Range("B10:G19").ClearContents
End Sub
Sub borrarmano()
Worksheets("Hoja2").Range("B24:G28").ClearContents
End Sub
Sub borrarequipos()
Worksheets("Hoja2").Range("B33:G35").ClearContents
End Sub

Sub CopiarHojaalFinal()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.CopyObjectsWithCells = True
nombre = Application.InputBox("Introduzca el nombre del nuevo A.P.U.", "NOMBRE DE A.P.U.")
If nombre = Empty Then
End
End If

On Error GoTo ErrorHandler
Worksheets(2).Copy After:=Sheets(Sheets.Count)
'
'Codigo de eliminar codigo
With ActiveSheet
With .Parent.VBProject.VBComponents(.CodeName)
.CodeModule.DeleteLines 1, .CodeModule.CountOfLines
End With
End With
'
Sheets(Sheets.Count).Name = nombre

ActiveSheet.Shapes.Range(Array("Button 2")).Select
Selection.Delete
ActiveSheet.Shapes.Range(Array("Button 3")).Select
Selection.Delete
ActiveSheet.Shapes.Range(Array("Button 4")).Select
Selection.Delete
ActiveSheet.Shapes.Range(Array("Button 5")).Select
Selection.Delete
Sheets("Hoja2").Select

MsgBox "Se ha creado el nuevo A.P.U."
Exit Sub
ErrorHandler:
MsgBox Err.Description, vbExclamation, "ADVERTENCIA"
Sheets(Sheets.Count).Delete
Sheets("Hoja2").Select

Application.ScreenUpdating = True
Application.DisplayAlerts = True

End Sub

ESTA PARTE QUIERO QUE PERMANEZCA EN LA NUEVA HOJA

Sub Irapresupuesto()
Sheets("presupuesto").Select
End Sub

Una disculpa por la demora, si estas usando un userform para crear la nueva hoja y borrar el código de esta, puedes crear un textbox en el cual se pondrá el nombre (codename) de la hoja creada, para después agregar el código a la nueva hoja tomando de referencia el nombre que lleva el textbox.

Agrega la siguiente línea al código que tienes:

Worksheets(2).Copy After:=Sheets(Sheets.Count)
'
'Codigo de eliminar codigo
With ActiveSheet
With .Parent.VBProject.VBComponents(.CodeName)
.CodeModule.DeleteLines 1, .CodeModule.CountOfLines
End With
End With
'Creado el textbox para agregarle el nombre de la hoja creada
TextBox1 = ActiveSheet.CodeName

Y este código en un botón :

Private Sub CommandButton1_Click()
Dim CodeProyect As VBIDE.VBProject
Dim Componente As VBIDE.VBComponent
Dim Cod As VBIDE.CodeModule
Dim nCod As String
Dim nLin As Long
    Set CodeProyect = ActiveWorkbook.VBProject
    Set Componente = CodeProyect.VBComponents(TextBox1) 'Hago referencia al textbox creado
'                                                       'y donde tomo el nombre de la nueva hoja
    Set Cod = Componente.CodeModule
    nCod = vbNewLine & "Sub Irapresupuesto()" _
    & vbNewLine & "Sheets(""presupuesto"").Select" _
    & vbNewLine & "End Sub"
    nLin = nLin + 1
    Cod.InsertLines nLin, nCod
End Sub

 Espero te sirva. Salu-dos

Para crear la nueva hoja utilizo un botón activex. Cuando le doy click a ese botón se me abre un inputbox y le pongo el nombre a la hoja. Voy a probar tu solución y te cuento.

Me sale esto en su código:

Error de compilación:

No se ha definido el tipo definido por el usuario

Y me escoge la primera línea de su código

Dim CodeProyect As VBIDE.VBProject

No se si me toca activar alguna referencia, de todos modos le envíe el archivo a su correo para ver cual es el problema. El archivo que debe abrir se llama "A.P.U.S" GRACIAS POR SU COLABORACIÓN

Al asunto del mensaje del correo le puse ELIMINACIÓN DE CÓDIGO VBA


Ahrens Ruano, le reenvíe el archivo porque me toco hacerle una modificación a su código en esta línea

nCod = vbNewLine & "Sub CommandButton2_Click()" _

El asunto del mensaje es REENVÍO DE ARCHIVO

Disculpe las molestias


Ahrens Ruano, ya pude resolver el problema que tenia, me tocaba activar una referencia llamada

microsoft visual basic for applications extensibility 5.3

Gracias por su colaboración.

Juan quiero pedirte mil disculpas, se me pasó por alto decirte el activar esa referencia. Salu-dos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas