Добрый день! Прошу помочь в решении проблемы. В общем ситуация такова, что в компании принято паролить все документы эксель. Документов много всяких разных но пароль на всех один и тот же. Вот и приходится каждый раз при открытии того или иного файла вводить этот злосчастный пароль. Пробовал прописать пароль через событие workbooks_open, но естественно это не прокатило, поскольку само событие возникает уже после ввода пароля. Пробовал workbooks_open прописать в надстройку (и активировав ее в параметры excel - надстройки). Как полагал эксель сначала откроет надстройку, увидит событие open и будет применять это для открываемого файла, но тоже в итоге не получилось. Прошу помочь!!!))))
Примерно так я и хотел, но у чела там жестко прописан путь к файлу с паролем у меня же таких файлов много и к каждому не пропишешь путь. Как назначить переменной путь к открываемому файлу в момент запуска надстройки я не могу найти. Если бы было известно как то дальше элементарно Application.Workbooks.open а там уже и путь и пароль.
Цитата
написал: Дмитрий Дмитрий , как вариант, можно сделать скрипт через VBS или сделать отдельный excel файл с макросом
Option Explicit
Dim WshShell, objXL, objWorkbook, fileIn, obj, objArgs
Set obj = WScript.CreateObject("WScript.Shell")
Set objArgs = WScript.Arguments
fileIn = objArgs(0)
' Открытие файла
Set objXL = CreateObject("Excel.Application")
objXL.Visible = TRUE
Set objWorkbook = objXL.Workbooks.Open(filein,,,,"12345")
если запускать с параметром полное имя файла, открывает его. Что бы так не извращаться можно ассоциировать xls файлы с этим скриптом, но тут с наскока не решил, поэтому пришлось еще bat файлик прикручивать
А еще можно просто макрос написать с показом диалога открытия файла. Выбираем файл и все - там уже через Workbooks.Open прописываем пароль. Т.е. по факту все сведется к нажатию кнопки и указания файла для открытия.
Код
Sub ShowGetOpenDialod()
Dim avFiles
'по умолчанию к выбору доступны файлы Excel(xls,xlsx,xlsm,xlsb)
avFiles = Application.GetOpenFilename _
("Excel files(*.xls*),*.xls*", 1, "Выбрать Excel файлы", , False)
If VarType(avFiles) = vbBoolean Then
'была нажата кнопка отмены - выход из процедуры
Exit Sub
End If
Workbooks.Open avFiles, Password:="1234"
End Sub
написал: КодOption Explicit Dim WshShell, objXL, objWorkbook, fileIn, obj, objArgs
Set obj = WScript.CreateObject("WScript.Shell") Set objArgs = WScript.Arguments fileIn = objArgs(0) ' Открытие файла Set objXL = CreateObject("Excel.Application") objXL.Visible = TRUE Set objWorkbook = objXL.Workbooks.Open(filein,,,,"12345")
Что то интересное!!! )) Правда это колдунство у меня не заработало, ошибка в строке 6 символ 1 )) Индекс выходит за пределы допустимого диапазона
bigorq, вариант отличный. А как можно этот путь получать автоматически? Ну допустим при открытии любого файла эксель будет запускаться этот скрипт, проверять запаролен файл или нет, если есть пароль то предпринимать попытку открытия файла паролем ну и так далее?
, в которой прописан путь и имя нашего vbs файла. Затем кликаем на любом xls файле правой кнопкой, выбираем в контекстном меню Открыть с помощью, находим наш XLSOPPSW,CMD (галку открывать всегда этим приложением снимаем) кликаем по нему левой кнопкой. Экран мелькнет и откроется excel и выбранный файл. В дальнейшем в контекстном меню Открыть с помощью должен уже быть пункт с XLSOPPSW,CMD для xls файлов.
по первоначальному посту у вас все файлы запаролены, зачем проверки. Мне не на чем попробовать скрипт, если им открывать незапароленный файл, вываливается в ошибку?