2014-11-21 24 views
5
  1. W VSTO Worda mamy DocumentBeforeSave wydarzenie, które nazywa się tuż po „Chcesz zapisać zmiany” dialog i mogę łatwo anulować standardowe okno dialogowe Zapisz i pokaż moje własne.Nie można pułapka po „Chcesz zapisać zmiany” dialog w programie Excel

  2. Ale w programie Excel VSTO WorkbookBeforeSave jest wywoływany po zamknięciu okna dialogowego Zapisz i powoduje, że moje własne okno dialogowe zapisu jest wyświetlane po wbudowanym. Mogę użyć zdarzenia WorkbookBeforeClose, ale powinienem pokazać własne okno dialogowe "Chcę zapisać zmiany", a funkcja automatycznego zapisywania nie zadziała po naciśnięciu "Nie zapisuj".

Czy istnieje sposób, aby zadzwonić do mojego kodu tuż po „Chcesz zapisać zmiany” dialog w programie Excel z możliwością uniknięcia wbudowany w „zapisz” dialog lub jakoś powiedzieć Excel, aby utworzyć punkt autozapisu (z własną rękę "Chcę zapisać zmiany") po naciśnięciu "Nie zapisuj"?

+0

@ vba4all Tak, jestem pewien. Spróbuj kliknąć Zamknij z nowym dokumentem. Przy zapisie z ctrl + si File-> Save all ok –

+0

Czy ustawiasz * SaveAsUI * na * False * i * Cancel * na * True *? – Jeeped

Odpowiedz

0

Nie jestem pewien, czy znalazłeś odpowiedź, ponieważ ten wątek jest nieco przestarzały, ale pomyślałem, że wpłacę 0,02 $.

utworzyć [isDirty] nazwanego zakresu odblokowanym veryhidden arkusza i każdy widoczny Worksheet.Change ustawić [isDirty] = True

W Workbook.BeforeClose mam to:

 If [IsDirty] = True Then 
      Select Case MsgBox("Do you want to save the changes you made to '" & .Name & "'?", _ 
       vbYesNoCancel + vbExclamation) 
       Case Is = vbYes 
        ThisWorkbook.Save 
        [IsDirty] = False 
       Case Is = vbNo 
        'Do not save 
       Case Is = vbCancel 
        Cancel = True 
      End Select 
    End If 

W Private Sub Workbook_BeforeSave (ByVal SaveAsUI As Boolean, Cancel As Boolean)

ThisWorkbook.Save 
    [IsDirty] = False 
    Cancel=True