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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.11.2009, 19:37   #1
kovalevskivf
Пользователь
 
Регистрация: 28.04.2009
Сообщений: 26
По умолчанию Использование события рабочего листа Worksheet_Change

Здравствуйте уважаемые друзья. Помогите, пожалуйста, решить проблему использования события рабочего листа Worksheet_Change. Мне нужно запретить возможность пользователям всякое редактирование ячеек, кроме ввода в них цифровых данных. То есть надо запретить перетягивание содержимого и автозаполнение. При этом лист защищен паролем, разрешено только выделение незаблокированных ячеек. Я пробовал использовать событие листа Worksheet_Change. Что-то типа такого:
Код:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cut Then
      MsgBox "Недопустимая операция", strTitle
    End If
End Sub
Однако ничего не получается. И как вернуть сделанные пользователем изменения. Может есть другой способ? Подскажите пожалуйста. Заранее благодарен.
kovalevskivf вне форума Ответить с цитированием
Старый 15.11.2009, 12:33   #2
tolikman
Форумчанин
 
Регистрация: 25.08.2008
Сообщений: 159
По умолчанию

может просить пользователя вводить данные через форму?
Не знаю как в 2003 (а думаю что тоже есть) но в 2007 есть в
параметры Excel -> Дополнительно есть куча полезных галочек, которые и запретят пользователю перетаскивать ячейки и тд.
Однако следует учесть, что эти параметры применяются не к конкретному файлу а ко всему ПО, значит надо их выключать при запуске файла и включать при закрытии вот что показал макрорекордер:
здесь отключаем :
Код:
With Application
        .CellDragAndDrop = False 'перетаскивание ячеек
        .EnableAutoComplete = False 'автозаполнение ячеек
    End With
здесь включаем:
Код:
    With Application
        .CellDragAndDrop = True
        .EnableAutoComplete = True
    End With
можно воткнуть эти блоки в соответствующие события книги:
Код:
    Private Sub Workbook_Open()
    With Application
        .CellDragAndDrop = False 'перетаскивание ячеек
        .EnableAutoComplete = False 'автозаполнение ячеек
    End WithEnd Sub
Код:
Private Sub Workbook_BeforeClose(Cancel as Boolean)
    With Application
        .CellDragAndDrop = True
        .EnableAutoComplete = True
    End With
End Sub
в модуль книги ("ЭтаКнига")
если ячеек не так уж и много я бы написал код, который каждый раз бы проверял их и непозволял держать в них все кроме цифр.
tolikman вне форума Ответить с цитированием
Старый 15.11.2009, 12:51   #3
kovalevskivf
Пользователь
 
Регистрация: 28.04.2009
Сообщений: 26
По умолчанию

Большое спасибо. Буду экспериментировать с этим вариантом.
kovalevskivf вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
событие Private Sub Worksheet_Change Светлана87 Microsoft Office Excel 5 11.10.2009 18:42
Блокировка рабочего стола dani92 Общие вопросы Delphi 52 29.09.2009 18:17
Помогите с Worksheet_Change плз. zander Microsoft Office Excel 1 28.02.2009 21:46
Обработка события Updated не всего листа, а лишь одной ячейки neugadal Microsoft Office Excel 7 20.07.2008 18:18
Просмотр листа с использование пароля asale Microsoft Office Excel 13 30.01.2007 23:41