Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.02.2013, 14:01   #1
Vja4eslav
Пользователь
 
Регистрация: 13.08.2011
Сообщений: 90
Вопрос Как при защите листа разрешить пользование автофильтром с помошью VBS

Здравствуйте, у меня не получается разрешить использование автофильтра после защиты листа с помощью скрипта VBScript.
При помощи VBA это делается без проблем:
ActiveSheet.Protect "1234" DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFiltering:=True
Но в файле .vbs это не прокатывает.
Подскажите, пожалуйста, как прописать подобное в VBScript ?
Vja4eslav вне форума Ответить с цитированием
Старый 22.02.2013, 14:24   #2
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

Vja4eslav, попробуйте код ниже изменить под свою задачу. Недостающие команды можно получить сначала в программе "Excel", а затем уже команды переносить в VBS-файл.

Код вставляет число "1" в активную Excel-книгу в активный лист в ячейку "A1":
Код:
dim myExcel
dim bkActive
dim shActive
    
'1. Даём имя "myExcel" запущенной программе "Excel".
'Через это имя будем обращаться к программе "Excel".
Set myExcel = GetObject(,"Excel.Application")

'2. Даём имя "bkActive" активной Excel-книге.
set bkActive = myExcel.ActiveWorkbook

'3. Даём активному листу имя "shActive".
Set shActive = bkActive.Activesheet
    
'4. Помещаем в ячейку "A1" число "1".
shActive.Range("A1").Value = 1

Примечание:

Особенности "VBS" в отличие от "VBA":
  1. Нельзя при создании переменных задавать тип данных переменных: "dim bkActive As Object".
  2. Нельзя в коде указывать названия параметров функций. В функции "GetObject" я хотел так сделать, но "VBS" не разрешил:
    Код:
    Set bkActive = GetObject(Class:="Excel.Application")
  3. Сделал "Sub ... End Sub" - ничего не происходило.

Последний раз редактировалось Скрипт; 22.02.2013 в 15:27.
Скрипт вне форума Ответить с цитированием
Старый 22.02.2013, 14:44   #3
Vja4eslav
Пользователь
 
Регистрация: 13.08.2011
Сообщений: 90
По умолчанию

Уважаемый СКРИПТ, Ваш код я прописал в VBS следующим образом:

Set ExcelApp = CreateObject("Excel.Application")
ExcelApp.Visible = True
ExcelApp.WorkBooks.Open "C:\Documents and Settings\Администратор\Рабочий стол\Новая папка\Лист Microsoft Excel.xls"
ExcelApp.Windows("Лист Microsoft Excel.xls").Activate
ExcelApp.ActiveSheet.Unprotect "1234"
ExcelApp.ActiveSheet.Range("A1").Va lue = 1
ExcelApp.ActiveSheet.Protect "1234"
ExcelApp.DisplayAlerts = False
ExcelApp.ActiveWorkbook.Close True
ExcelApp.Quit

With ExcelApp......End With забыл применить, ну да ладно.

Всё нормально отработало. А вот как правильно написать в VBScript разрешение использования автофильтра после защиты листа?

Последний раз редактировалось Vja4eslav; 22.02.2013 в 14:47.
Vja4eslav вне форума Ответить с цитированием
Старый 22.02.2013, 14:48   #4
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

Пункт 1

Vja4eslav, здесь:
Код:
ActiveSheet.Protect "1234" DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFiltering:=True
имена параметров не пишите - "VBS" не воспринимает имена параметров. Если параметр вообще не нужен, то вместо параметра ставьте запятую. Если "VBS" не разрешит слово "True", то замените "True" числом "1".


Пункт 2
Цитата:
Vja4eslav: With ExcelApp......End With забыл применить, ну да ладно.
в сообщении #3 в коде не нужно использовать "With ... End With". Если хотите использовать "With ... End With", то код будет такой:
Код:
Set ExcelApp = CreateObject("Excel.Application")
With ExcelApp
    .Visible = True
    .Workbooks.Open "C:\Documents and Settings\Администратор\Рабочий стол\Новая папка\Лист Microsoft Excel.xls"
    .Windows("Лист Microsoft Excel.xls").Activate
    .ActiveSheet.Unprotect "1234"
    .ActiveSheet.Range("A1").Va lue = 1
    .ActiveSheet.Protect "1234"
    .DisplayAlerts = False
    .ActiveWorkbook.Close True
    .Quit
End With

Последний раз редактировалось Скрипт; 22.02.2013 в 15:23.
Скрипт вне форума Ответить с цитированием
Старый 22.02.2013, 14:54   #5
Vja4eslav
Пользователь
 
Регистрация: 13.08.2011
Сообщений: 90
По умолчанию

Немножко не понял: вместо каких параметров ставить запятые?
Vja4eslav вне форума Ответить с цитированием
Старый 22.02.2013, 14:57   #6
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

Пункт 1

Vja4eslav, в этой команде:
Код:
ActiveSheet.Protect "1234" DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFiltering:=True
следующие параметры:
"1234"
DrawingObjects
Contents
Scenarios
AllowFiltering


Пункт 2

В сообщении #1 у вас неправильно записана команда, правильно так:
Код:
ActiveSheet.Protect "1234", DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFiltering:=True

Последний раз редактировалось Скрипт; 22.02.2013 в 15:01.
Скрипт вне форума Ответить с цитированием
Старый 22.02.2013, 15:05   #7
Vja4eslav
Пользователь
 
Регистрация: 13.08.2011
Сообщений: 90
По умолчанию

То есть надо написать:
ExcelApp.ActiveSheet.Protect 1, 1, 1, 1 ?
Vja4eslav вне форума Ответить с цитированием
Старый 22.02.2013, 15:06   #8
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

Vja4eslav, да. Если второй, третий и четвёртый параметр вообще не нужен, но нужно указать, например, пятый по счёту параметр, то нужно просто запятые ставить, например:
Код:
ExcelApp.ActiveSheet.Protect 1, , , , 1

Последний раз редактировалось Скрипт; 22.02.2013 в 15:10.
Скрипт вне форума Ответить с цитированием
Старый 22.02.2013, 15:08   #9
Vja4eslav
Пользователь
 
Регистрация: 13.08.2011
Сообщений: 90
По умолчанию

В этом случае ставится пароль на защиту в виде "1", а применение автофильтра по прежнему не разрешено.
Может я туплю где-нибудь?
Vja4eslav вне форума Ответить с цитированием
Старый 22.02.2013, 15:11   #10
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Код:
expression.Protect(Password, DrawingObjects, Contents, Scenarios, UserInterfaceOnly, AllowFormattingCells, AllowFormattingColumns, AllowFormattingRows, AllowInsertingColumns, AllowInsertingRows, AllowInsertingHyperlinks, AllowDeletingColumns, AllowDeletingRows, AllowSorting, AllowFiltering, AllowUsingPivotTables)
Запятые считайте сами
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как разрешить играть в игры soktahan Компьютерное железо 13 10.05.2012 08:21
группировка при защите листа nastya007 Microsoft Office Excel 46 21.03.2011 11:35
отображение данных первого листа, при активации ячейки второго листа Akmal-Sharipov Microsoft Office Excel 4 03.12.2010 14:48
Группировка строк при защите листа tae1980 Microsoft Office Excel 1 27.05.2010 14:23
как заставить работать макрос при защите листа qwertyuzer Microsoft Office Excel 4 11.02.2009 15:20