Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/ввод данных пользователем на защищееном листе - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » ввод данных пользователем на защищееном листе
ввод данных пользователем на защищееном листе
globalist Дата: Среда, 05.06.2013, 18:29 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Всем привет! Есть проблема, с которой не смог справиться сам. Может кто-нибудь поможет...
Есть защищенный лист. Есть диапазоны которые разрешены для ввода данных пользователем. Нужно чтобы при вводе копированием вставлялись только значения. Например, при копировании из защищенной ячейки вставляется только значение. Нужно чтобы аналогично работала вставка в незащищенную ячейку. Спасибо.
 
Ответить
СообщениеВсем привет! Есть проблема, с которой не смог справиться сам. Может кто-нибудь поможет...
Есть защищенный лист. Есть диапазоны которые разрешены для ввода данных пользователем. Нужно чтобы при вводе копированием вставлялись только значения. Например, при копировании из защищенной ячейки вставляется только значение. Нужно чтобы аналогично работала вставка в незащищенную ячейку. Спасибо.

Автор - globalist
Дата добавления - 05.06.2013 в 18:29
RAN Дата: Среда, 05.06.2013, 19:29 | Сообщение № 2
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Очереной не корректный вопрос.
После копирования
[vba]
Код
With Где-то_там   
.Value = .Value
End With
[/vba]

Не проверял, но должно работать.
Может и не так, как нужно, но так, как написано.


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RAN - Среда, 05.06.2013, 19:30
 
Ответить
СообщениеОчереной не корректный вопрос.
После копирования
[vba]
Код
With Где-то_там   
.Value = .Value
End With
[/vba]

Не проверял, но должно работать.
Может и не так, как нужно, но так, как написано.

Автор - RAN
Дата добавления - 05.06.2013 в 19:29
Hugo Дата: Среда, 05.06.2013, 22:23 | Сообщение № 3
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3252
Репутация: 707 ±
Замечаний: 0% ±

2019
Я думаю что это можно достичь только административными мерами. Т.е. уволить студентов-неучей и бабок, принять на работу толковых сотрудников.
Т.к. может быть вот сюда я хочу скопировать формулу с форматом, а вот сюда только значение. И так и буду делать.
Ну можно конечно после копирования макросом заменять формулы на значения, убивать форматы. Но правильнее сразу копировать только значения. К тому же есть случаи, когда формулу копировать нельзя - она вернёт другое значение.


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеЯ думаю что это можно достичь только административными мерами. Т.е. уволить студентов-неучей и бабок, принять на работу толковых сотрудников.
Т.к. может быть вот сюда я хочу скопировать формулу с форматом, а вот сюда только значение. И так и буду делать.
Ну можно конечно после копирования макросом заменять формулы на значения, убивать форматы. Но правильнее сразу копировать только значения. К тому же есть случаи, когда формулу копировать нельзя - она вернёт другое значение.

Автор - Hugo
Дата добавления - 05.06.2013 в 22:23
globalist Дата: Четверг, 06.06.2013, 10:18 | Сообщение № 4
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

уволить бабок и неучей - это, конечно, интересное решение, но нереальное к реализации smile Неужели нет программного решения? Это своего рода защита от дурака. Когда лист заполняют путем копирования из другого файла и просто вставляют на защищенный лист, то как правило ячейка тут же становится защищенной (т.к. в источнике она по умолчанию защищенная) и повторный ввод информации уже не возможен. Сам Excel же работает нужным образом, когда копируешь из защищенной ячейки, значит должен быть способ в макросе что-то подобное прописать... или я не прав?
 
Ответить
Сообщениеуволить бабок и неучей - это, конечно, интересное решение, но нереальное к реализации smile Неужели нет программного решения? Это своего рода защита от дурака. Когда лист заполняют путем копирования из другого файла и просто вставляют на защищенный лист, то как правило ячейка тут же становится защищенной (т.к. в источнике она по умолчанию защищенная) и повторный ввод информации уже не возможен. Сам Excel же работает нужным образом, когда копируешь из защищенной ячейки, значит должен быть способ в макросе что-то подобное прописать... или я не прав?

