Экспорт данных с помощью msgbox BeforeClose, только если рабочая книга, в которую экспортируются данные, закрыта - PullRequest
0 голосов
/ 25 апреля 2019

Я хочу экспортировать данные в другую рабочую книгу. Я добавил msgbox перед закрытием, спрашивая, готов ли я экспортировать данные. Когда я выбираю да экспорт данных. У меня проблема в том, что рабочая книга, в которую экспортируются данные, регулярно используется. Я хочу добавить в свой код функцию, которая будет уведомлять пользователя о том, что данные не будут экспортированы, поскольку рабочая книга открыта в другом месте. Если рабочая книга закрыта, я хотел бы экспортировать данные.

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim Output As String

Output = MsgBox("Are you ready to export the data?", vbYesNo, "Data Export")

If Output = vbYes Then

'Summary Page (APD+MTC)

'APD Premium

Worksheets("SEC 1 (APD)").Range("AJ" & Cells.Rows.Count).End(xlUp).Copy

Workbooks.Open Filename:="S:\US Div\Accounts\Paramount\2017 Data\Summary\2017 Summary - Edit.xlsm"

Workbooks("2017 Summary - Edit.xlsm").Worksheets("Input P").Activate

Range("C18").PasteSpecial Paste:=xlPasteValues, operation:=xlNone, _
SkipBlanks:=False, Transpose:=False

ActiveWorkbook.Close SaveChanges:=True

End If

End Sub

1 Ответ

0 голосов
/ 25 апреля 2019

Я получил эту функцию отсюда на SO (Не помню пост, чтобы отдать должное unfortnuatley.

Function IsWorkBookOpen(FileName As String)
    Dim ff As Long, ErrNo As Long

    On Error Resume Next
    ff = FreeFile()
    Open FileName For Input Lock Read As #ff
    Close ff
    ErrNo = Err
    On Error GoTo 0

    Select Case ErrNo
    Case 0:    IsWorkBookOpen = False
    Case 70:   IsWorkBookOpen = True
    Case Else: Error ErrNo
    End Select
End Function

Затем в вашем Sub вы вызываете его, используя что-то вроде этого:

Dim ret

ret = IsWorkBookOpen(Path to workbook here)

Select Case ret
    Case Is True:  code here
    Case Is False: code here
End Select
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...