Evitar mensaje de aviso al eliminar hoja

03/06/2006 - 21:16 por klomkbock | Informe spam
Hola a todos.

En funcion de determinadas condiciones (con codigo) quiero que se elimine
o no una hoja determinada. Esto lo he conseguido, el problema es que no se
como evitar que excel me presente el mensaje de aviso: "Pueden existir
..¿Deseas eliminar la hoja"(mas o menos), y me interesaria que no lo
presentara, sino que directamente eliminara la hoja. Pongo el codigo usado
por si srve de ayuda. (A este procedimiento se le llama desde otro)

Por cierto ¿podria decime alguien si seria mejor que este procedimiento
fuese function en vez de sub y , si es asi, porque?

Agradezco vuestra ayuda de antemano.

Un saludo y hasta pronto
Ivan


Sub NuevaHoja(HojaNueva As String, Titulos As Variant)
On Error GoTo salir
Worksheets.Add after:=Worksheets("Libros seleccionados")
ActiveSheet.Name = HojaNueva
On Error GoTo 0
Dim colT As Long, LetraT As Variant
colT = UBound(Titulos)
LetraT = Array("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", _
"k", "l", "m", "n", "o", "p", "q", "r", "s")
With Worksheets(HojaNueva)
With .Range("a1:" & LetraT(colT) & "1")
.Value = Titulos
With .Font
.Bold = True
.Size = 10
End With
.HorizontalAlignment = xlCenter
.Interior.ColorIndex = 3
End With
End With
salir:
If ActiveSheet.Name <> HojaNueva Then ActiveSheet.Delete
End Sub

Preguntas similare

Leer las respuestas

#1 KL
03/06/2006 - 22:18 | Informe spam
Usa la siguiente instruccion antes de eliminar la hoja:

Application.DisplayAlerts=False

y despues pon:

Application.DisplayAlerts=True

Saludos,
KL


"Ivan" wrote in message news:%
Hola a todos.

En funcion de determinadas condiciones (con codigo) quiero que se elimine
o no una hoja determinada. Esto lo he conseguido, el problema es que no se
como evitar que excel me presente el mensaje de aviso: "Pueden existir
..¿Deseas eliminar la hoja"(mas o menos), y me interesaria que no lo
presentara, sino que directamente eliminara la hoja. Pongo el codigo usado
por si srve de ayuda. (A este procedimiento se le llama desde otro)

Por cierto ¿podria decime alguien si seria mejor que este procedimiento
fuese function en vez de sub y , si es asi, porque?

Agradezco vuestra ayuda de antemano.

Un saludo y hasta pronto
Ivan


Sub NuevaHoja(HojaNueva As String, Titulos As Variant)
On Error GoTo salir
Worksheets.Add after:=Worksheets("Libros seleccionados")
ActiveSheet.Name = HojaNueva
On Error GoTo 0
Dim colT As Long, LetraT As Variant
colT = UBound(Titulos)
LetraT = Array("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", _
"k", "l", "m", "n", "o", "p", "q", "r", "s")
With Worksheets(HojaNueva)
With .Range("a1:" & LetraT(colT) & "1")
.Value = Titulos
With .Font
.Bold = True
.Size = 10
End With
.HorizontalAlignment = xlCenter
.Interior.ColorIndex = 3
End With
End With
salir:
If ActiveSheet.Name <> HojaNueva Then ActiveSheet.Delete
End Sub



Respuesta Responder a este mensaje
#2 Héctor Miguel
03/06/2006 - 23:20 | Informe spam
hola, Ivan !

... podria decime alguien si seria mejor que este procedimiento fuese function en vez de sub y si es asi, porque?



[hasta donde se]... la [unica] diferencia 'basica' entre los procedimientos Sub y Function es que...
-> si el caso es que el 'uso pretendido' de un procedimiento Function...
a) sera como funcion [de hoja de calculo] definida por el usuario...
NO 'puede' modificar el ambiente / entorno de la aplicacion
[colores de celda, formatos, tipos de letra, 'otras' celdas, etc.]
b) sera para uso de 'codigo_x_codigo'.. pudiera resultar en algunos casos [ligeramente] mas rapida su ejecucion ;)
aunque habria que 'cuidar' si los argumentos 'se pasan' por referencia [ByRef -por omision-] o por valor [ByVal]
asi como los tipos de datos asignados a los argumentos [Variant por omision, a menos que se especifiquen]

