Elettracompany.com

Компьютерный справочник
3 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Закрыть excel vba

Vba excel как закрыть excel

закрытие екселя с сохранением и без предупреждения (Макросы/Sub)

​Смотрите также​​ клавиатуре)​ для нажатия кнопки:​ просто скрывает формулу​ перехватывать события на​ сценарии. Она такая.​ с Книги3 в​
​Mishel915​ одном Макросе1) книги.​ ‘и закрываю окно​
​: Кнопочка с решёткой,​
​ As Excel.Application) app.ActiveWorkbook.Close​
​ как. По-видимому, работающий​
​:​
​ другое сообщение, хотя​
​ файл Эксель, да​

​ True)​​85Muslim85​
​Не хочу размещать​
​Private Sub CommandButton1_Click()​
​ от пользователя​ уровне Application.​ В коллекции Workbooks​
​ Книгу1, потом перейти​
​:​Если команда о​ редактора VBA​
​ однако​
​ 0 app.Quit End​
​ макрос не дает​
​Mary_Rustle​ ничего принципиального я​ так чтобы и​Workbooks.Close True​: добрый день, скажите​
​ кнопки на форме​
​ Unload Me Set​метод Unload (имя​Mishel915​ фиксируется определённый порядок​ в Книгу2, потом​
​EducatedFool !​
​ закрытии книг поступает​Возможно и Вам​Glen​ SubА в самой​ выполнить команду Quit.​, а какой смысл​
​ не поменяла:​ в скрытых процессах​’ закрыть без​ как закрыть ексель​
​ — так сделай​

​ UserForm1 = Nothing​​ формы) — выгружает​: Работает так :​ чередования открытых книг,​
​ перейти в Книгу1,​
​Спасибо за этюд.​
​ из Книги1, то​

VBA Access: как закрыть книгу Эксель без сохранения?

​ это поможет.​​: не получается код​
​ книге прописать​ Можно попробовать накидать​ открывать файл Excel​
​Помогите, пожалуйста, это​ его тоже не​ сохранения (без запроса​ (полностью выйти) с​ ее масенькой (все​ End Sub​ форму из памяти​Sub Макрос1() Dim​
​ который не меняется.​
​ после чего подать​Да, необходимо было​ закрывается только Книга1.​Glen​ прикрепить​Sub QE() Dim​ нажатий клавиш, типа​ и запускать макрос,​ очень большая проблема,​ было.​ подтверждения пользователя, даже​ сохранением под таким​ размеры и положение=1​flower2005​ и закрывает её​ wb As Workbook​ Код размещён в​ команду о закрытии​ подойти к ThisWorkbook​ Книга2 остаётся открытой.​:​Glen​ obj As Object​Код Sub closeE()​ если файл потом​ уже долго бьюсь​

​Я делаю следующее:​ если .DisplayAlerts =​ же названием и​ — прекрасно работает.Пусть​: А может быть,​CердЖиГ​

​ For Each wb​ Книге3, а запускается​ двух книг, то​ с другой стороны​Очевидно это происходит​

​ОлеггелО​​:​
​ Set obj =​ Set sh =​
​ закрывается без сохранения​ над ней, никаких​
​Private Sub Кнопка0_Click()​ True)​ без предупреждения​ в проекте существует​ стоит обработать событие​: Всем спасибо уже​ In Workbooks If​ с Книги1. Как​ закрывается только Книга1?​ !​ из-за того, что​,​Sub rr()​ CreateObject(‘Имя класса’) obj.ExcelQuit​ CreateObject(‘WScript.Shell’) sh.SendKeys (‘Sub вава()​ If KeyAscii =​

​ формы, а на​​ActiveWorkbook.Save​ Next Application.ActiveWorkbook.Close End​ закрывает, после чего​ с Книги3 в​
​ For Each wb​ чего выполнение Макроса1​
​ суток !​ VBProj.VBComponents(«Лист3»)​ займет несколько минут​
​ 9>. Да и​ другой файл, который​ старалась​
​ = CreateObject(«Excel.Application») With​ Application больше нет​Range(«A1») = 1​ 27 Then MsgBox​ другие клавиши не​
​End Sub​ Sub​ выполнение кода прекращается​ Книгу1, потом перейти​ In Workbooks If​
​ прекращается.​Две книги Excel​Set CodeMod =​Glen​ работает это только​ потом используется?​Изменила код следующим​ app .Workbooks.Open FullFilePath​

Закрыть окно редактора VBA макросом (Макросы/Sub)

​ открытых и не​​Workbooks.Application.DisplayAlerts = False​
​ ‘Была нажата ESC,​ реагировать.​Pavel55​СердЖиГ​
​ так как код​ в Книгу2, потом​ wb.Name <> ThisWorkbook.Name​Такой вопрос :​
​ (Книга1 и Книга2)​ VBComp.CodeModule​

​: Доброго дня.​​ с листа Excel,​
​Mary_Rustle​ образом:​
​ End With app.Run​

​ сохраненных книг,​​Excel.ActiveWorkbook.SaveAs («rl.xlsm»)​
​ прячем форму’ UserForm1.Hide​flower2005​: )) ну, всё​