Автор - globalist
Дата добавления - 06.06.2013 в 10:18
Hugo Дата: Четверг, 06.06.2013, 11:14 | Сообщение № 5
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3252
Репутация: 707 ±
Замечаний: 0% ±

2019
Т.е. Вы желаете, чтоб никогда ни при каких условиях нельзя было скопировать диапазоны с форматами и формулами, а можно было копировать только данные? Копируйте в блокнот smile
Думаю это невозможно - что и правильно.
Возможно достаточно вывести на панель кнопку "Paste Values" или/и "Paste Special" и обучить сотрудников.


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеТ.е. Вы желаете, чтоб никогда ни при каких условиях нельзя было скопировать диапазоны с форматами и формулами, а можно было копировать только данные? Копируйте в блокнот smile
Думаю это невозможно - что и правильно.
Возможно достаточно вывести на панель кнопку "Paste Values" или/и "Paste Special" и обучить сотрудников.

Автор - Hugo
Дата добавления - 06.06.2013 в 11:14
Формуляр Дата: Четверг, 06.06.2013, 13:29 | Сообщение № 6
Группа: Друзья
Ранг: Ветеран
Сообщений: 832
Репутация: 255 ±
Замечаний: 0% ±

Excel 2003, 2013
globalist,
может, повесить на лист обработчик Calculate, котрый будет убивать все формулы.
Это только на уровне идеи, как работает не проверял.

[vba]
Код
Private Sub Worksheet_Calculate()
   Application.EnableEvents = False
     Me.UsedRange = Me.UsedRange.Value
   Application.EnableEvents = True
End Sub
[/vba]


Excel 2003 EN, 2013 EN
 
Ответить
Сообщениеglobalist,
может, повесить на лист обработчик Calculate, котрый будет убивать все формулы.
Это только на уровне идеи, как работает не проверял.

[vba]
Код
Private Sub Worksheet_Calculate()
   Application.EnableEvents = False
     Me.UsedRange = Me.UsedRange.Value
   Application.EnableEvents = True
End Sub
[/vba]

Автор - Формуляр
Дата добавления - 06.06.2013 в 13:29
globalist Дата: Четверг, 06.06.2013, 18:26 | Сообщение № 7
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Опять я. Несмотря на то, что ответы не давали повода надеяться на успешное решение вопроса. Я сделал так (взял за основу запуск макроса по нажатию ENTER):

1. В модуле листа
[vba]
Код
Private Sub Worksheet_Selectionchange(ByVal Target As Range)
Application.OnKey "~", "StartEnter"
Application.OnKey "{ENTER}", "StartEnter"
Application.OnKey "{ENTER}"
Application.OnKey "~"
End Sub
[/vba]

2. В модуле (забыл как называется, не "Эта Книга")
[vba]
Код
Sub StartEnter()
Select Case Application.CutCopyMode
Case Is = False
ActiveCell.Cells(2).Activate
Case Is <> False
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
End Select
End Sub
[/vba]

Потестил - вроде работает как надо. Еще надо будет предусмотреть попытку ввода с мышки и с командной строки, но это позже.
Нужна критика решения, что может поломать этот макрос, что я не учел и т.д.
[admin]
Оформляйте коды тегами![/admin]


Сообщение отредактировал globalist - Четверг, 06.06.2013, 18:52
 
Ответить
СообщениеОпять я. Несмотря на то, что ответы не давали повода надеяться на успешное решение вопроса. Я сделал так (взял за основу запуск макроса по нажатию ENTER):

1. В модуле листа
[vba]
Код
Private Sub Worksheet_Selectionchange(ByVal Target As Range)
Application.OnKey "~", "StartEnter"
Application.OnKey "{ENTER}", "StartEnter"
Application.OnKey "{ENTER}"
Application.OnKey "~"
End Sub
[/vba]

2. В модуле (забыл как называется, не "Эта Книга")
[vba]
Код
Sub StartEnter()
Select Case Application.CutCopyMode
Case Is = False
ActiveCell.Cells(2).Activate
Case Is <> False
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
End Select
End Sub
[/vba]