[por otro lado]... podrias comentar el 'por que' esperas que pudieran darse errores al asignar un nombre a una hoja 'nueva' ?

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

__ el codigo expuesto __
Sub NuevaHoja(HojaNueva As String, Titulos As Variant)
On Error GoTo salir
Worksheets.Add after:=Worksheets("Libros seleccionados")
ActiveSheet.Name = HojaNueva
On Error GoTo 0
Dim colT As Long, LetraT As Variant
colT = UBound(Titulos)
LetraT = Array("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", _
"k", "l", "m", "n", "o", "p", "q", "r", "s")
With Worksheets(HojaNueva)
With .Range("a1:" & LetraT(colT) & "1")
.Value = Titulos
With .Font
.Bold = True
.Size = 10
End With
.HorizontalAlignment = xlCenter
.Interior.ColorIndex = 3
End With
End With
salir:
If ActiveSheet.Name <> HojaNueva Then ActiveSheet.Delete
End Sub
Respuesta Responder a este mensaje
#3 klomkbock
03/06/2006 - 23:36 | Informe spam
Hola KL, como siempre muchas gracias por tu ayuda. En cuanto acabe de
responderos lo incorporo al codigo.

Unsaludo y hasta pronto.
Ivan
Respuesta Responder a este mensaje
#4 klomkbock
04/06/2006 - 00:21 | Informe spam
Hola Hector Miguel, de nuevo muchas gracias.

Se trata de crear una hoja para almacenar los registros nuevos,
modificados y/o eliminados (una hoja diferente para cada tipo de accion y
que se cearia solo en caso necesario) que al cerrar el libro se
eliminarian, previo traspaso a un libro-almacen de registros nuevos,
modificados y/o añadidos que haria la funcion de copia de seguridad para
poder restaurarlos en caso necesario (en el caso de los registros nuevos
seria posiblemente hasta que se actualizara el archivo de otros usuarios
via correo o similar). El tratamiento de errores es para evitar el nº9
cuando la hoja ya se ha creado en una accion con otro registro. Se trat
del archivo "Libreria" que ya conoces.

He estado intentando otra forma que en otro codigo parecia funcionar bien
(y que muestro a continuacion), pero en este a veces me da el error 1008
(cuando no otros) y al final, cansado de probar he optado por esta via que
de momento parece funcionar.

Por otro lado, en cuanto a la explicacion sobre function, creo entender
que la diferencia con sub basicamente radica en: a favor de la primera,
aparte de su uso directo como funcion en la hoja, su mayor velocidad (al
parecer no axcesiva) y en contra su incapacidad para realizar ciertas
acciones (formato, etc). No se si me equivoco, pero me da la impresion de
que en codigo, resulta mas practico el uso de proc. sub, dado que tambien
se le pueden pasar argumentos y parecen mas versatiles. ¿Estoy diciendo
una burrada?

Bueno, aqui expongo el codigo(este es para las modificaciones) con el que
me daba los errores mencionados (como comentario) y previamente el actual
que usa el pro. NuevaHoja:

Private Sub CopiaLibroModificado()
Dim ModificadoEl, TitulosN, DatosN
Dim filM As Long, LibroAct As String
If ActiveSheet.Name = "Listado" Then
LibroAct = "Listado"
ElseIf ActiveSheet.Name = "Libros seleccionados" Then
LibroAct = "Libros seleccionados"
End If
TitulosN = Array("Titulo", "Autor", "Genero", "Tema", "Pais", _
"Lo tiene", "Apellido autor", "Observaciones", "Editorial", _
"Fecha edicion", "NºFicha", "Nombre autor", "Modificado por", _
"El dia", "Motivo")
Call NuevaHoja("Libros modificados", TitulosN)
ModificadoEl = Now
With Worksheets("Libros modificados")
filM = .Range("a65536").End(xlUp).Offset(1, 0).Row
.Range("a" & filM & ":n" & filM).Value = vrtDatos
.Range("m" & filM) = Hermano(iH)
.Range("n" & filM) = ModificadoEl
.Visible = True 'False
FormatoHojaActiva2
End With
Worksheets(LibroAct).Activate
End Sub


