Книга Excel открывается как доступная только для чтения, поскольку файлы подключения - PullRequest
0 голосов
/ 07 января 2020

У меня есть группа из 3 взаимосвязанных рабочих книг, которые извлекают данные друг из друга. То, как я получаю данные, происходит через Connections. Все файлы находятся на одном диске. Я пытаюсь открыть все три файла одновременно и внести изменения. Однако после открытия книги «A» я не могу правильно открыть файлы «B» или «C», так как это показывает, что файл используется другим пользователем и дает возможность открыть файл только для чтения.

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

Спасибо!


ОБНОВЛЕНИЕ:

Я связал все файлы, используя Данные> Соединения. Для дальнейшего расширения эти файлы открываются как пользовательские формы при запуске, и для этого я добавил этот код в «ThisWorkbook» (автоматически откройте пользовательскую форму и скройте рабочую книгу). Я начинаю думать, что моя проблема невозможности открыть более одного из этих документов одновременно из-за этого куска кода, но я не уверен, что это может быть или есть лучший способ открыть Userform и скрыть книгу. Любой совет приветствуется. Ниже приведен код, который я имею под "ThisWorkbook":

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    'important to reset this
    Application.IgnoreRemoteRequests = False
    
End Sub


Private Sub Workbook_Open()
    'need to use ontime to allow xl to initialise fully
    Application.OnTime Now, "ThisWorkbook.OnlyOneOfMe"

End Sub


Private Sub OnlyOneOfMe()
Dim xlApp As Excel.Application
    On Error GoTo BAD
    With Application
        If Me.ReadOnly Or .Workbooks.Count > 1 Then
            Me.ChangeFileAccess Mode:=xlReadOnly
            Set xlApp = New Excel.Application
            xlApp.Visible = True
            xlApp.Workbooks.Open (Me.FullName)
            GoTo BAD
        Else
            'stop opening from explorer (but not from excel)
            .Visible = False
            .IgnoreRemoteRequests = True
            UserForm1.Show
            .Visible = True
            '.Quit
        End If
        Exit Sub
    End With
BAD: If Err Then MsgBox Err.Description, vbCritical, "ERROR"
    Set xlApp = Nothing
    Me.Close False
End Sub
...