Почему мой Workbook_BeforeSave мешает запуску Workbook_AfterSave - PullRequest
0 голосов
/ 11 января 2019

Я сталкивался с подобными проблемами, когда AfterSave не запускался для людей, но их ответы не касались моей ситуации, в которой, по-видимому, причина того, что AfterSave не запущен, - это мой код BeforeSave. Оба эти набора кода работают должным образом независимо друг от друга, но я не могу заставить их работать в одной книге.

Код в настоящее время записан в «ThisWorkbook» и просто устанавливает имя сохраняемого файла в значение ячейки перед сохранением, а затем после сохранения обновляет текстовый файл, добавляя 1 к числу в текстовом файле.

Судя по моим исследованиям, проблема связана с Cancel или Application.EnableEvents.

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Application.EnableEvents = False
    Dim sFile As String
    sFile = Range("B3").Value & ".xlsm"
    Application.Dialogs(xlDialogSaveAs).Show sFile
    ActiveSheet.ExportAsFixedFormat _
        Type:=xlTypePDF
    'Application.Dialogs(xlDialogSaveAs).Show(arg1:=ThisWorkbook.Sheets("Sheet1").Range("B3").Value)
    Application.EnableEvents = True
    Cancel = True
End Sub

Private Sub Workbook_AfterSave(ByVal Success As Boolean)
Application.EnableEvents = True
If Success Then
 'Open the text file to overwrite the number in the text file
 Open "\\digitalsense.com.au\FileShares\Public\_Purchase Orders\PO_Number_Generator.txt" For Output As #1
 'Overwrite the number with the PO number
 Print #1, Cells(1, 2)
 'Close the text file
 Close #1
End If
End Sub

Я должен иметь возможность щелкнуть «Сохранить» или «Сохранить как обычно», и в поле имени файла предварительно заполняется текст в ячейке B3. После сохранения мой текстовый файл необходимо обновить, увеличив число в текстовом файле на 1.

Ответы [ 2 ]

0 голосов
/ 17 января 2019
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim sFile As String
sFile = ActiveSheet.Range("B3").Value & ".xlsm"Application.EnableEvents = False
'did the file get saved?
If Application.Dialogs(xlDialogSaveAs).Show(sFile) Then
    UpdateSequenceNumber ActiveSheet.Cells(1, 2).Value
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF
End If
Application.EnableEvents = True

Cancel = True End SubSub UpdateSequenceNumber(newVal)
Open "\\digitalsense.com.au\FileShares\Public\_Purchase Orders\PO_Number_Generator.txt" For Output As #1
Print #1, newVal
Close #1

End Sub

0 голосов
/ 11 января 2019

В BeforeSave вы устанавливаете Cancel = True - это приводит к отмене операции сохранения, поэтому событие AfterSave не запускается.

РЕДАКТИРОВАТЬ: может быть, что-то вроде этого

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Dim sFile As String
    sFile = ActiveSheet.Range("B3").Value & ".xlsm"

    Application.EnableEvents = False
    'did the file get saved?
    If Application.Dialogs(xlDialogSaveAs).Show(sFile) Then
        UpdateSequenceNumber ActiveSheet.Cells(1, 2).Value
        ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF
    End If
    Application.EnableEvents = True

    Cancel = True
End Sub


Sub UpdateSequenceNumber(newVal)
    Open "\\digitalsense.com.au\FileShares\Public\_Purchase Orders\PO_Number_Generator.txt" For Output As #1
    Print #1, newVal
    Close #1
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...