'Private Sub CopiaLibroModificado()
' Dim ModificadoEl, filC As Long, LibroAct As String
' If ActiveSheet.Name = "Listado" Then
' LibroAct = "Listado"
' ElseIf ActiveSheet.Name = "Libros seleccionados" Then
' LibroAct = "Libros seleccionados"
' End If
' ActiveCell.EntireRow.Copy
' On Error GoTo NoHayHoja
' Worksheets("Libros modificados").Activate
'''Las variables Hermano, y xCop las obtiene del proc llamante.
' With Worksheets("Libros modificados")
' filC = .Range("a65536").End(xlUp).Offset(1, 0).Row
' .Range("a" & filC).PasteSpecial xlPasteValues
' .Range("m" & filC) = Hermano(iH)
' .Range("n" & filC) = ModificadoEl
' .Range("o" & filC) = xCop
' .Visible = True 'False
' .Activate
' FormatoHojaActiva2
' End With
' Worksheets(LibroAct).Activate
'NoHayHoja:
' If Err.Number = 9 Then
' Worksheets.Add after:=Worksheets("Libros seleccionados")
' ActiveSheet.Name = "Libros modificados"
' With Worksheets("Libros modificados")
' With .Range("a1:o1")
' .Value = Array("Titulo", "Autor", "Genero", "Tema", "Pais", _
' "Lo tiene", "Apellido autor", "Observaciones", "Editorial", _
' "Fecha edicion", "NºFicha", "Nombre autor", "Modificado por",
_
' "El dia", "Motivo modificación")
' With .Font
' .Bold = True
' .Size = 10
' End With
' .HorizontalAlignment = xlCenter
' .Interior.ColorIndex = 3
' End With
' End With
' Resume
' End If
'End Sub

Un saludo y hasta pronto
Ivan
Respuesta Responder a este mensaje
#5 Héctor Miguel
04/06/2006 - 04:14 | Informe spam
hola, Ivan !

... El tratamiento de errores es para evitar... cuando la hoja ya se ha creado en una accion con otro registro
... otra forma que en otro codigo parecia funcionar bien... pero en este a veces me da el error 1008 (cuando no otros)
... en cuanto a la explicacion sobre function, creo entender que la diferencia con sub basicamente radica en:
a favor de la primera, aparte de su uso directo como funcion en la hoja, su mayor velocidad (al parecer no axcesiva)
y en contra su incapacidad para realizar ciertas acciones (formato, etc).
No se si me equivoco, pero me da la impresion de que en codigo, resulta mas practico el uso de proc. sub
dado que tambien se le pueden pasar argumentos y parecen mas versatiles. Estoy diciendo una burrada?



ninguna 'burrada' solo una aclaracion: en cuanto a la 'incapacidad' [de un procedimiento func] para aplicar formatos etc.
SOLO 'aplica' cuando el procedimiento function esta 'planeado' para ser usado EN 'llamadas' en formulas en hojas de calculo
[como las funciones 'nativas' o integradas del excel, como suma(...), promedio(...), etc.]
NO aplica cuando 'la funcion' sirve al proposito de otras llamadas -> por codigo ;)

[ejemplo]: en el caso del procedimiento que expones en el primer mensaje...
1) podrias 'cambiarlo' a un procedimiento Function +/- como sigue:
de -> Sub NuevaHoja(HojaNueva As String, Titulos As Variant)
a -> Function NuevaHoja(ByVal HojaNueva As String, ByVal Titulos As Variant)
2) habria que 'cuidar' lo siguiente:
a) un procedimiento Sub que 'toma' argumentos... NO puede ser 'llamado' desde la interfase del usuario [p.e. con alt+F8]
b) un procedimiento Function SI se podria [intentar a] 'llamarlo' [p.e. desde alguna formula en celdas en hojas de calculo]
[aunque como en este caso... 'la funcion' no funcionaria] :D
c) o... haces el procedimiento function 'Private' [con lo cual solo seria 'transparente' para codigos de su mismo modulo]
o... declaras el modulo completo como Option Private Module [en el area de las declaraciones]

para no salirme -demasiado- 'del tema'... si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida