Visual Basic para Aplicaciones - Macro word. Guardar un documento nuevo

Life is soft - evento anual de software empresarial
 
Vista:
sin imagen de perfil
Val: 26
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Macro word. Guardar un documento nuevo

Publicado por Happy1 (10 intervenciones) el 17/11/2020 19:03:41
Hola a todos.

Tengo una macro que guarda un documento nuevo poniendo el nombre de las primeras palabras de la primera línea y lo guarda en una carpeta que le he indicado:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Sub GuardarArchivo()
'
' GuardarArchivo Macro
'
Dim rngFilename As Range
Dim strFileName As String
Set rngFilename = ActiveDocument.Range
With rngFilename
.End = .Start
.MoveEnd wdWord, 4
strFileName = .Text
End With
ActiveDocument.SaveAs "C:\Users\Alberto\Desktop\Pruebas\" & strFileName
 
End Sub

Lo que quiero es que si por error coge el nombre de un archivo que ya existe que no lo machaque, que me pueda salir un mensaje de que ya existe el archivo con ese nombre. ¿Me podrían ayudar?

Un saludo y gracias a todos. Cuídense
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Norberto
Val: 82
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Macro word. Guardar un documento nuevo

Publicado por Norberto (29 intervenciones) el 18/11/2020 14:42:00
Hola:

Después de obtener el nombre del archivo deseado del documento y suponiendo que esté en una variable de nombre strFileName, haces lo siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
...
    Dim blGuardar as Boolean
...
    If Dir("C:\Users\Alberto\Desktop\Pruebas\" & strFileName) = "" Then 'El archivo no existe
        blGuardar = True
    Else
        If MsgBox("El archivo ya existe. ¿Deseas reemplazarlo?", vbYesNo) = vbYes Then 'El archivo existe y deseamos reemplazarlo
            blGuardar = True
        Else
            blGuardar = False
        End If
    End If
    If blGuardar Then
        ActiveDocument.SaveAs "C:\Users\Alberto\Desktop\Pruebas\" & strFileName
    End If
...

Un saludo,

Norberto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 26
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Macro word. Guardar un documento nuevo

Publicado por Happy1 (10 intervenciones) el 18/11/2020 17:29:01
Muchas gracias Norberto.

Estoy haciendo algo mal, entiendo que tengo que añadir lo que me dices a mi macro, pero no sé si lo estoy colocando en el lugar correcto. La cuestión es que se ejecuta la macro correctamente pero si ya hay un archivo con el mismo nombre en la carpeta la macro lo machaca directamente y necesito que me pregunte para no perder el archivo que ya tengo.

Muchas gracias por tu ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.163
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Macro word. Guardar un documento nuevo

Publicado por Antoni Masana (392 intervenciones) el 18/11/2020 18:44:38
Te compongo la macro original y el cambio:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Sub GuardarArchivo()
'
' GuardarArchivo Macro
'
    Dim rngFilename As Range
    Dim strFileName As String
    Set rngFilename = ActiveDocument.Range
    With rngFilename
        .End = .Start
        .MoveEnd wdWord, 4
        strFileName = .Text
    End With
 
    ' ---&--- Esta es la parte de código de Norberto
 
     If Dir("C:\Users\Alberto\Desktop\Pruebas\" & strFileName) = "" Then 'El archivo no existe
        blGuardar = True
    Else
        If MsgBox("El archivo ya existe. ¿Deseas reemplazarlo?", vbYesNo) = vbYes Then 'El archivo existe y deseamos reemplazarlo
            blGuardar = True
        Else
            blGuardar = False
        End If
    End If
    If blGuardar Then
        ActiveDocument.SaveAs "C:\Users\Alberto\Desktop\Pruebas\" & strFileName
    End If
End Sub

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 26
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Macro word. Guardar un documento nuevo

Publicado por Happy1 (10 intervenciones) el 18/11/2020 18:56:37
Pero si hay un archivo en la carpeta con el mismo nombre lo machaca sin preguntar. Lo que necesito es que si no existe archivo con el mismo nombre lo guarde sin más y si existe que pregunte antes de guardarlo y perder el que ya tenía.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Norberto
Val: 82
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Macro word. Guardar un documento nuevo

Publicado por Norberto (29 intervenciones) el 20/11/2020 14:10:29
Hola de nuevo:

Si añades el código que te puse yo tal y como te indica Antoni, no debería de pasar ya que comprueba si existe mediante la función Dir(..).

Un saludo,

Norberto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.163
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Macro word. Guardar un documento nuevo

Publicado por Antoni Masana (392 intervenciones) el 20/11/2020 14:23:30
Ya he visto porque no funciona. La primera vez no lo revise en detalle

Faltan un par de cosa:

-- Si ejecutas la macro con menos de 4 palabras da un error. Arreglado
-- Para que verifique si existe el libro se tiene que poner la extensión. En vi versión de Word pone la extensión .docx Cambiala si la tuya es diferente.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Sub GuardarArchivo()
'
' GuardarArchivo Macro
'
    Dim rngFilename As Range
    Dim strFileName As String
    Set rngFilename = ActiveDocument.Range
    With rngFilename
        .End = .Start
        .MoveEnd wdWord, 4
        strFileName = .Text
    End With
 
    ' ---&--- Esta lines es valida solo si ejecutas la macro con menos de 4 palabras en el primer párrafo.
 
    If Asc(Right(strFileName, 1)) = 13 Then strFileName = Left(strFileName, Len(strFileName) - 1)
 
    ' ---&--- Aqui añado la extensión para verificar si existe
 
    strFileName = strFileName + ".docx"
 
    ' ---&--- Esta es la parte de código de Norberto
 
    If Dir("C:\Users\Alberto\Desktop\Pruebas\" & strFileName) = "" Then 'El archivo no existe
        blGuardar = True
    Else
        If MsgBox("El archivo ya existe. ¿Deseas reemplazarlo?", vbYesNo) = vbYes Then 'El archivo existe y deseamos reemplazarlo
            blGuardar = True
        Else
            blGuardar = False
        End If
    End If
    If blGuardar Then
        ActiveDocument.SaveAs "C:\Users\Alberto\Desktop\Pruebas\" & strFileName
    End If
End Sub

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 26
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Macro word. Guardar un documento nuevo

Publicado por Happy1 (10 intervenciones) el 20/11/2020 21:55:34
Muchísimas gracias Antoni, funciona perfectamente. No sabes el favor que me hiciste.

Un saludo y cuídate
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar