Открытие защищенной книги на нескольких компьютерах с помощью VBA - PullRequest
0 голосов
/ 12 марта 2019

У меня в настоящее время есть программа, которая открывает и использует защищенную рабочую книгу под названием «Информация о питании» для получения данных о питании.

Set wb2 = Workbooks.Open(fileName:= _
    ThisWorkbook.Path & "\Nutritional Information.xlsm", Password:=4321)

Моя программа работает идеально, если ее использует только один человек.Я искал возможность иметь несколько копий документа (по одной на каждое место для обеда на моей работе), которые все обращаются к рабочей книге «Информация о питании» для получения необходимых данных.

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

Затем я проверил, будет ли документ работать, даже если обе программы ссылались на файл информации о питании одновременно.Я смог получить копию документа, который открыл Nutritional Information для работы, но во втором экземпляре произошло нечто интересное.На втором экземпляре мне было предложено ввести пароль для документа «Информация о питании» (хотя пароль был указан при вызове, чтобы открыть документ), и как только я ввел пароль, второй экземпляр работал отлично.Они даже работали одновременно, если одному из них был введен пароль вручную.

Есть ли способ предотвратить ручную вставку пароля во вторую копию документа?Или есть ли другие способы, которыми я мог бы иметь такую ​​функциональность?

1 Ответ

0 голосов
/ 12 марта 2019

Относительно моего комментария выше: я получил эту функцию для SO (я не помню пост, на котором она была, чтобы должным образом оценить человека, который ее написал, к сожалению).

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

Тогда вы можетеиспользование:

ret= IsWorkbookOpen(ThisWorkbook.Path & "\Nutritional Information.xlsm")
If ret = False then
    Set wb2 = Workbooks.Open(fileName:= _
    ThisWorkbook.Path & "\Nutritional Information.xlsm", Password:=4321)
Else
    ....enter code here to open the workbook as read only with the password.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...