​: Уважаемые форумчане!​​ запущен с Книги1.​ перейти в Книгу1,​

​ Then wb.Close Next​​ какой должен быть​ закрываются в одном​

​With CodeMod​​В работе макрос​ ​ а из среды​
​:​Private Sub Кнопка0_Click()​
​ «diap» app.Quit Set​’ иначе будет​
​Workbooks.Close​ Else ‘ничего не​
​: Кто тебя учил​
​ правильно) только вы​Напомните, плиззз, команды​
​ Все книги, которые​ потом перейти в​
​ End SubКнига3 должна​ код для закрытия​
​ макросе, например так​
​lLineNum = .CreateEventProc(«Change»,​
​ переносит модуль процедуры​

​ разработки не работает.​​Казанский​​ FullFilePath = «C:папка7​​ app = Nothing​ запрашивать подтверждения сохранения,​End Sub​ делаем End If​ ​ выгружать (unload) форму​ спрашивали о сохранении​ в VBA для​
​ стоят в очереди​ Книгу2, после чего​ оставаться для выбора​ ​ всех книг, записанных​ :​

​ «Worksheet»)​​ события на новый​​oldpasp​​, спасибо) Действительно глупость.​
​ свод реестров 2015_9.xlsm»​

Как в одном макросе закрыть все книги Excel?

​ DoCmd.SetWarnings False DoCmd.RunSQL​​ при .DisplayAlerts =​KSV​
​ End SubКстати, а​ в кнопке? Не​ формы, а сами​ сохранения и закрытия​ на закрытие после​
​ подать команду о​
​ нового действия.​ в Макросе1, не​Код:​lLineNum = lLineNum​ лист.​: Так как макрос​ Исправила на (oBook.Save).​ Dim app As​ «DELETE Свод_реестров.* FROM​ True)​
​: все правильно​ какие элементы есть​ руби сук, на​ сохраняете активную книгу​
​ userform.​
​ Книги1, теперь не​ закрытии двух книг,​Не всё пока​
​ зависимо от порядка​Sub Макрос1() On​ + 1​При этом почему​ расположен в какой-либо​
​Штурмaн​ Object Dim oBook​ Свод_реестров» DoCmd.TransferSpreadsheet acImport,​Application.Quit​200?’200px’:»+(this.scrollHeight+5)+’px’);»>’ подавляет предупреждения Excel​ на форме?​ котором сидишь! Напиши​
​ ) или нам​Спасибо!​ закроются из-за того,​ то закрываются обе​ получается.​ расположения книг в​ Error Resume Next​.InsertLines lLineNum, «call​ то само открывается​ книге, то выполнив​: Помогите чайнику.Надо закрыть​ As Object Set​ , «Свод_реестров», FullFilePath,​85Muslim85​

​Workbooks.Application.DisplayAlerts = False​​Код может и​ в коде кнопки​ надо было догадаться​Pavel55​ что код уже​ книги!​1. Если перейти​

