2012-07-19 9 views
5

Ho il codice che estrae il percorso completo di un file, meno l'estensione, e sto cercando di modificarlo per memorizzare solo il nome del file, ancora una volta senza l'estensione.Come si ottiene il nome file corrente di un documento di Word, senza estensione o percorso completo, utilizzando 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 

Questa mostra C:\Users\test, e il nome del documento è test.docm. Come posso modificare questo per visualizzare solo il nome file? Devo dividere la stringa lungo \ ed estrarre l'ultima parte?

risposta

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 

Inizialmente ho postato questo senza il se, quale errore se il file non era mai stato salvato, o non aveva estensione.

1

Come io non sono riuscito a scrivere il codice utilizzando FSO (non è solo per VB, vero?), ho scritto questo, abbastanza autoesplicativo :)

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

È possibile utilizzare FSO con VBA. –

0

Yeish, io non lo farei così!

In via ipotetica, si ha un'intera cartella del valore di parola e non sono necessarie le estensioni, si vogliono solo i nomi. Che cosa si dovrebbe fare è andare attraverso la parola documenti e li analizza attraverso questa funzione con il tipo di estensione che desideri venga rimossa dal nome del file

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

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

removeExtension = documentWithoutExtension 

End Function 
0

Questo funziona per me.

Sub ShowFilename() 
MsgBox ActiveWindow.Parent 
End Sub