2016-11-22 86 views
0

下面是我用於重命名文件的代碼。它執行SaveAs然後刪除原始文件。這需要在不同類型的工作簿上運行:一些擴展名爲.xls,另一些擴展名爲.xlsx。如果它具有.xls擴展名,我需要強制它以某種方式具有.xlsx擴展名。Excel VBA - 另存爲.xlsx擴展名

除了通過在彈出的InputBox的空白末尾手動鍵入「x」,我該怎麼做?

或者也許有不同的解決方案來解決這個問題?我的目標是強制InputBox顯示帶有.xlsx擴展名的當前文件名,而不管當前是什麼。

Sub RenameFile() 
Dim myValue As Variant 
Dim thisWb As Workbook 
Set thisWb = ActiveWorkbook 

MyOldName2 = ActiveWorkbook.Name 
MyOldName = ActiveWorkbook.FullName 

MyNewName = InputBox("Do you want to rename this file?", "File Name", _ 
ActiveWorkbook.Name) 
If MyNewName = vbNullString Then Exit Sub 
If MyOldName2 = MyNewName Then Exit Sub 
Application.DisplayAlerts = False 
ActiveWorkbook.SaveAs Filename:=thisWb.Path & "\" & MyNewName, _ 
FileFormat:=51 

Kill MyOldName 
End Sub 
+0

「我的目標是迫使的InputBox顯示用的.xlsx擴展不管是什麼目前是當前文件名」。多麼奇怪的目標。你的意思是你的目標是強制文件以'.xlsx'擴展名保存,不管目前有什麼擴展名? – Miqi180

+0

是的。我知道它總是會是.xls或.xlsx。許多條件格式化將被應用到它,所以擴展名需要是.xlsx。我也迫使FileFormat爲51,使其成爲「現代」Excel工作簿。 – Robby

回答

1

如果新的擴展總是要.xlsx,爲什麼不離開延伸出完全的輸入框:

Dim fso As New Scripting.FileSystemObject 
MyNewName = InputBox("Do you want to rename this file?", "File Name", _ 
    fso.GetBaseName(ActiveWorkbook.Name)) & ".xlsx" 

注意,這需要一個refernece微軟腳本運行。

+0

我昨天嘗試過這樣的事情,但沒有奏效。我確實得到了這個工作,但我必須在最後一個括號之前加上'&「.xlsx」'。謝謝!我試圖編輯你的文章,但它不會讓我。 – Robby

+1

是,把'&「的.xlsx」'之前的支架將其添加到默認的輸入 - 我的意思是,你並不真的需要在輸入框中輸入擴展名。無論哪種方式應該工作。 – bobajob

+0

哦。我現在明白了。無論哪種方式確實有效,但我確實需要輸入框中的.xlsx。再次感謝! – Robby

0

是否要在MsgBox或之後顯示擴展名?以下代碼將強制擴展名更改爲您指定的任何類型。只需添加您想要處理的其他轉換的代碼即可。如果您要在Msgbox中顯示新的擴展名,請複製我添加並放置在MsgBox之前的代碼。如果你想'保證'新的擴展,你需要保留在Msgbox之後的代碼,以防用戶推翻你的建議。

Sub RenameFile() 
Dim myValue As Variant 
Dim thisWb As Workbook 
Dim iOld As Integer 
Dim iNew As Integer 
Dim iType As Integer 

    Set thisWb = ActiveWorkbook 
    Dim MyOldName2, MyOldName, MyNewName As String 

    MyOldName2 = ActiveWorkbook.Name 
    MyOldName = ActiveWorkbook.FullName 

    MyNewName = InputBox("Do you want to rename this file?", "File Name", _ 
    ActiveWorkbook.Name) 
    If MyNewName = vbNullString Then Exit Sub 
    If MyOldName2 = MyNewName Then Exit Sub 
    iOld = InStrRev(MyOldName, ".") 
    iNew = InStrRev(MyNewName, ".") 
    If LCase(Mid(MyOldName, iOld)) = ".xls" Then 
     MyNewName = Left(MyNewName, iNew - 1) & ".xlsx" 
     iType = 51 
    ElseIf LCase(Mid(MyOldName, iOld + 1)) = ".YYYY" Then   ' Add lines as needed for other types 
     MyNewName = Left(MyNewName, iNew - 1) & ".ZZZZ"    ' Must change type to match desired output type 
     iType = 9999 
    Else 
     MsgBox "Add code to handle extension name of '" & LCase(Mid(MyOldName, iOld)) & "'", vbOKOnly, "Add Code" 
     Exit Sub 
    End If 
    Application.DisplayAlerts = False 
    ActiveWorkbook.SaveAs Filename:=thisWb.Path & "\" & MyNewName, FileFormat:=iType 

    Kill MyOldName 
End Sub 
相關問題