Сохранить копию листа и отозвать все изменения в оригинале - PullRequest
0 голосов
/ 14 сентября 2011

У меня есть макрос, который изменяет рабочую книгу, в которой он выполняется, и я хочу, чтобы этот макрос сохранил копию рабочей книги в месте (предпочтительно указанном пользователем), отменил все изменения в книге (так, чтобы она была в исходном еще раз) и закройте рабочую книгу.

К сожалению, я не могу найти никакой информации об отзыве и закрытии ... Сохранение копии довольно легко, но как сделать остальную часть этих вещей?

Ответы [ 3 ]

3 голосов
/ 14 сентября 2011

Я бы согласился с большинством ответов brettdj (особенно в том, что вы должны сначала сохранить файл). Однако функция BrowseForFolder не нужна. Вместо этого вы можете использовать встроенный браузер папок Windows в версиях Excel

, выпущенных после 2002 года.
Sub Example()

Dim strFolder as String

Application.DisplayAlerts = False
Application.ScreenUpdating = False

ThisWorkbook.Save

With Application.FileDialog(msoFileDialogFolderPicker)
.Show
    If .SelectedItems.Count = 1 Then 
    strFolder = .SelectedItems(1)
    Else
    'Quit/Show message asking to specify location
    End If
End With

'Do everything else

ThisWorkbook.SaveAs strFolder & "\" & ThisWorkbook.Name
ThisWorkbook.Close (False)

Application.DisplayAlerts = True
Application.ScreenUpdating = True

End Sub

(Ложь) при закрытии книги - это сокращение от SaveChanges: = Ложь, и может отменить необходимость отключения оповещений

Кроме того, если вы хотите внести изменения в другую книгу, отличную от той, которая содержит код, вам может потребоваться помощь с использованием нескольких файлов Excel . Основным уроком будет то, что вы можете заменить ActiveWorkbook на ThisWorkbook или определить рабочую книгу при открытии

1 голос
/ 14 сентября 2011

Необходим ли сложный отзыв - почему бы вам просто не сохранить рабочую книгу в том виде, в каком она была в начале кода (до модов), внести изменения, сохранить файл изменений или закрыть Excel?

Обновление [Пример кода, который работает с книгой, в которой он размещен, , будьте осторожны, он сохранит файл и закроет его в этом условии ]

Sub SimpleSample()
Dim strFolder As String
With Application
    .DisplayAlerts = False
    .ScreenUpdating = False
End With
'save current file in the location it was opened from
ThisWorkbook.Save

'make your mods here
'stuff

'get user directory
strFolder = BrowseForFolder
'save the modified workbook to the nuser selected folder (overwrite's any early version of the same name if they exist)
ThisWorkbook.SaveAs strFolder & "\" & ThisWorkbook.Name
'close the file
ThisWorkbook.Close
With Application
    .DisplayAlerts = True
    .ScreenUpdating = True
End With
End Sub


Function BrowseForFolder(Optional OpenAt As Variant) As Variant
' Ken Puls, http://www.vbaexpress.com/kb/getarticle.php?kb_id=284
'Function purpose:  To Browser for a user selected folder.
'If the "OpenAt" path is provided, open the browser at that directory
'NOTE:  If invalid, it will open at the Desktop level
Dim ShellApp As Object

'Create a file browser window at the default folder
Set ShellApp = CreateObject("Shell.Application"). _
               BrowseForFolder(0, "Please choose a folder", 0, OpenAt)

'Set the folder to that selected.  (On error in case cancelled)
On Error Resume Next
BrowseForFolder = ShellApp.self.Path
On Error GoTo 0

'Destroy the Shell Application
Set ShellApp = Nothing

'Check for invalid or non-entries and send to the Invalid error
'handler if found
'Valid selections can begin L: (where L is a letter) or
'\\ (as in \\servername\sharename.  All others are invalid
Select Case Mid(BrowseForFolder, 2, 1)
Case Is = ":"
    If Left(BrowseForFolder, 1) = ":" Then GoTo Invalid
Case Is = "\"
    If Not Left(BrowseForFolder, 1) = "\" Then GoTo Invalid
Case Else
    GoTo Invalid
End Select

Exit Function

Invalid:

'If it was determined that the selection was invalid, set to False
 BrowseForFolder = False
  End Function
0 голосов
/ 14 сентября 2011

Когда вы закрываете книгу, у вас есть несколько вариантов:

ActiveWorkbook.Close False 
' closes the active workbook without saving any changes

ActiveWorkbook.Close True 
' closes the active workbook and saves any changes

ActiveWorkbook.Close 
' closes the active workbook and lets the user decide if 
' changes are to be saved or not

Полагаю, первый подойдет вам и подойдет к вашему делу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...