2017-05-29 47 views
2

我發現了一箇舊腳本在線關閉文檔而不保存更改,然後重新打開該文檔:宏還原更改因爲保存

Sub RevertFile() 
    wkname = ActiveWorkbook.Path & "\" & ActiveWorkbook.Name 
    ActiveWorkbook.Close Savechanges:=False 
    Workbooks.Open Filename:=wkname 
End Sub 

我想這一點,因爲你不能「撤銷」的變化由運行宏造成的。但是,它似乎不適用於MS Office v1609。首先,文檔在關閉後不會重新打開。其次,修改當我希望他們不成爲時保存。我該如何重寫這個腳本才能使其工作?謝謝。

這是我正在使用的另一個子程序。

Sub FixPlatforms() 
'PURPOSE: Find & Replace a list of text/values throughout entire workbook 
'SOURCE: www.TheSpreadsheetGuru.com/the-code-vault 

Dim sht As Worksheet 
Dim platList As Variant 
Dim x As Long 

platList = Array _ 
(_ 
    "PS4", "PlayStation 4", _ 
    "PS3", "PlayStation 3", _ 
    "PS2", "PlayStation 2", _ 
    "PSV", "PlayStation Vita", _ 
    "PSP", "PlayStation Portable", _ 
    "WIN", "Microsoft Windows", _ 
    "SNES", "Super Nintendo Entertainment System" _ 
) 


'Loop through each item in Array lists 
    For x = 1 To UBound(platList) Step 2 
    'Loop through each worksheet in ActiveWorkbook 
     For Each sht In ActiveWorkbook.Worksheets 
     sht.Cells.Replace What:=platList(x), Replacement:=platList(x - 1), _ 
      LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, _ 
      SearchFormat:=False, ReplaceFormat:=False 
     Next sht 

    Next x 

End Sub 

它有什麼問題嗎?

+1

您的子過程是否保存工作簿?該代碼沒有理由保存更改。 – Jeeped

+0

我用另一個例程更新了我的問題。 – posfan12

+0

我沒有看到任何錯誤,雖然我會顛倒循環的順序,並循環通過外部工作表和內部數組(或使用工作表數組來進行全局搜索和替換)。 – Jeeped

回答

3

您不應該在任何情況下關閉工作簿。試圖打開已打開的工作簿會生成以下內容。

enter image description here

添加application.displayalerts = false應足以避免確認。

Option Explicit 

Sub RevertFile() 
    Dim wkname As String 
    wkname = ActiveWorkbook.Path & "\" & ActiveWorkbook.Name 
    Application.DisplayAlerts = False 
    Workbooks.Open Filename:=wkname 
    Application.DisplayAlerts = True 
End Sub