Ayuda con codigo

14/10/2005 - 07:00 por DANILO ARANGO | Informe spam
Hola Foro.

ALguien me podria ayudar con lo siguiente:
Tengo un codigo que guarda un archivo, pero necesito que cuando vuelva a
guardar ese archivo y me pregunte que si deseo reemplazar, al decirle que no
me ejecute otro proceso (macro).

De antemano muchas gracias


Sub guardar_archivo()
On Error GoTo ControlError ' Activa la rutina de control de errores.

ActiveWorkbook.SaveAs Filename:="C:\Excel\ppombrearchivo",
FileFormat:= _
xlNormal, CreateBackup:=False

On Error GoTo 0 ' Desactiva la detección de errores.
On Error Resume Next ' Retarda detección de errores.
ControlError: ' Rutina de control de errores.
Select Case Err.Number ' Evalúa el número de error.
Case 55 ' Error "Archivo ya está abierto".
Close #1 ' Cierra el archivo abierto.
Case Else
' Puede incluir aquí otras situaciones...
End Select
'Resume ' Continuar ejecución en la línea que
' causó el error.
End Sub

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
14/10/2005 - 07:54 | Informe spam
hola, DANILO !

Mostrar la cita
1) no me queda muy claro por que estas combinando un 'SaveAs' {+} 'FileFormat:=xlNormal'... con un 'Close #1'
a menos que hayas abierto con una funcion FreeFile y Open "archivo_excel" For ... As #1 -> un archivo de excel<- ???

2) podrias probar con alguna 'esructura' de codigo +/- como la siguiente [no se donde la debas incluir] :))
[ ... otras lineas de tu codigo ...]
If Not ActiveWorkbook.Saved Then
Select Case MsgBox( _
"¿Desea guardar los cambios efectuados en '" & _
ActiveWorkbook.Name & "'?", vbYesNoCancel + vbQuestion)
Case vbYes
' Aqui las instrucciones si decides que 'SI' ... '
Case vbNo
' Aqui las instrucciones si decides que 'NO' ... '
Case vbCancel
' Aqui las instrucciones si decides 'CANCELAR' ... '
End Select
End If
[... otras lineas de tu codigo ...]

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
#2 DANILO ARANGO
15/10/2005 - 03:53 | Informe spam
Hola hm
El codigo de ON ERROR GOTO no lo manejo muy bien, este codigo lo saque de la
ayuda de visual basic.

Este codigo lo utilizo para guardar una archivo en una ruta especifica, pero
en ocasiones se vuelve a guardar el mismo archivo y me saca el cuadro de
dialogo donde dice que: YA EXISTE UN ARCHIVO CON EL MISMO NOMBRE ¿DESEA
REEMPLAZAR EL ARCHIVO EXISTENTE?.

Lo que necesito es que si se da click en no me ejecute otro codigo.

Gracias por tu ayuda


"Héctor Miguel" escribió:

Mostrar la cita
#3 Héctor Miguel
15/10/2005 - 12:10 | Informe spam
hola, DANILO !

Mostrar la cita
1) me da la impresion de que -siempre y solo- utilizas el 'SaveAs' -incluso- para guardar archivos 'ya guardados' -?-
[lo cual, no estoy muy seguro de que sea -siempre- la 'mejor opcion'] :))

2) -segun yo- el 'SaveAs' debieras utilizarlo SOLO cuando un archivo nuevo no ha sido guardado aun -?-
y en las grabaciones posteriores, utilizar un 'simple, sencillo y directo'... ->Save<- ;)
[a menos que 'evectivamente' necesites ->reemplazar<- un archivo existente con alguna version 'mejorada'] -?-

comentas si 'van por ahi los tiros'... [posiblemente podrias ahorrarte instrucciones para manejo de 'errores'] ;)
saludos,
hector.
#4 DANILO ARANGO
18/10/2005 - 07:06 | Informe spam
Hola HM

Lo que pasa es que trabajo sobre una plantilla y esta es la contiene los
codigos y las macros, en un solo dia se pueden guardar hasta 100 archivos
estos se guardan con un codigo, pero aveces hay que repetir algun archivo de
estos y al momento de guardar con el mismo codigo me dice que si deseo
REEMPLAZAR, pero no se puede reemplazar ningun archivo.

El codigo que tengo para guardar los archivos como texto desde un
formulario, me abre otra hoja que es la que contiene el archivo plano, pero
en el momento que saca el cuadro de mensaje para reemplazar el archivo y se
le da clic en NO me deja abierta esta hoja, lo que necesito es que al momento
de dar clic en NO me me cierre dicha hoja para volverlo a guardar pero con
otro nombre de archivo.

Gracias por tu ayudad.
Saludos
Danilo :-)
#5 Héctor Miguel
18/10/2005 - 10:59 | Informe spam
hola, DANILO !

Mostrar la cita
-> no me queda muy claro si el libro que se queda abierto YA es un .xls o sigue siendo un archivo de texto plano -?-
como [al parecer] se trata de una 'accion repetitiva'... te paso algunos 'tips' al final :)

comentas [si hubiera] detalles 'en el tintero' ?
saludos,
hector.

1) puedes usar una instruccion [p.e.] If Dir("Ruta y\Nombre del archvo.EXT") <> "" Then ' ... [el archivo YA existe]

2) puedes definir una funcion que se encargue de averiguar si un libro ya esta abierto en la sesion [p.e.]
en un modulo de codigo 'normal' ==
a) si NO se trata de archivos 'en red', o ya son archivos de excel, o...
Function EsArchivoAbierto(ByVal Nombre As String) As Boolean
Dim Libro As Workbook
On Error Resume Next
Set Libro = Workbooks(Nombre)
EsArchivoAbierto = (Not Libro Is Nothing)
Set Libro = Nothing
End Function

b) si SON archivos 'en red'...
Function EsArchivoAbierto(Nombre As String) As Boolean
Dim Archivo As Byte
Archivo = FreeFile
On Error Resume Next
Open Nombre For Binary Access Read Write Lock Read Write As #Archivo
Close #Archivo
If Err.Number = 0 Then Exit Function
EsArchivoAbierto = True
Err.Clear
End Function

=> la forma de 'llamar' a esta funcion [una de las dos] es +/- como sigue...
If [Not] EsArchivoAbierto("Nombre del archivo.EXT") Then ' ...
Ads by Google
Search Busqueda sugerida