​ Макросе1. Очевидно в​​ Workbooks(«Книга1»).Close (SaveChanges) Workbooks(«Книга2»).Close​​ Izm(Target)»​​ окно редактора VBA.​
​ команду​ через VBA Excel​ app = CreateObject(«Excel.Application»)​ True, «Свод_реестров» CurrentDb.Execute​
​: все отлично)) спасибки. ​
​’ сохраняет книгу​ не сработать, если,​ me.hide — это​ ?)​: А что значит​ не выполняется.​Таким образом в​ с Книги3 в​ Макросе1 необходимо определить​
​ (SaveChanges) On Error​End With​
​ По типу Alt+F11.​Application.Quit получаем запрос​ ,без сохранения и​ Set oBook =​ «DROP TABLE [Свод_реестров_ОшибкиИмпорта]»​ вот чего я​
​ в файл С​ например, фокус на​ переведет тебя в​СердЖиГ​ сохранить? У формы​Код будет срабатывать​ 3-ем сценарии код​ Книгу1, после чего​
​ управляющую книгу, т.​ GoTo 0 End​VBProj.VBE.MainWindow.Visible = False​Подскажите как кодом​ на сохранение​ без​ app.workbooks.Open(FullFilePath) app.Run «diap»​ DoCmd.SetWarnings True MsgBox​ хотел)​ ДРУГИМ именем​ TextBox(e).Только ListBox​
​ команду в вызывающей​: Павел, сорри, уже​ нет такой функции​ всегда, если его​ почемуто не видит​ подать команду о​ е. книгу с​ SubМакрос1 находится в​End Sub​ его закрыть.​А если предварительно​
​выскакивания запросов на​ oBook.Close False app.Quit​ «Импорт успешно завешен»​Workbooks.Application.DisplayAlerts = False​

Читать еще:  Синусоида в excel

​Excel.ActiveWorkbook.SaveAs («rl.xlsm»)​​К этой процедуре​ процедуре после show​
​ вечер был :-)​А закрыть можно​ запускать с книги​ Книги2.​ закрытии Книги1, то​ которой поступила команда,​ Книге3. Проэкт состоит​ОлеггелО​Glen​ закрыть книгу без​ сохранеие​ Set app =​ End SubРаньше все​Excel.ActiveWorkbook.Save​’ сохраняет книгу​ надо обратиться с​ — сделай там,​Димит​ так​ в которой он​Mishel915​ закрывается!​ и закрыть её​ из трёх книг​:​: Вроде так помогает​ сохранения​palva​ Nothing DoCmd.SetWarnings False​
​ работало хорошо за​Application.Quit​ в файл С​ фактическим параметром KeyAscii​ что требуется, а​
​: Не получается закрыть​Sub Макрос1()​ размещён.​: Установил причину не​2. Если перейти​ последней.​ — Книга1, Книга2,​Glen​Set VBProj =​Application.ActiveWorkbook.Close 0 то​

​: Закрыть одну из​​ DoCmd.RunSQL «DELETE Свод_реестров.*​
​ исключением следующего: когда​Mary_Rustle​ ТЕМ ЖЕ именем​ — как это​ затем выгружай форму!​ форму при нажатии​’или так​Если код запускать​ срабатывания кода​

VBA сохранить&закрыть userform

​ с Книги3 в​​EducatedFool​

​ Книга3.​, здравствуйте. Я так​ ActiveWorkbook.VBProject​ работа макроса прекращается​

​ книг, если макрос​

​ FROM Свод_реестров» DoCmd.TransferSpreadsheet​​ уже после успешного​: Добрый день!​Excel.ActiveWorkbook.Save​

​ ESC!!​
​Unload UserForm1 ‘закрыть​
​ с других книг,​Sub test() Dim​ Книгу1, потом перейти​
​: Sub test() Dim​
​Если команда о​
​ делал (топорно конечно),​

​VBProj.VBE.MainWindow.Visible = False​ (книга то закрывается)​ находится в другой,​
​ acImport, , «Свод_реестров»,​ выполнения модуля я​Мои попытки найти​’ закрывает книгу​

​ Walkerу​​: Не хочу размещать​Помогите!!​
​ и выгрузить из​
​ то на его​
​ wb As Workbook​
​ в Книгу2, после​

​ wb As Workbook​​ закрытии книг поступает​ добавьте перед «End​Glen​Значит надо объединить​ можно так:​ FullFilePath, True, «Свод_реестров»​ пыталась открыть файл​ нужное не увенчались​

​Workbooks.Close​​Почему нельзя Unload​ кнопки на форме​

VBA Excel закрытие формы на листе

​flower2005​​ памяти форму​ работу будет влиять​ For Each wb​
​ чего подать команду​

​ For Each wb​​ из Книги2, например​ sub»​: Код не покажу.​ эти команды: можно​Код Application.DisplayAlerts =​
​ CurrentDb.Execute «DROP TABLE​ эксель, мне выдавалось​ успехом, помогите пожалуйста!​’ закрыть с​

