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 !

... codigo que guarda un archivo, pero necesito que cuando vuelva a guardar ese archivo
... me pregunte que si deseo reemplazar, al decirle que no me ejecute otro proceso (macro).
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 deteccion de errores.
On Error Resume Next ' Retarda deteccion de errores.
ControlError: ' Rutina de control de errores.
Select Case Err.Number ' Evalua el numero de error.
Case 55 ' Error "Archivo ya esta abierto".
Close #1 ' Cierra el archivo abierto.
Case Else
' Puede incluir aqui otras situaciones...
End Select
'Resume ' Continuar ejecucion en la linea que causo el error.
End Sub



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.
Respuesta Responder a este mensaje
#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ó:

hola, DANILO !

> ... codigo que guarda un archivo, pero necesito que cuando vuelva a guardar ese archivo
> ... me pregunte que si deseo reemplazar, al decirle que no me ejecute otro proceso (macro).
> 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 deteccion de errores.
> On Error Resume Next ' Retarda deteccion de errores.
> ControlError: ' Rutina de control de errores.
> Select Case Err.Number ' Evalua el numero de error.
> Case 55 ' Error "Archivo ya esta abierto".
> Close #1 ' Cierra el archivo abierto.
> Case Else
> ' Puede incluir aqui otras situaciones...
> End Select
> 'Resume ' Continuar ejecucion en la linea que causo el error.
> End Sub

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.



Respuesta Responder a este mensaje
#3 Héctor Miguel
15/10/2005 - 12:10 | Informe spam
hola, DANILO !

... ON ERROR GOTO no lo manejo muy bien... lo saque de la ayuda de visual basic.
... lo utilizo para guardar una archivo en una ruta especifica... en ocasiones se vuelve a guardar el mismo archivo y
... dice que: YA EXISTE UN ARCHIVO CON EL MISMO NOMBRE DESEA REEMPLAZAR EL ARCHIVO EXISTENTE?.
... necesito.. que si se da click en no me ejecute otro codigo.



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.
Respuesta Responder a este mensaje
#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 :-)
Respuesta Responder a este mensaje
#5 Héctor Miguel
18/10/2005 - 10:59 | Informe spam
hola, DANILO !

... trabajo sobre una plantilla y esta es la contiene los codigos y las macros
... en un solo dia se pueden guardar hasta 100 archivos... se guardan con un codigo
... a veces hay que repetir algun archivo... y al... guardar con el mismo codigo me dice que si deseo REEMPLAZAR
... pero no se puede reemplazar ningun archivo
... para guardar los archivos como texto desde un formulario, me abre otra hoja que es la que contiene el archivo plano
... en el momento que saca el cuadro de mensaje para reemplazar... y se le da clic en NO me deja abierta esta hoja
necesito... que al... dar clic en NO me me cierre dicha hoja para volverlo a guardar pero con otro nombre de archivo.



-> 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 ' ...
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida