2012-07-19 11 views
5

tengo código que extrae la ruta completa de un archivo, menos la extensión, y yo estoy tratando de modificarlo para almacenar sólo el nombre del archivo, una vez más sin la extensión.¿Cómo obtengo el nombre de archivo actual de un documento de Word, sin la extensión o la ruta completa, usando una macro?

Sub ShowFilename() 

Dim pathName As String 
With ActiveDocument 
If Len(.Path) = 0 Then 
.Save 
End If 
If Right(.Name, 1) = "x" Then 
pathName = Left$(.FullName, (Len(.FullName) - 5)) 
Else 
pathName = Left$(.FullName, (Len(.FullName) - 4)) 
End If 
End With 
MsgBox pathName 

End Sub 

Esta muestra C:\Users\test, y el nombre del documento es test.docm. ¿Cómo puedo modificar esto para mostrar solo el nombre del archivo? ¿Debo dividir la cadena a lo largo de \ y extraer la última parte?

Respuesta

6
Sub ShowFilename() 
Dim pathName As String 
Dim o As Document 
Set o = ActiveDocument 
If InStrRev(o.Name, ".") <> 0 Then 
    MsgBox Left(o.Name, InStrRev(o.Name, ".") - 1) 
Else 
    MsgBox o.Name 
End If 
End Sub 

Inicialmente publiqué esto sin el if, que sería un error si el archivo nunca se hubiera guardado o no tuviera extensión.

1

Como yo no era capaz de escribir código usando FSO (no es sólo para VB, ¿verdad?), escribí éste, bastante explica por sí mismo :)

Dim oldFilename As String 

oldFilename = ActiveDocument.Name 
If Right(oldFilename, 5) = ".docx" Then 
    MsgBox ("subtract .docx") 
    oldFilename = Left(oldFilename, Len(oldFilename) - 5) 
ElseIf Right(oldFilename, 4) = ".doc" Then 
    MsgBox ("subtract .doc") 
    oldFilename = Left(oldFilename, Len(oldFilename) - 4) 
Else 
    MsgBox ("no extension yet") 
End If 
+0

Puede usar FSO con VBA. –

0

yeish, yo no lo haría de esa manera!

Hipotéticamente, que tiene en su conjunto carpetas valor de la palabra y que no necesita las extensiones, lo que desea los nombres. Lo que se puede hacer es ir a través de los documentos de Word y analizar a través de esta función con el tipo de extensión que desee eliminar de nombre de archivo

Function removeExtension(myDoc as Document, extension as String) 
Dim documentWithoutExtension as String 

documentWithoutExtension = replace(myDoc.Name, extension, "") 

removeExtension = documentWithoutExtension 

End Function 
0

Esta funciona para mí.

Sub ShowFilename() 
MsgBox ActiveWindow.Parent 
End Sub 
Cuestiones relacionadas