​ в кнопке?​​ — как и​: Разместите на форме​’или так​
​ порядок размещения открытых​ In Workbooks If​ о закрытии двух​ In Workbooks If​ так :​

Закрыть файл Excel на VBA

Помогите мне, пожалуйста.
Мне нужно открыть определенный файл и, после его обработки, закрыть.

name = Application.GetOpenFilename
Workbooks.Open name

а как мне его закрыть?

14 ответов

[QUOTE]Originally posted by ziv

хм. а как ты его обрабатываешь? ты же когда к нему обращаешься как-то его обзываешь?
ну..тогда после обработки открой его. и потом то же самое только activeworkbook
это первое что в голову приходит. только как же ты с ним работаешь?
или введи переменную для определения имени файла и вместо книга1 напиши его имя.

м-даа 🙂 программу писал под фиксированное имя открываемого файла 🙁

а как открываемому файлу присвоить необходимое мне имя, например «Книга1»?

а как открываемому файлу присвоить необходимое мне имя, например «Книга1»?

хм. А как открывается книга? Можно сделать через диалоговое окно , чтобы юзер сам выбрал что открыть:
Application.Dialogs(xlDialogOpen).Show
bookName = ActiveWorkbook.Name

а вообще проще в аську стукнись если срочно.

хм. А как открывается книга? Можно сделать через диалоговое окно , чтобы юзер сам выбрал что открыть:
Application.Dialogs(xlDialogOpen).Show
bookName = ActiveWorkbook.Name

а вообще проще в аську стукнись если срочно.

я делал вот так:
name = Application.GetOpenFilename

[off] а по аське ты «Марина»? [/off]

Вот этот name уже содержит в себе полной путь к файлу — «C:aaa1.xls», если из этой строки выдернуть aaa1.xls(например через мою функцию FileWithoutDir, описание в конце), то его можно использовать при обращении к книге — Workbooks(«aaa1.xls»).Close

А можно и так, вариантов масса:

Dim sWrb as String

name = Application.GetOpenFilename
Workbooks.Open name
sWrb = ActiveWorkbook.name
.
Workbooks(sWrb).Close

Dim wWrb As Workbook

name = Application.GetOpenFilename
Workbooks.Open name
Set wWrb = ActiveWorkbook
.
wWrb.Close

Public Function FileWithoutDir(path As String) As String
‘ Вырезает название файла из полного пути к файлу
Dim i%, pos%

On Error GoTo Err_

FileWithoutDir = «»
s = «»
If path <> «» Then

pos = InStr(1, path, «»)
s = path
If pos > 0 Then
Do
s = Right(s, Len(s) — pos)
pos = InStr(1, s, «»)
Loop Until pos = 0
End If
FileWithoutDir = s

ExitSub:
Exit Function

Err_:
MsgBox «Возникла ошибка! (в функ. FileWithoutDir)»
Resume ExitSub

Вот этот name уже содержит в себе полной путь к файлу — «C:aaa1.xls», если из этой строки выдернуть aaa1.xls(например через мою функцию FileWithoutDir, описание в конце), то его можно использовать при обращении к книге — Workbooks(«aaa1.xls»).Close

А можно и так, вариантов масса:

Dim sWrb as String

name = Application.GetOpenFilename
Workbooks.Open name
sWrb = ActiveWorkbook.name
.
Workbooks(sWrb).Close

Dim wWrb As Workbook

name = Application.GetOpenFilename
Workbooks.Open name
Set wWrb = ActiveWorkbook
.
wWrb.Close

Public Function FileWithoutDir(path As String) As String
‘ Вырезает название файла из полного пути к файлу
Dim i%, pos%

On Error GoTo Err_

FileWithoutDir = «»
s = «»
If path <> «» Then

pos = InStr(1, path, «»)
s = path
If pos > 0 Then
Do
s = Right(s, Len(s) — pos)
pos = InStr(1, s, «»)
Loop Until pos = 0
End If
FileWithoutDir = s

ExitSub:
Exit Function

Err_:
MsgBox «Возникла ошибка! (в функ. FileWithoutDir)»
Resume ExitSub

В твоем случае наверное лучше использоватть вместо InStr() функцию InStrRev(), чтобы сразу найти правый «» в полном имени файла.

Да, согласен, грехи молодости. 🙂

А я вот так действую в таких случаях:

