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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.02.2011, 02:35   #1
Uralmaster
Форумчанин
 
Регистрация: 21.01.2011
Сообщений: 118
По умолчанию запретить переход с листа на лист по условию

Есть макрос который проверяет на листе все ли ячейки заполнены по условию
Как запретить пользователю перейти на другой лист пока он не заполнит все ячейки по условию?
Что дописать в макрос ...

Можно ли также сделать запрет на закрытие книги?

Последний раз редактировалось Uralmaster; 10.02.2011 в 10:58.
Uralmaster вне форума Ответить с цитированием
Старый 10.02.2011, 02:40   #2
Uralmaster
Форумчанин
 
Регистрация: 21.01.2011
Сообщений: 118
По умолчанию

Вот сам макрос
Код:
Private Sub Worksheet_Change(ByVal Target As Range) 
flag = 0
If Target.Column >= 2 And Target.Column <= 7 And Target.Row >= 8 And Target.Row <= 701 Then
For j = 2 To 7 Step 1
If Cells(Target.Row - 1, j) = "" Then
ActiveSheet.Range(Cells(Target.Row - 1, j), Cells(Target.Row - 1, j)).Select
flag = 1
End If
Next j
If flag = 1 Then
Application.EnableEvents = False
Target.Value = ""
Application.EnableEvents = True
MsgBox ("заполни все ячейки в Строке ! ")
End If
End If
End Sub
Uralmaster вне форума Ответить с цитированием
Старый 10.02.2011, 08:27   #3
3BEPOBOY
Пользователь
 
Регистрация: 27.12.2010
Сообщений: 82
По умолчанию

Uralmaster
а если просто делать 2ой лист невидимым, пока пользователь не заполнит все ячейки. Подойдет?
Или запретить его редактировать, а при попытке внести изменения чтобы выдавалось сообщение " сперва заполните все ячейки такого то листа"?

Последний раз редактировалось 3BEPOBOY; 10.02.2011 в 08:29.
3BEPOBOY вне форума Ответить с цитированием
Старый 10.02.2011, 08:41   #4
Uralmaster
Форумчанин
 
Регистрация: 21.01.2011
Сообщений: 118
По умолчанию

в книге предполагается листов 100 - с текущего листа пользователь может перейти на любой
можно ли сделать невидимыми 99 листов пока текущий заполняю?
Uralmaster вне форума Ответить с цитированием
Старый 10.02.2011, 08:50   #5
3BEPOBOY
Пользователь
 
Регистрация: 27.12.2010
Сообщений: 82
По умолчанию

Uralmaster
вы спите вообще?))

Вроде да, почему бы и нет. Как-нибудь типа
Код:
For i=2 to 100
   WorkSheets(i).Visible = False
Next
3BEPOBOY вне форума Ответить с цитированием
Старый 10.02.2011, 10:34   #6
Uralmaster
Форумчанин
 
Регистрация: 21.01.2011
Сообщений: 118
По умолчанию

то есть в макрос вставить код типа текущийактивный лист показать остальные скрыть так понимаю
а просто запретиь переход на другой лист по условию - такой команды нет в VBA ?

Последний раз редактировалось Uralmaster; 10.02.2011 в 10:38.
Uralmaster вне форума Ответить с цитированием
Старый 10.02.2011, 10:36   #7
3BEPOBOY
Пользователь
 
Регистрация: 27.12.2010
Сообщений: 82
По умолчанию

Я не знаю как вам нужно, просто предложил идею. Если устраивает, то почему бы и нет...
3BEPOBOY вне форума Ответить с цитированием
Старый 10.02.2011, 10:47   #8
Uralmaster
Форумчанин
 
Регистрация: 21.01.2011
Сообщений: 118
По умолчанию

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

так будет работать ? если так то это вариант решения - осталось только понять что и как засунуть в макрос чтоб реализовать идею ...

а запрет редактирования других листов видимо долго - пока пользователь войдет на другой лист начнет его редактировать увидит табличку вернется обратно - времени мног пройдет так понимаю ?

Последний раз редактировалось Uralmaster; 10.02.2011 в 10:56.
Uralmaster вне форума Ответить с цитированием
Старый 10.02.2011, 11:17   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

А посмотрите такой вариант, без скрытия других листов:

Код:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)

  If IsEmpty(ThisWorkbook.Sheets(1).[A1]) Then
    MsgBox "Ячейка A1 НЕ заполнена. Ну-ка, вернёмся и заполним ей!"
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    
    ThisWorkbook.Sheets(1).Select
    ThisWorkbook.Sheets(1).[A1].Select
    
    Application.EnableEvents = True
    Application.ScreenUpdating = True
  End If
  
End Sub

p.s. достаточно выключить макросы в книге - и ВСЯ проверка и защита летит псу под хвост...
Вложения
Тип файла: rar Книга_с_запретом_перехода_по_условию.rar (8.7 Кб, 24 просмотров)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.02.2011, 11:23   #10
3BEPOBOY
Пользователь
 
Регистрация: 27.12.2010
Сообщений: 82
По умолчанию

хорошее решение, сохранил себе на будущее)
3BEPOBOY вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Копирование строк таблицы по условию одной ячейки из Лист 1 в Лист 2 Людвиг Microsoft Office Excel 5 25.10.2014 11:46
перенос строки на другой лист по условию TimoXEi Microsoft Office Excel 12 24.01.2013 16:21
переход с листа на лист по одинаковому значению Uralmaster Microsoft Office Excel 20 01.03.2011 16:30
Как запретить переход на определенный URL в Webbrowser? Marsel737 Общие вопросы Delphi 23 15.11.2009 19:19
Как запретить переход на ячейку StringGrid Comer_Jus Общие вопросы Delphi 2 26.05.2008 15:04