У меня есть макрос в файле A, чтобы выбрать некоторые данные из файла A, открыть файл B, записать эти данные на них, а затем закрыть его.
PROM_ADRESA = Range("BUNKA_adresa_databaze")
PROM_JMENO = "DATABASE_" & PROM_Year & ".xlsx"
On Error Resume Next
Set DB_kontrola = Workbooks(PROM_JMENO)
DB_otevrena = Not DB_kontrola Is Nothing
If DB_otevrena = True Then
Workbooks(PROM_JMENO).Close savechanges:=False
End If
PODMINKA_casovac = Now()
Do Until Now() = PODMINKA_casovac + 0.0003 Or Now() > PODMINKA_casovac + 0.0003
If IsFileOpen(PROM_ADRESA & PROM_JMENO) = False Then
' the file is not in use.
GoTo PODMINKA_ACCESS_OK
Else
' the file in use.
If Now() > PODMINKA_casovac + 0.0003 Then
MsgBox "Nedaří se připojit do databáze. Kontaktujte prosím správce."
Exit Sub
End If
End If
Loop
PODMINKA_ACCESS_OK:
Set PROM_DATABASE = Workbooks.Open(PROM_ADRESA & PROM_JMENO, Password:="something", ReadOnly:=False)
With PROM_DATABASE 'with se táhne až po konec skriptu
If PROM_DATABASE.ReadOnly Then
PROM_DATABASE.Close
MsgBox "Databáze je momentálně zaneprázdněna zápisem jiného uživatele. Stiskněte tlačítko ULOŽIT znovu."
Exit Sub
End If
*my own code*
end with
файл B защищен паролем и расположен в сетевом расположении,Функция IsFileOpen работает хорошо, цикл работает нормально. Если я открою на компьютере 2 файл B, цикл на компьютере 1 запустится прибл. 30 секунд, а затем предложите msgbox. Если я закрою файл B на компьютере 2, на компьютере 1 цикл завершится, и код продолжится хорошо. Но если я запускаю этот код на двух компьютерах одновременно (что я хочу) на одном компьютере, введите пароль. Как это возможно, когда я установил пароль в коде? Если я напишу пароль и нажму "ОК", запустите эту часть:
If PROM_DATABASE.ReadOnly Then
PROM_DATABASE.Close
MsgBox "Databáze je momentálně zaneprázdněna zápisem jiného uživatele. Stiskněte tlačítko ULOŽIT znovu."
Exit Sub
End If
Я не знаю, почему этот B-файл открыт как только для чтения, если цикл считает, что этот файл не используется.
Если я запускаю этот макрос одновременно с двух компьютеров, но с небольшой задержкой в секунду, все работает хорошо на обоих компьютерах.