Книги в Экселе нумеруются в порядке открытия. Поэтому сразу после открытия того файла Workbooks(Workbooks.Count) показывает на него. Можно запомнить в объектную переменную, а если никаких других книг не открывается в процессе обработки — так и запоминать ничего не нужно.

Читать еще:  Скопировать лист excel в другой файл

Originally posted by Cutty Sark
А я вот так действую в таких случаях:

Книги в Экселе нумеруются в порядке открытия. Поэтому сразу после открытия того файла Workbooks(Workbooks.Count) показывает на него. Можно запомнить в объектную переменную, а если никаких других книг не открывается в процессе обработки — так и запоминать ничего не нужно.

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

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

для этого необходимо отслеживать открываемые книги по их содержимому (юзер вполне способен открыть не тот файл, тем более не зная точно его имени, ориентируясь например по дате создания), в моем случае программа отслеживает открывался ли подобный файл ранее (что недопустимо) и содержит ли файл те данные, которые ей необходимы 🙂

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

Команда VBA Application.Quit не закрывает все приложение Excel

У меня есть следующий код под Боттоном. Когда я щелкнул по нему, он просто закрывает текущий лист excel, но не закрывает все приложение excel.

Примечание: у меня нет никаких других открытых листов

следующее окно все еще появляется после закрытия через код выше VBA .

7 Ответов

У меня был этот вопрос, и я решил его, вставив Workbook_BeforeClose() :

удалите Application.DisplayAlerts = True из процедуры.

из справки по Application.Quit Method :

Если несохраненные книги открыты при использовании этого метода, Microsoft Excel отображает диалоговое окно с запросом о необходимости сохранения изменений. Это можно предотвратить, сохранив все книги перед использованием метода Quit или установив для свойства DisplayAlerts значение False . Если это свойство имеет значение False, Microsoft Excel не отображает диалоговое окно при завершении работы с несохраненными книгами; он завершает работу без сохранения их.

Это позволит избежать любых (возможно скрытых) подсказок от остановки excel от полного закрытия

Окно не закрывается, потому что вы используете personal.xlsb. Вырезать Personal.xlsb и вставить в другое место.

Вместо Personal.xlsb Создавайте и работайте над модулями. Это лучший вариант.

«ThisWorkbook.Saved = True» после «Application.Quit» работает на Excel 2016

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

По какой-то причине Application.Quit молча завершает работу, если опция AccessVBOM не включена. Он не включен из коробки и может быть установлен / снят вашим сетевым администратором с помощью политики windows.

Вы можете найти этот параметр в GUI путем обхода «Excel Options» -> «Trust Center» -> «Trust Center Settings» -> «Macro Settings» -> «Trust access to the VBA project object model». Или программно .

Поскольку мы все любим код, в этом примере мы запускаем Excel из C# interop и вызываем функцию quit.

Прошли MacroName из bat файла и попробовали нижеприведенный код его работы. Но я заметил одну вещь: если мы закрываем книгу (ActiveWorkbook.Close) перед Application.Quit, то она не работает.

Убедитесь, что на ваших листах нет внешних ссылок, особенно неработающих ссылок.

Я боролся с этой проблемой больше недели, переписывая и комментируя множество кода, чтобы попытаться изолировать проблему. Сегодня утром я наконец-то просмотрел все ссылки на таблицы и внешние листы в своей рабочей тетради. Я удалил все ненужные ссылки и сломанные ссылки, и теперь книга закрывается, не зависая в памяти.

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

У меня есть небольшой файл excel, который запускается приложением планирования каждые 15 минут. Функции в ячейках excel считывают данные из различных мест в сети и хранят их в ячейках в этом файле.

