2017-05-29 42 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