Потестил - вроде работает как надо. Еще надо будет предусмотреть попытку ввода с мышки и с командной строки, но это позже.
Нужна критика решения, что может поломать этот макрос, что я не учел и т.д.
[admin]
Оформляйте коды тегами![/admin]

Автор - globalist
Дата добавления - 06.06.2013 в 18:26
globalist Дата: Пятница, 07.06.2013, 13:08 | Сообщение № 8
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

после дополнительного тестирования, выяснилось, что макрос запускаемый при изменении листа как-то не всегда запускается, пришлось эмпирически выяснить как эти косяки заткнуть. конечный вариант получился такой (кроме того, вместо листа отнес все к книге, т.к. мне нужно для всего файла):

1. В модуле "эта книга"
[vba]
Код
'этим убрал несработку макроса при первой вставке на защищенный лист сразу после открытия или после копирований и вставок в других книгах
Private Sub Workbook_Activate()
     Application.OnKey "~", "StartEnter"
     Application.OnKey "{ENTER}", "StartEnter"
End Sub

'ну это запуск макроса при нажатии ввода
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, _
         ByVal Target As Range)
     Application.OnKey "~", "StartEnter"
     Application.OnKey "{ENTER}", "StartEnter"
End Sub

'этим убрал ненужную сработку макроса при первой вставке в другой книге (даже при закрытой защищенной первая вставка все-равно запускала макрос и открывала защищенную книгу)
Private Sub Workbook_Deactivate()
     Application.OnKey "~"
     Application.OnKey "{ENTER}"
End Sub
[/vba]

2. в обычном модуле (сделал движение курсора на 1 ячейку как при обычном вводе, если не в режиме копирования + чтобы системные ошибки также выдавались как при обычной вставке, например при попытке вставки в защищенную ячейку)

[vba]
Код
Sub StartEnter()
On Error GoTo en
      
Select Case Application.CutCopyMode
     Case Is = False
         ActiveCell.Cells(2).Activate
     Case Is <> False
         Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
             SkipBlanks:=False, Transpose:=False
End Select
     
Application.CutCopyMode = False
GoTo en1
en:
MsgBox Err.Description
en1:
End Sub
[/vba]

вроде работает smile
 
Ответить
Сообщениепосле дополнительного тестирования, выяснилось, что макрос запускаемый при изменении листа как-то не всегда запускается, пришлось эмпирически выяснить как эти косяки заткнуть. конечный вариант получился такой (кроме того, вместо листа отнес все к книге, т.к. мне нужно для всего файла):

1. В модуле "эта книга"
[vba]
Код
'этим убрал несработку макроса при первой вставке на защищенный лист сразу после открытия или после копирований и вставок в других книгах
Private Sub Workbook_Activate()
     Application.OnKey "~", "StartEnter"
     Application.OnKey "{ENTER}", "StartEnter"
End Sub

'ну это запуск макроса при нажатии ввода
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, _
         ByVal Target As Range)
     Application.OnKey "~", "StartEnter"
     Application.OnKey "{ENTER}", "StartEnter"
End Sub

'этим убрал ненужную сработку макроса при первой вставке в другой книге (даже при закрытой защищенной первая вставка все-равно запускала макрос и открывала защищенную книгу)
Private Sub Workbook_Deactivate()
     Application.OnKey "~"
     Application.OnKey "{ENTER}"
End Sub
[/vba]

2. в обычном модуле (сделал движение курсора на 1 ячейку как при обычном вводе, если не в режиме копирования + чтобы системные ошибки также выдавались как при обычной вставке, например при попытке вставки в защищенную ячейку)

[vba]
Код
Sub StartEnter()
On Error GoTo en
      
Select Case Application.CutCopyMode
     Case Is = False
         ActiveCell.Cells(2).Activate
     Case Is <> False
         Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
             SkipBlanks:=False, Transpose:=False
End Select
     
Application.CutCopyMode = False
GoTo en1
en:
MsgBox Err.Description
en1:
End Sub
[/vba]

вроде работает smile

Автор - globalist
Дата добавления - 07.06.2013 в 13:08
Мир MS Excel » Вопросы и решения » Вопросы по VBA » ввод данных пользователем на защищееном листе
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!