Как мешать Excel запросить для повторного открытия рабочей книги?

Вы можете использовать свои собственные функции. Как сохранить значение каждого текстового поля и, нажав кнопку отправки, подтвердите свои значения.

5
задан Community 9 July 2018 в 18:41
поделиться

2 ответа

Человек..., это кажется легким, но это - жесткое. Я играл вокруг с каждым событием и свойством приложения/рабочей книги, о котором я мог думать за свои приблизительно 7 лет опыта, работая с Excel VBA, и я не мог придумать ничего изящного вообще... Я думаю, что короткий ответ - то, что нет действительно короткого изящного решения этой проблемы (Если бы существует, я действительно хотел бы видеть его). Это - плохие новости.

Хорошие новости - то, что там я думаю, что существуют способы работать вокруг проблемы... 1 изящно, но потребовал бы, чтобы Вы для пересмотра прежнего мнения некоторых методов и другого были грязными, но вероятно немного более простыми.

Более изящный путь включил бы пересмотр прежнего мнения и рефакторинг Ваших методов... Я думаю причина, я никогда не сталкивался с этой проблемой в своей работе, то, что в конце каждого из моих методов, рабочую книгу оставляют в "хорошем" состоянии... или другими словами, если существует "очистка", чтобы сделать затем, это сделано в конце каждого метода. Если существует огромная служебная производительность, пораженная в этом, Вы могли бы рассмотреть установку булева флага и ограничение, выполняется ли это в конце каждого из Ваших других методов. (т.е. runCleanup = ReturnTrueIfCleanupIsNeeded (), Если (runCleanup = верный) Затем CleanupMethod () Конец, Если)

Более грязный путь включил бы создание самой всей рабочей книги в своего рода "специальное взаимное исключение"
1) копирование всей (исходной) Рабочей книги в событии WorkBookOpen в другой (временный) WorkBook и использование метода "SaveAs" на временном файле для размещения его в отдельное местоположение.
2) Хранение (исходного) пути.
3) Добавление кода к WorkBook открывает событие, которое проверяет на (временный файл), и любой A) Сразу закрывает себя и активирует временный файл или B) Перезаписывает себя с (временным файлом) и затем использует SaveAs
4) Поймайте событие, прежде чем пользователь сохранит WorkBook, и сохраните его и к исходному местоположению и к временному местоположению.
5) В событии WorkBookClose выполненном любая очистка, Вы должны и сохраняете временный файл назад к его исходному местоположению.

Точка всего этого должна обойти "коллизию", которая происходит, когда Вы открываете рабочую книгу дважды - по существу путем создания временной рабочей книги при открытии ее в первый раз и сохранение ее в другом месте (возможно, Вы могли даже скрыть файл?) Вы удостоверяетесь, что, когда пользователь нажимает оригинал, он не столкнется с данными, с которыми они уже работают в приложении. (Конечно, это имеет свои собственные проблемы/вопросы как, "Что, если я не знаю то, что соединяет пользователя каналом, имеет доступ для сохранения временного файла к" или, "Что, если пользователь открывает временный файл XLS..., но вот почему я назвал его грязью путь)"

Я знаю, что это много, особенно если Вы не приучены к работе с VBA; Если Вы хотите, чтобы я отправил некоторый код, чтобы помочь Вам с каким-либо из тех шагов, оставить комментарий, и я буду.

Спасибо за интересный вопрос.

2
ответ дан 14 December 2019 в 19:30
поделиться

Можно использовать некоторые специальные события приложения для обработки, когда рабочая книга вновь открыта, и вручную запустите код Workbook_Close:

Создайте модуль класса под названием ApplicationController со следующим кодом:

Public WithEvents CApp As Application
Public CurrentWB as Workbook

Private Sub CApp_WorkbookOpen(ByVal wb As Excel.Workbook)


Dim sPathName As String
sPathName = wb.Name
if sPathName = CurrentWB.Name then CallSomeMethod()

End Sub

затем на Вашем workbook_load событии делают что-то как:

Public controller as new ApplicationController
Private Sub Workbook_Open()
set controller.CApp = Excel.Application
set controller.CurrentWB = ThisWorkbook
End Sub

теперь, когда Excel идет для открытия новой рабочей книги, Вы получите событие и выполните Ваш метод безопасности. Вы могли даже предотвратить его вновь открывший рабочую книгу, если бы Вы желали.

2
ответ дан 14 December 2019 в 19:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: