Vba excel скрыть открытый файл
Я хочу искать существующие файлы Excel с макросом, но я не хочу отображать эти файлы, когда они открываются кодом. Есть ли способ открыть их "на заднем плане", так сказать?
Не уверен, что вы можете открыть их невидимо в текущем экземпляре excel
вы можете открыть новый экземпляр excel, хотя, скрыть его, а затем открыть книги
Как и другие опубликовали, убедитесь, что вы очистите после того, как закончите с любыми открытыми книгами
Если это соответствует вашим потребностям, я бы просто использовать
с дополнительным преимуществом ускорения кода вместо замедления его с помощью второго экземпляра Excel.
хотя у вас есть ответ, для тех, кто находит этот вопрос, также можно открыть электронную таблицу Excel в качестве хранилища данных JET. Заимствование строки подключения из проекта, в котором я ее использовал, будет выглядеть примерно так:
обратите внимание, что" RegistrationList " - это имя вкладки в книге. Есть несколько учебников, плавающих в интернете с подробностями того, что вы можете и не можете сделать, получая доступ к листу таким образом.
просто думаю, я добавлю. :)
чтобы открыть книгу, скрытую в существующем экземпляре Excel, используйте следующее:
гораздо более простой подход, который не включает в себя управление активными окнами:
из того, что я могу сказать, индекс Windows в книге всегда должен быть 1 . Если кто-нибудь знает о каких-либо условиях гонки, которые сделают это неправдой, пожалуйста, дайте мне знать.
проблема с ответами iDevlop и Ashok заключается в том, что фундаментальной проблемой является недостаток дизайна Excel (по-видимому), в котором метод Open не уважает приложение.ScreenUpdating установка False. Следовательно, установка его в False не имеет никакой пользы для этой проблемы.
Если решение Patrick Mcdonald's слишком обременительно из-за накладных расходов на запуск второго экземпляра Excel, то лучшим решением, которое я нашел, является минимизация времени открытия книга видна при повторной активации исходного окна как можно быстрее:
откройте их из нового экземпляра Excel.
вы должны помнить, чтобы очистить после того как вы закончите.
откройте книгу как скрытую, а затем установите ее как "сохраненную", чтобы пользователи не запрашивались при закрытии.
это несколько производная от ответа, опубликованного Ашоком.
делая это таким образом, хотя вам не будет предложено сохранить изменения обратно в файл Excel, из которого Вы читаете. Это здорово, если файл Excel, из которого Вы читаете, предназначен в качестве источника данных для проверки. Например, если книга содержит имена продуктов и данные о ценах, она можно скрыть и показать файл Excel, представляющий счет-фактуру с раскрывающимися списками для продукта, проверяемого из этого прайс-листа.
затем вы можете сохранить прайс-лист в общем месте в сети и сделать его доступным только для чтения.
в excel скройте книги и сохраните их как скрытые. Когда ваше приложение загружает их, они не будут отображаться.
редактировать: после повторного прочтения, стало ясно, что эти книги не являются частью вашего приложения. Такое решение было бы неуместным для пользовательских книг.
Здравствуйте. Скрывайте не ярлыки листа, а сами листы, с установкой им свойства Visible=2. А VBA проект запарольте. Поищите- "Как сделать лист очень скрытым"
Здравствуйте. Скрывайте не ярлыки листа, а сами листы, с установкой им свойства Visible=2. А VBA проект запарольте. Поищите- "Как сделать лист очень скрытым" gling
gling, Если я скрою листы, тогда формулы работать не будут,они у меня разбросаны по всей рабочей книге.
Не вариант.
gling, Если я скрою листы, тогда формулы работать не будут,они у меня разбросаны по всей рабочей книге.
Не вариант. tasdel
Если скрывать никак не хотите, то
Можно защитить лист2 и сделать там белый шрифт (см первый файл)
Можно повесить на все листы, кроме нужных к просмотру, вот такой макрос (см. второй файл)
[vba]
Private Sub Worksheet_Activate()
Sheets("Лист1").Activate
ActiveWindow.DisplayWorkbookTabs = False
End Sub
Если скрывать никак не хотите, то
Можно защитить лист2 и сделать там белый шрифт (см первый файл)
Можно повесить на все листы, кроме нужных к просмотру, вот такой макрос (см. второй файл)
[vba]
Private Sub Worksheet_Activate()
Sheets("Лист1").Activate
ActiveWindow.DisplayWorkbookTabs = False
End Sub
Если скрывать никак не хотите, то
Можно защитить лист2 и сделать там белый шрифт (см первый файл)
Можно повесить на все листы, кроме нужных к просмотру, вот такой макрос (см. второй файл)
[vba]
Private Sub Worksheet_Activate()
Sheets("Лист1").Activate
ActiveWindow.DisplayWorkbookTabs = False
End Sub
Отключаю макросы и
пользователь зайдет в параметры ексель, то он
спокойно может поставить галочку (скрыть или отобразить ярлыки листов) и вся моя защита накрывается медным тазом.
Отключаю макросы и
пользователь зайдет в параметры ексель, то он
спокойно может поставить галочку (скрыть или отобразить ярлыки листов) и вся моя защита накрывается медным тазом.
Отключаю макросы и
пользователь зайдет в параметры ексель, то он
спокойно может поставить галочку (скрыть или отобразить ярлыки листов) и вся моя защита накрывается медным тазом.
RAN, Прикольнулся с меня. Я сам с самого себя на следующий день посмеялся.
Да,ты абсолютно прав! При отключении макросов,это все не работает.Выходит тема не закрыта.
По правилам форума данную тему можно продолжить или создать новую?
Может как вариант: при вводе пароля пользователем в textbox, отображаются очень скрытые листы,после заполнения данных пользователь их скрывает.
Может есть еще какая-нибудь альтернатива?
RAN, Прикольнулся с меня. Я сам с самого себя на следующий день посмеялся.
Да,ты абсолютно прав! При отключении макросов,это все не работает.Выходит тема не закрыта.
По правилам форума данную тему можно продолжить или создать новую?
Может как вариант: при вводе пароля пользователем в textbox, отображаются очень скрытые листы,после заполнения данных пользователь их скрывает.
Может есть еще какая-нибудь альтернатива? tasdel
Эти макросы помогут вам закрыть все открытые файлы Excel, оставив лишь текущий файл.
Выбирайте любой из них - они мало чем отличаются.
Первый оставляет открытой только активную книгу, независимо от того, из какого файла запущен этот макрос:
Второй макрос оставляет открытой только ту книгу, из которой запущен этот самый макрос, независимо от того, какая книга активна на момент запуска:
Третья версия макроса отличается от первой лишь тем, что все файлы закрываются с сохранением изменений:
(первый макрос в этом случае выдаёт диалоговое окно - сохранять файл, или нет)
Ну и четвертый вариант - тоже закрывает все открытые файлы, только изменения в этих файлах не сохраняются:
Комментарии
сильно Sub CloseAllWorkbooks3() выручил. спасибо!
В такой комбинации, без дополнительных кодов в файле, вроде работает
Private Sub Workbook_Open() ' срабатывает при открытии
ThisWorkbook.Windows(1).Visible = False ' скрываем окно файла, он становится невидимым
Application.OnTime Now + 1 / 86400, "CloseThisFile" ' через секунду запустим макрос
ThisWorkbook.Windows(1).Visible = True ' открываем окно файла, он становится видимым
End Sub
' этот код в стандартном модуле
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 такой код (в модуль ЭтаКнига)
Когда вручную открываешь файл, - всё норм, файл тут же закрывается.
А когда я по ссылке пытаюсь открыть этот файл, Excel сначала предупреждение одно выводит, потом другое (во втором - что файл опасен, и всё такое), а потом Excel просто зависает почему-то
Причин не знаю, — ни разу с подобной необходимость не сталкивался, чтобы закрывать макросом файл, открытый по гиперссылке.
Я бы попробовал сделать так: (не проверял)
Тимон, я же вам сказал, - с данным конкретным макросом все в порядке.
В нём не может быть ошибок, если рядом с этим макросом не написать какой-нибудь код, который с ним будет конфликтовать.
можно ли получать не имена открытых книг, а имена открытых файлов 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, можно выспользоваться таким кодом:
(скрываются все панели инструментов в Excel 2003 и лента в Excel 2007; скрываются ярлычки листов, линейки и полосы прокрутки; изменяется название окна приложения)
При необходимости можно отображать нужную панели инструментов, в то время, как остальные панели будут скрыты)
Чтобы скрывать панели инструментов Excel 2003 и ленту Excel 2007 только для одной книги,
поместите в модуль ЭтаКнига следующий код:
(при переключении на другой файл интерфейс Excel будет восстанавливаться)
См. пример в прикреплённом файле:
Комментарии
Добрый день! А можно сделать так, чтобы вместо надписи "наше окно" отображалось имя файла? Заранее, Спасибо!
Доброго времени суток! Огромное спасибо за Ваш пример, с удовольствием им пользуюсь и все работает!
Но есть один вопрос, при переходе на другую книгу Excel все восстанавливается, однако бывает момент когда панель инструментов видна но не "Зафиксирована".
Подскажите, пожалуйста, можно ли добавить в приведенный выше код алгоритм проверки: если в новой книге панель зафиксирована, то ничего не делаем, если нет, то собственно фиксируем?
Ирина, судя по описанию задачи, с вероятностью 99% вы это делаете в целях мошенничества ("угадаю результат игры заранее")
А мошенникам я не помогаю, так что ваш вопрос останется без ответа.
Добрый день! Мой макрос открывает определенные листы при наборе разных паролей. При закрытии файла срабатывает Private Sub Workbook_BeforeClose(Cancel As Boolean)- скрывает все листы, кроме Стартового, защищает лист и файл паролем. Мне нужно, чтобы при закрытии он убирал и Панель Экселя. и только при открытии Паролем администратора файла (в теле основного макроса) - была видна Панель. В Private Sub добавила строку - Application.DisplayFullScreen = False. В основном модуле - Application.DisplayFullScreen = True. не работает((
Как это можно сделать? Заранее большое спасибо! Ирина
Спасибо за ответ, макрос скрытия всех элементов (написанный Вами) срабатывает , далее запускается макрос макрос формирования панели инструментов( так же Ваш) , но в конечном итоге Вкладка Надстройка не видна на ленте, т.е. Условие "При необходимости можно отображать нужную панели инструментов, в то время, как остальные панели будут скрыты" НЕ выполняется.
В ексель я соединил два макроса Скрытие панели инструментов и формирование новой панели.Есть подозрение , что В Ексель 2010 эта процедура не работает.
Не получается что? Макрос запустить? или что-то другое?
я не телепат.
на форумах спросите, прикрепив свой файл с макросами, - тогда быстро помогут
(без файла - непонятно, что ы вас там за макросы, и как вы их запускаете)
Добрый день.Вы пишите"Тут ничего сложного нет - сначала запускаете макрос скрытия интерфейса, а следом за ним - макрос формирования панели инструментов" У меня такой вопрос-работает ли для Эксель 2010?
Я что только не пробовал, не получается. А все форумы дают ссылку на вашу статью.
За ранее спасибо.
Joann, с этим помочь не смогу (не знаю). Возможно, что никак не проверить (только через WinAPI если, - но там весьма сложный код)
Обратитесь на форумы по Excel, — может, там кто подскажет.
Каким условием проверить: Свернута-ли (не скрыта а свернута до пунктов меню) в настоящий момент лента?
Спасибо, у меня (отдельно Ваш код) тоже работает. Открываю книгу и на форме жму сразу "Выход" (без создания новой книги): закрывается. Открываю другую книгу - весь интерфейс на месте. Но стоит скопировать пару (Array) листов (только значения) и вставить в новую по FileSaveAs (новая активна в этот момент), закрыть старую без сохранения (срабатывает _BeforeClose, где и сидит RestoreInterface), то остаётся новая книга без формула и статус бара. Добавлял отдельно эти строки в конце процедуры уже после закрытия старой книги- не работает.
Только что проверил макрос в Excel 2003 и Excel 2010
Описанная вами проблема у меня не проявляется.
За видимость указанных панелей отвечает эта строка кода:
Пользуюсь кодом без .ExecuteExcel4Macro (для 2003). Есть непонятка: если в книге со спрятанным интерфейсом (а заодно и само окно программы), но видимой формой создать новую книгу и закрыть первую книгу с возвратом всего спрятанного, то остаётся видимой новая книга, но без StatusBar и FormulaBar. Приходиться ручками ставить видимость обратно. Почему так? Решение? (новая книга без макросов). Спасибо.
Это всё настраивается в том же XML, где вы прописали своё меню (задаётся видимость остальных вкладок) - никаких макросов тут не надо.
Или хотя бы чтоб оно по умолчанию грузилось.
спасибо! я и так свое меню сделал, только надо, чтобы только оно грузилось и все
Данный код может только скрыть \ отобразить ленту целиком.
Вообще, этот макрос разрабатывался для Excel 2003, просто в него была добавлена опция для Excel 2007.
Вкладки на ленте добавляются \ скрываются \ отображаются при помощи XML
Поищите в яндексе Ribbon editor
Т.е. вы в свой файл XLSM (XLSB) встраиваете этот XML - и при открытии файла автоматически отобразятся или скроются нужные вкладки.
PS: Сейчас уже можно не оставлять совместимость с Excel 2003 - времена его широкого распространения прошли.
Так что делайте своё меню (ленту) для Excel 2007\2010\2013, а не панели инструментов (которые работают и в старых версиях Excel).
а можно ли при загрузке книги оставить нужную закладку в ленте (например созданную самим "закладка1")?
Да, спасибо, панели восстановились, правда для этого пришлось макрос переносить в новый файл. Из старого это не получалось.
Спасибо за сайт. Он очень полезен нам, не самым большим специалистам в VBA.
Возник еще один вопрос. Если из файла в котором скрыты панели и окно переименовано, например, в "Наше окно", должен запускаться еще один файл, то возврат к основному файлу в макросе вызывает ошибку. Может в обращении к новому файлу следует изменить его имя на новое "Наше окно"?
Protsiv, панели не пропали, - они просто скрыты.
Впрочем, это неудивительно, - если вы запустили макрос для скрытия этих панелей.
Чтобы отобразить все панели инструментов, откройте прикреплённый к статье файл, и запустите макрос «ВосстановитьИнтерфейс»
У меня после выполнения этих макросов пропали все панели инструментов и все панели управления в Эксель-2003. Весит только строка формул.
Как вернуть все в стандартное состояние?
Тут ничего сложного нет - сначала запускаете макрос скрытия интерфейса, а следом за ним - макрос формирования панели инструментов
Private Sub Workbook_Open() ' открытие книги
УбратьВсё
ФормированиеПанелиИнструментов
End Sub
ВОТ ЭТА ЗАМЕЧАТЕЛЬНАЯ МЫСЛЬ! НО НЕ ПОЛУЧАЕТСЯ ОСТАВИТЬ ТОКА МЕНЮ НАДСТРОЕК, ПОЧЕМУ?
Поддерживаю. Аналогичная проблема. Я на свою панельку добавил кнопку сохранить, нажимаю ее и закрываю файл но все равно выскакивает окошка с предложением сохранить при этом уже отображаются заголовки строк и столбцов, листы, и пателька (файл, правка, вид. ). Подскажите как убрать запрос на сохранение а чтобы сохраняло автоматически без запроса?
У меня та же проблема в верхней части экрана синяя строка то появляется то нет.
Прекрасный сайт! Спасибо админу!
Есть глюк. Закрываем файл, в ответ на запрос о сохранении жмем "отмена" и разворачиваем ленту. Как избавиться? И как оставить кнопку печать? В VBA чайник, прошу объяснить подробно.
В 2003 все понятно со скрытием меню и программированием своего
А вот в 2007 и 2010 удается скрыть ленту, а дальше что-то я торможу как создать свое меню.
Вопрос еще такой: как запретить пользователю залезать в "параметры" в 2007 и 2010? и можноли отключить эту круглую кнопку в 2007 и "файл" в 2010?
Ваш сайт исключительно полезен для меня.
Лучшего я пока не встречал
Спасибо
С уважением, Raikhman
иа моем компе 2 версии офиса 2003 и 2010 (приходится иногда пользоваться и одной и другой)
активная всегда одна из них и это создает проблемы
есть такой код на vb6
Public Sub Main()
'On Error Resume Next
'Проверяем версию Excel
Set xlApp = New Excel.Application
xlApp.Visible = True
If Val(xlApp.Version) <> 14 Then
MsgBox "Необходим Excel-2010"
xlApp.Quit
Set xlApp = Nothing
Exit Sub
End If
если активен excel 2010 то продолжаем, а если нет, то выходим.
Проблема: если активен 2003, то для работы программы приходится переустанавливать десятку - это весьма нудно. гдето в реестре чтото есть для быстрого переключения, или чтото еще, но где?
Кроме Вас на форуме чтото все залипли
спасибо
Подскажите пожалуйста как скрыть не всю ленту, а только некоторые, конкретные вкладки, или как вариант, скрыть всю, а потом отобразить нужные.
Спасибо.
Тут ничего сложного нет - сначала запускаете макрос скрытия интерфейса, а следом за ним - макрос формирования панели инструментов
"При необходимости можно отображать нужную панели инструментов, в то время, как остальные панели будут скрыты)"
Может быть как это сделать всем очевидно, но я в затруднении.. нужно решение по котором оставалась бы только создаваемая пользовательская панель.. А как??
Сайт очень полезный и информативный!
Отличный макрос! Разработчику респект! Есть только один недостаток. При переходе с одного листа открытой книги на другой, а потом возврат на предыдущий - в верхней части экрана под заголовком окна появляется странная полоса. После выполнения последовательно макросов ВосстановитьИнтерфейс, УбратьВсё полоса пропадает, а потом снова появляется. Кроме того в Таблице настройки панелей инструментов появляется странное пустое окно выбора панели (без наименования, удалить которое невозможно. Можете что-либо прояснить по данному багу.
С уважением
Вадим
а можно проще, если надо только скрыть панели
Можно и так, конечно, но результат будет не совсем тот.
Во-первых, остаются видимыми заголовки строк и столбцов, полосы прокрутки, ярлычки листов, а в Excel 2003, помимо этого, еще и панели инструментов.
Так что упрощённый способ не даст такого результата, которого можно добиться при использовании функции ChangeInterface
а можно проще, если надо только скрить панели:
Private Sub Workbook_Open()
Application.DisplayFullScreen = True
End Sub
Если вы работаете с книгами Excel древних форматов (таких, например, как Excel 4),
то в Excel 2010 вы можете столкнуться с проблемой, что редактирование этих файлов по-умолчанию запрещено.
В настройках Excel 2010 для этого предусмотрены специальные опции (скриншот)
Мало того, что Excel блокирует редактирование этих устаревших файлов,
так ещё и макросы начинают вести себя очень странно
(например, если активен файл Excel4, простейший макрос чтения пути текущего файла не запускается)
Избежать проблем при работе с такими файлами (а проблемы возможны, если вы обрабатываете макросом множество файлов, полученных от разных организаций), можно, если при открытии надстройки (файла с макросами) выполнить следующий код:
Достаточно поместить вызов этого макроса в процедуру Workbook_Open, - и ограничения будут сниматься при каждом запуске вашей надстройки.
Аналогично можно сделать макрос, включающий опцию «Доверять доступ к объектной модели проектов VBA»:
Этот код припишет в реестре Windows (в ветке с настройками безопасности Excel) необходимые параметры, и вы макросом сможете обращаться к свойствам проекта VBA
(например, чтобы выгрузить код макросов в текстовый файл, изменить кодовое имя листа или программно отредактировать код макросов, программно добавить элементы управления на форму, и т.д. и т.п.)
Отключить доступ тоже можно - достаточно поменять в макросе записываемое в реестр значение (с 1 на 0):
Многие пользователи надстроек (и других файлов Excel, содержащих макросы), при каждом запуске книги Excel во всплывающем окне жмут кнопку «Включить макросы».
Чтобы избавить пользователя от ежедневного уведомления об «опасных» макросах, можно использовать такой код:
После выполнения этого макроса, уровень безопасности в Excel будет изменен на «низкий» (при следующем запуске Excel), и уведомления об отключенных макросах (с предложением их включить) появляться не будут.
PS: C одной стороны, нехорошо без уведомления пользователя изменять настройки безопасности его программ.
Но, с другой стороны, макровирусов давно нет, а я сам не пишу вредоносные программы, так что считаю использование такого макроса допустимым.
Комментарии
Добрый день. Я собираюсь распространять некие рекомендации на каждый день в формате эксель.
Довольно частая проблема - блокирована работа макросов + старые версии эксель.
Пожалуйста напишите мне код в котором при открытии книги я разрешаю работу макросов для этой книги.
Для других, я так понимаю разрешения не будет. но, мне надо, что бы это работало "железно" и у всех.
И еще одна проблема. Одна из моих пользовательниц пользуется яблочным компьютером. Там макросы вообще не идут. Делать что?
Чтобы избавить пользователя от ежедневного уведомления об «опасных» макросах, можно использовать такой код:
-----------------------------------------
Sub Enable_AccessVBOM_and_Macro()
On Error Resume Next
Key$ = "HKEY_CURRENT_USER\Software\Microsoft\Office\" & Application.Version & _
"\Excel\Security\"
' включаем программный доступ к объектной модели проекта VBA
CreateObject("WScript.Shell").RegWrite Key$ & "AccessVBOM", 1, "REG_DWORD"
' ставим низкий уровень безопасности (применится после перезапуска Excel)
CreateObject("WScript.Shell").RegWrite Key$ & "VBAWarnings", 1, "REG_DWORD"
End Sub
-----------------------
Достаточно поместить вызов этого макроса в процедуру Workbook_Open
======================================================================
Сам нашёл создаем параметр тут
[HKEY_CURRENT_USER\ Software\Microsoft\ Office\14.0\word\security]
Подскажите при добавлении в реестр строку [HKEY_CURRENT_USER\ Software\Policies\Microsoft\ Office\14.0\word\security]
"VBAWarnings"=dword:00000004 (при любом значении)
в самом ворде меню "параметры макросов" становиться не активной, как её оставить активной?
С хабра - "Исследователями в области информационной безопасности был обнаружен новый тип ransomwave — вредоносной программы, шифрующей пользовательские файлы и требующей выкуп в bitcoin. Новый криптовымогатель, который сами создатели назвали «locky», распространяется не совсем стандартным для подобного ПО способом — при помощи макроса в Word-документах. " , так что срочно закрываем макросы
Так! У мене була таже проблема! При програмном створенні нової книги потрібно було вставити в неї макрос і процедуру автозапуску макросу WorkBook_Open або Auto_Open цієї книги в подальшому при відкритті книги. Для цього потрібно встановити довірений доступ до проекту! Приклад функції Disable_AccessVBOM автора статті не деє належного результату: тобто після виконання тієї функції та подальшому зверненні до проекту книги для запису процедур (макросів) спливало повідомлення про помилку: "доступ до проекту не є довіреним . ". Запропонована автором статті функція не дає належного результату, як я припускаю, з тієї причини, що в Office встановлений подвійний ключ на управління доступом до проекту, пов'язаний з самою формою "Безпека макросів". Я вирішив проблему, з Божою допомогою, через запуск форми і її управління за допомогою функції SendKeys. Вибачте, я не буду приводити алгоритм у запобігання того. щоб він опинився в злих руках! Якщо у Вас гарні цілі. то експерементуйте.
Уважаемый админ. Снова Я. Недавно переставил Винду (пару часов назад), поставил 7 на всякий случай, чистую. Поставил Офис 2010, но так как должны выгружаться данные из програмки в Excel они не выгружаются все равно. (( Снова моргнет загрузка и тишина. Макросы разрешил, даже в устной форме))) но ничего.
Олег, я знаю в чем проблема (неверное значение 1-2 ключей в реестре Windows),
но мне лень писать вам инструкцию по поиску и правке этих ключей (на своём компе я бы разобрался, но с чужим компом проще не связываться)
Потому, самое простое решение в вашем случае, - снести все Office какие есть, и поставить только один (рекомендую Office 2010)
При этом все эти ключи перезапишутся, - и всё должно заработать.
Если не поможет, - то проблема в самой этой вашей программе, запускающей файл Excel (недостаточно универсальная)
Спасибо большое за внимание к моей проблеме!
Дело вот в чем. До 2010 у меня стоял 2007 Office, была такая же ситуация, я подумал так же что проблема в установке и установил 2010. но как видно это не помогло.
Что может еще так влиять на такого рода действия?
Спасибо.
Олег, в вашем случае макросы ни при чём.
Ваша программа формирует файл Excel, и даёт Windows команду открытия этого файла.
Если файл не открывается, - значит, Excel некорректно установлен
(не прописаны 1-2 параметра в реестре, отвечающие за команду открытия файлов Excel)
Кто подскажет? Ситуация такая. Есть программа в которой делаю различные операции, а когда нажимаю кнопку Print, то должна запуститься Excel 2010 и все данные туда выкладываются . Так вот что, на других компах все норм работает, а у меня жмешь и ничего (на 1сек знак загрузки моргнет и все). Excel не запускается вообще. Макросы разрешены в безопасности. Что здесь может быть, куда необходимо нажимать. )) В Excel я как видите не силен. ((
а если даже после нажатия на "Включить содержимое", макросы не запускаются?
Есть другой вариант (если не хотите пересохранить файл после первого открытия):
код помещаете в модуль временного активного листа, процедуру запуска - в событие активации листа
После выполнения макроса удаляете этот временный лист - он удалится вместе с кодом, и макросов в файле не останется.
Дело в том, что я сделал книгу ексель, в которой находяться: Private Sub Workbook_Open в ЭтаКнига и 2 модуля. Эта книга должна автоматически открываться на 100 разных компьютерах. Задача стоит в том, чтобы по завршении работы программы все макросы удалялись из этой книги (мне это нужно для того, чтобы пользователи, которые будут открывать эту книгу постоянно не сталкивались с вопросом: "Эта книга содержит макросы. ". Программно ставить високий или низкий уровень макросов я не хочу (может у пользователей есть какие-то нюансы работы с ексель)). Версий ексель на этих компьютерах я не знаю, поэтому вариант с сохранением в формате xlsx мне не подходит.
jaroslav, надо перезапустить Excel, чтобы измененные в реестре настройки безопасности вступили в силу
(впрочем, если вручную менять в интерфейсе Excel - часто тоже перезапуск Excel требуется)
Т.е. не получится так, что макрос выполнили, я прям тут же начали программно работать с объектной моделью.
PS: а такие макросы, как Delete_Macroses, вообще не нужны
всё делается на порядок проще, одной строкой кода, - сохранением файла в формате XLSX
(Если нужен другой формат файла, но без макросов, то: создаете программно XLSX методом SAVEAS, закрываете созданный XLSX, открываете снова, сохраняете в нужном формате под нужным именем.)
А макросы, работающие с VBProject, советую использовать только на своем компе (для личных нужд) - где можно поставить галочку в настройках вручную.
Вы пишете:
"Аналогично можно сделать макрос, включающий опцию «Доверять доступ к объектной модели проектов VBA»:
Sub Enable_AccessVBOM() ' включает программный доступ к объектной модели проекта VBA
On Error Resume Next
Key$ = "HKEY_CURRENT_USER\Software\Microsoft\Office\" & Application.Version & _
"\Excel\Security\AccessVBOM"
CreateObject("WScript.Shell").RegWrite Key$, 1, "REG_DWORD"
End Sub
Этот код припишет в реестре Windows (в ветке с настройками безопасности Excel) необходимые параметры, и вы макросом сможете обращаться к свойствам проекта VBA".
Действильно этот макрос прописивает в реестре Windows (в ветке с настройками безопасности Excel) необходимые параметры, но галочку возле Доверять досту к Visual Basic Project в меню Надежные издатели меню Безопасность макросов вкладки безопасность меню Сервис/Параметры в Excel 2003 он не ставит. И при запуске макроса:
Sub Delete_Macroses()
Dim oVBComponent As Object, lCountLines As Long
If ActiveWorkbook.VBProject.Protection = 1 Then
MsgBox "VBProject ." & vbCrLf & _
" "
Exit Sub
End If
For Each oVBComponent In ActiveWorkbook.VBProject.VBComponents
On Error Resume Next
With oVBComponent
Select Case .Type
Case 1
.Collection.Remove oVBComponent
Case 2
.Collection.Remove oVBComponent
Case 3
.Collection.Remove oVBComponent
Case 100
lCountLines = .CodeModule.CountOfLines
.CodeModule.DeleteLines 1, lCountLines
End Select
End With
Next
Set oVBComponent = Nothing
End Sub
выдает ошибку 1004: "Отсутствует доверие к программируемому доступу к проекту Visual Basic". Подскажите, пожалуйста как программно поставить галочку в екселе возле Доверять досту к Visua Basic Project в меню Надежные издатели
По какой-то причине Enable_AccessVBOM() не выполняет, так сказать, полноценный запуск "доступа к объектной модели проекта VBA".
Т.е. макрос срабатывает, ошибок не выдает, но "доступа к объектной модели проекта VBA" все равно не предоставляет. Хотя галочка в соответствующем пункте меню проставляется.
При закрытии файла и последующем его открытии галочки опять нет.
А при запуске макросов в текущем файле выдает ошибку, что "доступ к объектной модели проекта VBA" не предоставлен.
Единственный путь полноценного выполнения макроса, который я нашел, это зайти в настройки, где галочка пункта "доступ к объектной модели проекта VBA" уже стоит и подтвердить нажатием "ОК".
Только тогда все срабатывает как надо.
Protsiv, конечно же, ваш макрос не сработает.
Для того и отключают в Excel макросы, чтобы они не запускались.
Для чего был написан этот код: Если пользователь, запустив ваш файл, увидит предупреждение о макросах, и нажмёт кнопку «Включить макросы для этого файла»,
то тогда (и только в этом случае) код сработает - и в следующий раз пользователь не будет видеть предупреждения о макросах.
Ну а если пользователь откажется от включения макросов - тут ничего не сделать, придётся запускать аналогичный код из скрипта VBS или приложения EXE.
Лично я в таких случаях поступаю проще: скрываю заранее все листы файла, оставляя только один видимый лист - инструкцию по включению макросов.
Тут у пользователя выбора нет - либо работать с файлом с макросами, либо вообще не пользоваться файлом.
Вставил этот макрос в Private Sub Workbook_Open()
Но ведь он даже не начинает выполняться, поскольку установлен высокий уровень безопасности, не говоря уже об автоматическом перезапуске Экселя.
Может я что-то делаю не так?
Александр, проблема решается путем исправления макроса.
Если макрос нормально написан - для него не должно быть разницы, защищены файлы, или нет.
Если есть необходимость - можете заказать доработку того макроса, или написание нового, под ваши нужды.
Суть проблемы - есть более 100 файлов excel, в каждом по одному листу, на книге установлена защита без пароля, при обработке макросом сбора листов из всех этих книг в одну книгу, он не работает ссылаясь на то, что книги защищены. Вопрос в том как это победить?
В статье речь про другую защиту.
Включить макросы из вашего файла не получится.
Тот код, что вы показали - это скрипт VBS (т.е. отдельный файл)
На ПланетеExcel неоднократно этот вопрос обсуждали - воспользуйтесь поиском.
PS: Если надо распространять файл с макросами, а объяснять способ их включения вы не хотите, - укомплектуйте ваш файл установщиком (файл exe), который скопирует файл Excel в нужную папку, и ярлык для него поместит в папку автозапуска Excel (или в папку Addins)
Тогда макросы будут работать без изменения уровня безопасности Excel.
Нашел вот такой вот СКРИПТ
Sub test()
Dim objXL
Dim Secur
Set objXL = CreateObject("Excel.Application")
objXL.Visible = TRUE
secur = objXL.AutomationSecurity
objXL.AutomationSecurity = 1
objXL.Workbooks.Open ( mid(Wscript.ScriptFullName,1,len(Wscript.ScriptFullName)-8) & "test.xls")
objXL.AutomationSecurity = secur
End Sub
Суть вопроса - в файле есть юзерформа, которая активизируется при открытии файла, но если защита включена, то соответственно форма не появится и необходимо будет сначала выключить защиту (т.е. включить макросы), а уж потом нажать на кнопку "Меню", чтобы отобразилась форма. Программа будет запускаться в большой Холдинг и по этому, чтобы не учить всех сотрудников сети включать макросы - хотелось бы их включать автоматически при открытии файла. Если есть такая возможность дописать код - буду очень Вам благодарен. Т.к. у меня не выходит. Заранее спасибо!
Смотря зачем отключать, и из какого файла.
Если вы хотите получить доступ к коду файла, при открытии которого будет выполняться снятие защиты,
то не знаю, применятся ли настройки сразу
(возможно, придётся макросом закрыть текущий файл, и открыть его снова)
А возможно ли если включена защита - отключить её сразу при открытии файла?
Можно. Это запуск cmd.exe. И запуск из нее Excel после двухсекундной задержки. Если быть точным, не Excel, а предварительно сохраненной рабочей области.
Я извиняюсь, а можно прокомментировать следующую строку кода:
Shell "cmd.exe /c" & "ping -n 2 localhost > null&&start C:\Temp\resume_3.xlw&&del C:\Temp\resume_3.xlw -f"
Пожалуйста!
У этого способа есть явные слабые места. Просто написал первое, что пришло в голову.
Я тоже думаю, что перезапускать Excel в данном случае смысла нет.
Но за код перезапуска Excel - огромное спасибо.
Сам бы не догадался до такого способа.
Осталось только придумать ситуацию, когда подобный перезапуск приложения может быть полезен.
Вообще, я подумал в спокойной обстановке и получается, что нет смысла передергивать Excel.
Читайте также: