VBA "ThisWorkbook.Close" не закрывает эту книгу! - PullRequest
2 голосов
/ 17 февраля 2010

Я пишу макрос VBA в Excel, который должен открывать «fileB.xls», а затем закрываться сразу после его открытия. Поскольку мы будем говорить о трех файлах Excel, я назову первый файл A.

Код для кнопок пользовательской формы для файла A выглядит следующим образом.

Private Sub CommandButton2_Click()  
    'Code for Button in FileA '
    Workbooks.Open Filename:="File Path/fileB.xls"  
    ThisWorkbook.Close  
End Sub

Когда открывается файл fileB.xls, он запускает форму для сбора информации о пользователе.

Однако исходный файл не закрывается после открытия «fileB.xls».

Sub Workbook_Open()
    'Code in FileB '
    'Display a form to obtain information from the user.  '
    frmOpenFile.Show  
End Sub

Возможно, стоит отметить, что fileB открывает третий и последний файл Excel (FileC). Код, подобный коду FileA, используется в FileB и прекрасно работает при запуске FileC (FileB закрывается нормально).

Идея состоит в том, что есть один "главный" файл, в котором вы выбираете, какую форму вам нужно заполнить. Затем этот мастер-файл закрывается и позволяет пользователю заполнить форму, и на основании введенных пользователем данных открывается окончательный файл Excel.

Итак, чтобы еще раз повторить проблему, FileA открывается, запускает пользовательскую форму, пользователь нажимает кнопку, File B запускается, FileA не закрывается, когда это необходимо.

Буду благодарен за любую помощь!

РЕДАКТИРОВАТЬ: я должен отметить, что если переписать FileA, чтобы напрямую открыть FileC, FileA закроется правильно. Может ли пользовательская форма из FileB предотвратить закрытие файла A?

Ответы [ 2 ]

4 голосов
/ 17 февраля 2010

Да, это пользовательская форма. Пользовательская форма в файле C является немодальной. Это противоположно тому, что в файле B. Когда открывается файл B, открывается пользовательская форма и выполнение всего кода останавливается, пока он не закроется. С файлом C выполнение кода продолжается. Если вы измените свойства пользовательской формы файла B ShowModal на False, они будут работать одинаково.

В VBE откройте соответствующую пользовательскую форму и нажмите F4, чтобы открыть диалоговое окно «Свойства». Найдите свойство ShowModal и измените на False.

0 голосов
/ 17 февраля 2010

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

Это может быть скрыто от просмотра в зависимости от того, какой другой код вы используете.

Чтобы избежать этого приглашения, пока вам не нужно сохранять изменения, этот код будет работать:

ThisWorkbook.Close SaveChanges = False
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...