Мне удалось воспроизвести проблему с помощью простой xla по имени George:
Public harry As Variant
Public Sub setHarry(x)
harry = x
End Sub
Public Function getHarry()
getHarry = harry
End Function
Я установил xla.Затем я создал Alice.xls с текстовым полем, которое вызывало setHarry, когда оно изменилось, и ячейку с = getHarry () в нем.Я сохранил это очень просто:
Private Sub TextBox1_Change()
Run "george.xla!setHarry", TextBox1
End Sub
Затем я сделал копию Alice.xls в виде Bob.xls и запустил их оба.Как и ожидалось, если одна из книг изменит Гарри, обе книги увидят результат.
Я говорю ожидаемо, потому что xla похожи на dll в том, что в памяти есть только одна копия, которой все делятся;это, очевидно, включает в себя глобальные переменные, что имеет смысл.Я просто хотел проверить теорию.
На мой взгляд, лучший способ исправить это - использовать модуль класса вместо обычного модуля.Таким образом, вы можете назначить каждой книге свой экземпляр класса и его переменные в событии Workbook_Open.Если переменные объявлены как публичные, вам не нужны свойства get и set, хотя вы можете использовать их, если в этом есть смысл.