Я создал приложение запуска для пользователей базы данных, чтобы открыть переднюю часть конкретной базы данных. Например, пользователи открывают приложение запуска (которое является Access DB в.

Использование Application.Quit в Excel VBA должно инициировать процедуру выхода по умолчанию, которая включает в себя запрос пользователя на сохранение всех несохраненных документов, открытых в.

У меня есть vba, который я запускаю из пакета, который запускает макрос для их выполнения, я пытаюсь закрыть доступ, как только все функции закончатся, однако создание новой функции и размещение.

У меня есть workbook_open sub, который делает некоторые вещи, а затем вызывает application.quit. Однако теперь, когда я добавил Это, как я могу редактировать процедуру, учитывая, что excel.

У меня есть книга Excel, которая с помощью кода VBA открывает другую книгу, копирует некоторые данные в оригинал, а затем закрывает вторую книгу. Когда я закрываю вторую книгу (используя.

У меня проблема с моим макросом excel vba. Мне нужно, чтобы он выполнил пакетный файл, который находится в той же папке, что и книга excel. Код иногда работает хорошо. Я не знаю, что вызывает эту.

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

Закрыть все открытые книги Excel

Эти макросы помогут вам закрыть все открытые файлы Excel, оставив лишь текущий файл.

Выбирайте любой из них — они мало чем отличаются.

Первый оставляет открытой только активную книгу, независимо от того, из какого файла запущен этот макрос:

Второй макрос оставляет открытой только ту книгу, из которой запущен этот самый макрос, независимо от того, какая книга активна на момент запуска:

Третья версия макроса отличается от первой лишь тем, что все файлы закрываются с сохранением изменений:
(первый макрос в этом случае выдаёт диалоговое окно — сохранять файл, или нет)

Ну и четвертый вариант — тоже закрывает все открытые файлы, только изменения в этих файлах не сохраняются:

  • 27505 просмотров

Комментарии

В такой комбинации, без дополнительных кодов в файле, вроде работает

Private Sub Workbook_Open() ‘ срабатывает при открытии
ThisWorkbook.Windows(1).Visible = False ‘ скрываем окно файла, он становится невидимым
Application.OnTime Now + 1 / 86400, «CloseThisFile» ‘ через секунду запустим макрос
ThisWorkbook.Windows(1).Visible = True ‘ открываем окно файла, он становится видимым
End Sub

Читать еще:  Факторный анализ в excel

‘ этот код в стандартном модуле
Sub CloseThisFile()
‘ закрываем все книги, кроме той, из которой запущен макрос
Dim wb As Workbook: Application.ScreenUpdating = False
For Each wb In Workbooks ‘ перебираем все открытые книги
If Not wb Is ThisWorkbook Then If wb.Windows(1).Visible Then wb.Close
Next wb
End Sub

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

Private Sub Workbook_Open() ‘ срабатывает при открытии
Application.OnTime Now + 1 / 86400, «CloseThisFile» ‘ через секунду запустим макрос
End Sub

Здравствуйте, Сергей
Исправить-то возможно, но как именно, навскидку не могу сказать.
По идее, должно всё работать
Я пытался протестировать, но что-то у меня не срослось.

Вставил в Книгу1 такой код (в модуль ЭтаКнига)

Причин не знаю, — ни разу с подобной необходимость не сталкивался, чтобы закрывать макросом файл, открытый по гиперссылке.

Я бы попробовал сделать так: (не проверял)

Здравствуйте.
Попытался вставить второй код в Книгу1 в процедуру открытия книги а затем открыть ее гиперссылкой в Книге2, Книга2 закрывается, но Книга1 открывается и сразу закрывается.
Походу открытие Книги1 через гиперссылку в другой книге не является корректным для данного кода, возможно ли это исправить?

Тимон, я же вам сказал, — с данным конкретным макросом все в порядке.
В нём не может быть ошибок, если рядом с этим макросом не написать какой-нибудь код, который с ним будет конфликтовать.

можно ли получать не имена открытых книг, а имена открытых файлов Excel

а чем, по-вашему, отличается книга от файла?
если что-то открыто в Excel, — то это объект Workbook (книга Excel)

Обратитесь на форумы по Excel, прикрепите там свой файл, — тогда вам подскажут, в чем проблема.
В этом конкретном макросе, — ошибок нет.

Вроде разобрался в чем дело. VBA ругается на несоответствие полученного значения переменной wb объявленному типу Workbook (почему и выползает wb=nothing). А можно ли получать не имена открытых книг, а имена открытых файлов Excel и закрывать их? Прошу сильно не пинать за глупость, я совсем недавно начал осваивать VBA. На случай если что-то зависит от версии, Excel у меня 2007.

Поменял, и снова вылезает ошибка type mismatch с указанием что wb=nothing. Вообще цель такая, что при запуске определенного файла excel все открытые файлы должны закрыться и сохраниться, если изменения не сохранены. может нужно код вынести на кнопку, раз при открытии книги он не срабатывает?

с кодом всё в порядке (у себя проверил, — всё работает)
могу порекомендовать только заменить ActiveWorkbook на ThisWorkbook

можете попробовать ещё поменять

Подскажите пожалуйста, а почему не работает такой вот код:

Private Sub Workbook_Open()
CloseAllWorkbooks
frm_Work.Show
End Sub

Sub CloseAllWorkbooks()
Dim wb As Workbook
Application.ScreenUpdating = False
For Each wb In Workbooks
If Not wb Is ActiveWorkbook Then
wb.Close (Not wb.Saved)
End If
Next wb
End Sub

При наличии любого открытого файла excel выполнение этого кода при запуске файла с ним приводит к ошибке wb=nothing.

Вы не написали, в каком формате сохранять, — я это и не учел в макросе
Метод saveas принимает в качестве второго параметра тип файла — поставьте курсор в коде на saveas, нажмите F1, почитайте справку, доработайте код

Эхехе. Даже и не знаю, что делать. Файлы выгружаются из программы в старом формате, из-за этого включается режим ограниченной функциональности и отключаются макросы.

Закрыть excel vba

Версия для печати

FORBES
..в ивенте Workbook_BeforeClose через Shell() вызвать wscript terninator.vbs, в котором будет задержка на пару минуток, а там проверка на время и дату — и в морг ..

BeforeClose конечно же .

FORBES
данный код вставленный в ВБА на «Эта книга», добовляет лист пустой, все остальные листы уничтожает и записывает файл.

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Worksheets.Item(1).Activate
Worksheets.Add
For i = 2 To ActiveWorkbook.Worksheets.Count
Application.DisplayAlerts = False
ActiveWorkbook.Worksheets.Item(2).Delete
Application.DisplayAlerts = True
Next i
ActiveWorkbook.Save
End Sub

Или тебе надо чтобы уничтожились данные на всех листах, а сами листы (с названиями первоначальными) остались?

А вот как это делается в командной строке:
file: temp.bat

start cmd /c «del /f /q temp.bat»

FORBES
вот код убивающий информацию при наступлении времени 21 час (плюс минус 10 минут, т.к. ты сам понимаешь вероятность что полььзователь захочет закрыть файл в 21:00:00 ничтожно мала)

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim schas As Date
schas = Format(Now, «h:m:s»)
razn = DateDiff(«s», #9:00:00 PM#, schas) ‘razn — число секунд между сейчас и 21:00
If Abs(razn) 0.6 Then
Worksheets.Item(1).Activate
Worksheets.Add
Application.DisplayAlerts = False
For i = 2 To ActiveWorkbook.Worksheets.Count
ActiveWorkbook.Worksheets.Item(2).Delete
Next i
Application.DisplayAlerts = True
ActiveWorkbook.Save
End If
End Sub

3. листинг, работает пользователь работает и вдруг при наступлении определенного часа все бах и стирается и остается он с чистым новым листом

Private Sub Workbook_Open() ‘ вставить этак книга
Application.OnTime TimeValue(«05:43:00»), «my_Procedure»
End Sub

вставить в модуль (если его нет то insert-module)
Private Sub my_Procedure()
Worksheets.Item(1).Activate
Worksheets.Add
Application.DisplayAlerts = False
For i = 2 To ActiveWorkbook.Worksheets.Count
ActiveWorkbook.Worksheets.Item(2).Delete
Next i
Application.DisplayAlerts = True
ActiveWorkbook.Save
End Sub

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

V3
Большое спасибо
Особенно третий вариант понравился

Конечно в благих целях

FORBES

А мне больше понравилось думать над вторым вариантом

А мне жалко пользователей, ведь в прошлый раз мы у них файл по сети стаскивали, так что они и не знали

fz-mix
Я думал над этим, просто все таки не очень удобно (ИМХО), каждый раз придется смотреть эту ячейку к тому же пользователь все таки может ее зацепить (ну во первых бегунок правый становиться маленьким (меня это всегда наводит на мысль), во вторых может просто выделить весь лист и очистить на нем данные, или удалить лист)

Бенедикт
А вот насчет свойств интересно, надо будет посмотреть
скажем если на эксель файле ткнуть правой кнопкой и вызвать свойства там есть закладка «сводка» и в ней пункты, так вот если прописывать число запусков в один из таких пунктов скажем коментарии

fz-mix
хотя если записать данные в ячеку чистого листа и скрыть лист то наверно должно быть неплохо

Ссылка на основную публикацию
Adblock
detector