2016-12-20 9 views
1

Я создаю файл excel с командами, пользовательскими формами и т. Д., Которые содержат ссылки на другие книги.не удалось закрыть открытую книгу excel

Для commandbuttons на моем листе я использую тот же код, что и для commandbuttons в моих UserForms:

workbooks.open "path" 

с UserForm commandbuttons ATER это добавляется

unload me 

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

Я попытался поставить «выгрузить меня» перед и после «workbooks.open», но это ничего не меняет.

Я также попытался followin, также не работает:

unload me 
dim wb as workbook 
set wb = workbooks.open"pathname" 
wb.activate 

никому какие-нибудь идеи?

Пример того, как это делается сейчас: Кому-то нужно сделать расчет цены. они открывают цены userform в моем файле. они нажимают кнопку «расчетный файл». Откроется файл расчета. они делают расчет, и теперь они завершены в файле расчета. Поэтому они хотят закрыть его, нажав на крест. Но они не могут щелкнуть крест. затем они переключаются на мой файл на панели задач, а затем переключаются обратно в файл расчета. теперь они могут щелкнуть крест

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

+1

Я не вижу никакого кода, где вы пытаетесь закрыть книгу здесь. – Sorceri

+0

Я говорю о закрытии, щелкнув крест. Я открываю книги с информацией, и после того, как кто-то увидел нужную им информацию, они снова хотят закрыть книгу. однако с моим кодом вам нужно переключиться между книгами, прежде чем вы сможете щелкнуть крест – Mick17

+0

Я понятия не имею, что это может вызвать, но вы знаете, что метод 'workbooks.Open' устанавливает новую * активную * книгу, поэтому ваш' wb. Activate' не делает ничего лишнего. Вставьте 'ThisWorkbook.Activate' прямо перед' wb.Activate' и посмотрите, не взламывает ли это решение. –

ответ

0

Unload влияет только на UserForm.

Попробуйте добавить ссылку на открытую книгу, а затем закрыть его так:

dim wb as Workbook 
set wb = Workbooks.Open "pathname" 
wb.activate 
' do whatever with it while it's open 
wb.Close 

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

+0

Чем ты за свою помощь, но я думаю, что мой вопрос недостаточно ясен. Я не хочу ничего менять в книгах, которые открываю. Мы работаем с большим количеством различных файлов excel, которые находятся в разных местах. Я создаю один файл excel, с помощью которого вы можете открыть нужные вам файлы. См. Это как «связанный» файл. Если я открываю книгу по моей книге, мне нужно переключиться между моей книгой и открытой, прежде чем я смогу закрыть открытую, щелкнув крест – Mick17

+0

. Итак, вы хотите нажать кнопку, чтобы открыть книгу, затем скройте пользовательскую форму и покажите недавно открытая книга? И если пользователь вручную закрывает книгу, вы хотите, чтобы пользовательская форма снова появлялась или что-то еще? – Dave

+0

Например: кому-то нужен файл, чтобы рассчитать цену. они открывают цены userform в моем файле. Они нажимают кнопку «расчетный файл». Откроется файл расчета. они там делают расчет, и теперь они закончены в этом файле. Они хотят снова закрыть этот файл, щелкнув крест, но теперь они не могут щелкнуть крест. они должны переключиться на мой файл, переключиться обратно в файл расчета, и теперь они могут щелкнуть крест. Я не понимаю, почему они не могут щелкнуть по нему в первый раз, но они могут щелкнуть по нему после переключения между книгами. – Mick17

0

Если вы определяете книги, которые вы открываете в качестве переменной, вы сможете легко их закрыть. Имейте в виду, что это не сохраняет книгу.

Dim DataBook As Workbook 
Set DataBook = Workbooks.open ("pathname") 
' Do something useful with the file 

DataBook.Close 
+0

Чем вы за вашу помощь, но я думаю, что мой вопрос недостаточно ясен. Я не хочу ничего менять в книгах, которые открываю. Мы работаем с большим количеством различных файлов excel, которые находятся в разных местах. Я создаю один файл excel, с помощью которого вы можете открыть нужные вам файлы. См. Это как «связанный» файл. Если я открою книгу в моей книге, мне нужно переключиться между моей книгой и открытой, прежде чем я смогу закрыть открытую, щелкнув крест – Mick17

0

Это не совсем понятно, что вы пытаетесь спросить, но я дам ему мой лучший в предоставлении вам полный ответ. Если у вас нет успеха в заявлении Unload Me, когда дело доходит до закрытия формы пользователя , попробуйте указать полное имя формы в VBA.То есть:

Unload UserFormName 

Если вы пытаетесь закрыть книгу вы открыли (через форму пользователя), вы можете использовать Workbooks.Close метод:

Dim wb as Workbook 
Set wb = Workbooks.Open(Filename:="C:\example.xls") 
wb.Activate 
'Close workbook 
wb.Close 
'Unload form 
Unload ExampleForm 

Подробнее об использовании из Выгрузка заявления можно найти здесь: - https://msdn.microsoft.com/en-us/library/aa445829(v=vs.60).aspx

И еще об использовании заявления Workbooks.Close можно найти здесь: - https://msdn.microsoft.com/en-us/library/office/ff838613.aspx

1

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

Если вам нужно всего лишь открыть книгу и выгрузить форму, * не увеличивайте количество ссылок на книгу, прежде чем выгружать форму. Кроме того, не пытайтесь запускать какой-либо другой код после вызова Unload Me из формы. Код размещен должно быть просто:

Workbooks.Open "pathname" 
Unload Me 

Конечно код вызова для формы не в вопросе, но это скорее всего может быть решена там.

+0

Спасибо за информацию, которую я увижу, смогу ли я с этим работать. Вызывающий код просто: userform1.show – Mick17

0

Я не уверен, что вызывает описанное вами поведение (невозможность щелкнуть по кнопке «Закрыть» X в окне активного Excel). Однако текущий рабочий процесс:

  1. Пользователь взаимодействует с формой для обзора/открыть файл
  2. Пользователь нажимает на кнопку на форме, которая выгружает форму
  3. Пользователь затем ожидается вручную закрыть из файла открыт в (1)

лучшее решение было бы удалить третий шаг, и закройте книгу из одной формы в обработки событий (UserForm_QueryClose или UserForm_Terminate). В качестве альтернативы вы можете добавить это к событию Click, но это не очень отличается от того, как требуется вручную закрыть файл вручную.

Это может быть столь же просто, как:

Private Sub UserForm_Terminate() 
' should be called when form Unloads 
On Error Resume Next 
Workbooks.Close "filename.xlsx" 
End Sub 

Таким образом, файл будет закрыт в любое время пользователь закрывает или иным образом разгружает UserForm.

Смежные вопросы