Модераторы: mihanik
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как защитить скрытые листы в Excel? Очень нужно защитить Журнал 
:(
    Опции темы
kashemirny
Дата 19.3.2009, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 114
Регистрация: 12.11.2007

Репутация: нет
Всего: нет



Всем привет!

Сильно не пинайте... Есть проблема следуещего характера: существует книга Excel, назовем ее "Журнал" - это база, и другая книга, назовем ее "Ввод данных", в которой содержатся макросы, которые берут данные из одного листа Журнала и переносят их на другой лист Журнала, при этом создаются новые сроки в последнем листе. Например, в форму "Ввод данных" вносят номер 1547 - отображается данные по данному товару, все его характеристики, количество в остатке - при этом вручную указывается сколько необходимо взять из остатка (со склада), например 40 шт. - при нажатии на кнопку "Снять со склада" на лист "Отгрузка" добавляется строка с номером, количеством, характеристиками, ФИО отгрузившего и прочая информация.

Макросы книги "Ввод данных" работают со скрытыми листами "Журнала" - на время открывают (разворачивают) листы, копируют данные из одного листа в другой, а после того как отработали - сворачивают листы, оставляя лишь один лист с фоновой картинкой.

Пока все работает на честном слове, но теоретически может возникнуть проблема "продвинутых пользователей" Excel, которые смогут проникнуть в Журнал и ВРУЧНУЮ изменить количество товара на складе с нехорошей целью (списание товара со склада).

Необходимо защитить "Журнал" от посягательства всеми доступными способами: паролями на листы (для того, чтобы при открытии "Формат-Лист-Отобразить" выскакивала форма ввода пароля), паролем на проект VBA (разобрался как установить пароль, но не знаю как в макросах из "Ввода данных" обратиться к запаролленому проекту VBA для того чтобы пройти авторизацию).

Жду ваших идей!
С уважением.
PM MAIL   Вверх
Akina
Дата 19.3.2009, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 26
Всего: 454



Цитата(kashemirny @  19.3.2009,  14:49 Найти цитируемый пост)
Жду ваших идей!

Перейти от Excel на более вменяемые средства.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
FINANSIST
Дата 19.3.2009, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Статус: Жив
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 11.4.2008
Где: Москва

Репутация: 13
Всего: 23



Цитата(kashemirny @  19.3.2009,  13:49 Найти цитируемый пост)
Пока все работает на честном слове, но теоретически может возникнуть проблема "продвинутых пользователей" Excel, которые смогут проникнуть в Журнал и ВРУЧНУЮ изменить количество товара на складе с нехорошей целью (списание товара со склада).

 smile  smile  smile  smile 
Цитата(Akina @  19.3.2009,  15:05 Найти цитируемый пост)
Перейти от Excel на более вменяемые средства.

 smile 
Учёт таких вещей в Эксель -  реальная опасность для организации
Даже если в Лист6 (Инфа в столбцах А и В) , сделать цвет шрифта белым и защитить его от выделения пользователем, а затем 
ПРОГРАМНО (Sheets("Лист6").Visible = xlVeryHidden) скрыть (не отображаются через Формат/Лист/Отобразить), то следующий код элментарно его просканирует и выведет информацию по листу
Код

Sub x()
Dim txt As String: Dim x As Integer
For x = 1 To 5
txt = txt & Sheets("Лист6").Range("A1").Offset(x, 0).Value & Chr(9) & Sheets("Лист6").Range("A1").Offset(x, 1).Value & Chr(10)
Next x
MsgBox txt
End Sub

Кстати, для получения в код данных скрытого листа, вовсе не обязательно данный лист отображать (пример в том же коде выше)
Однако просмотр  просмотром, а защитить лист програмно от изменений всё же вполне возможно
Код

Sub x()
Sheets("Лист6").Unprotect ("Pass")
'БЛАБЛАБЛАБЛА
Sheets("Лист6").Protect "Pass"
End Sub

Но не следует забывать, что при таком раскладе сам модуль необходимо так же защитить от чтения пользователем кода (в т.ч. и пароля листа)
user posted image
Но даже в этом случае, в инете полно программ-взломщиков паролей office, в том числе и модулей VBA smile 


Это сообщение отредактировал(а) FINANSIST - 19.3.2009, 18:17


--------------------
“...Брали корову рыжую одну, отдавать будем корову рыжую одну, чтобы не нарушать отчетности”
Эдуард Успенский, “Каникулы в Простоквашино”
PM MAIL ICQ   Вверх
RockClimber
Дата 20.3.2009, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 848
Регистрация: 5.5.2006
Где: планета 013 в тен туре

Репутация: 7
Всего: 15



Цитата(FINANSIST @  19.3.2009,  17:53 Найти цитируемый пост)
Но даже в этом случае, в инете полно программ-взломщиков паролей office, в том числе и модулей VBA 

А если учесть, что Майкрософт недавно открыла спецификации офисных форматов, а тексты даже защищенных макросов хранятся в незашифрованном виде, то даже программа-взломщик не нужна. Библиотеки, читающие офисные форматы, вроде уже появились.
Короче, 1С и ее аналоги вам в помощь.


--------------------
Хорошо кинутый дятел далеко летит, крепко встревает, долго торчит.
PM MAIL GTalk   Вверх
kashemirny
Дата 23.3.2009, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 114
Регистрация: 12.11.2007

Репутация: нет
Всего: нет



Цитата(Akina @  19.3.2009,  15:05 Найти цитируемый пост)

Перейти от Excel на более вменяемые средства.

Спасибо за ответ, но этот вариант слишком сложен, ибо тянет за собой разработку приложения с нуля, поэтому не подходит и даже не рассматривается(

2FINANSIST
Попробовал ваш вариант - спасибо, все очень неплохо работает, даже функция ВПР и непосредственная связь с ячейчами "глубоко скрытого" защищенного листа. Пока еще не все ньюансы проверил - переписываю макросы.
Единственное, не понял, как можно переносить значения из листа в лист, не открывая последний?


Код

Sheets("Товары").Visible = xlVeryHidden

'БЛА БЛА БЛА


Windows("Ввод.xls").Activate
Sheets("Товары").Visible = True
Sheets("Товары").Select
Rows("22:22").Select
Selection.Copy
Windows("Журнал.xls").Activate
Sheets("Склад 01").Visible = True
Sheets("Склад 01").Select
Rows("5:5").Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= 
     _False, Transpose:=False
Application.CutCopyMode = False

'БЛА БЛА БЛА

Sheets("Товары").Visible = xlVeryHidden
Sheets("Склад 01").Visible = xlVeryHidden



Цитата(RockClimber @  20.3.2009,  10:01 Найти цитируемый пост)
Но даже в этом случае, в инете полно программ-взломщиков паролей office, в том числе и модулей VBA 

Не страшно. Кто будет заниматься взломом, девочки, которые умеют лишь жать на кнопки?) Полагаю, что нет.

Цитата(RockClimber @  20.3.2009,  10:01 Найти цитируемый пост)
Короче, 1С и ее аналоги вам в помощь.

1Сv8 - слишком дорогая в обслуживании система, которая требует постоянных доработок со стороны разработчиков (своих программистов нет, и не предвидится). Работа будет вестись в Excel. 
PM MAIL   Вверх
RockClimber
Дата 24.3.2009, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 848
Регистрация: 5.5.2006
Где: планета 013 в тен туре

Репутация: 7
Всего: 15



Цитата(kashemirny @  23.3.2009,  18:53 Найти цитируемый пост)
1Сv8 - слишком дорогая в обслуживании система, которая требует постоянных доработок со стороны разработчиков (своих программистов нет, и не предвидится). Работа будет вестись в Excel.  

Возьмите хотя бы access тогда...


--------------------
Хорошо кинутый дятел далеко летит, крепко встревает, долго торчит.
PM MAIL GTalk   Вверх
FINANSIST
Дата 24.3.2009, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Статус: Жив
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 11.4.2008
Где: Москва

Репутация: 13
Всего: 23



kashemirny, Биг сорри за  smile , но думаю стоит тебя предостеречь от ошибок - на основе  опыта  по разработке  финансово-экономических моделей в условно бесплатных средах, заверяю что выбрал ты не совсем подходящий инструмент.
Путь автоматизации зависит от существующего и потенциального возможного функционала модели(системы)
Если отойти от теории автоматизации то для себя я выделил 3 типа моделей:
1) Аналитические
2) Учётные
3) Учётно-Аналитические

Первый тип подразумевает выполнение над входящими данными глубоких аналитических процедур (ну например проведение Финансового анализа, Инвестиционного анализа, Статистического либо Мат.анализа), что подразумевает гибкость информационной среды в рамках процедуры анализа. Считаю что ,для этого функционала, Excel (+VBA) из условно-бесплатных - вне конкуренции
Второй тип - формирование учёта на предприятии : Складской учёт, Бухгалтерский учёт, Бюджетирование
 Однозначно - к Вашим услугам любая условно бесплатная СУБД : Либо настольная (Access+VBA - до 5 юзеров в отделе) либо клиент-серверная (MS SQL Server Express Edition либо Oraqle 10G Express Edition - 4 гигов для учёта в небольшой организации  хватит без проблем, а плюс ещё и защита информации от несанкционированного доступа да ещё и Роли для юзеров в нагрузку smile )
Третий тип -  полномасштабные версии второго типа с мощными аналитическими алгоритмами (тут по деньгам уже не каждая организация потянет)
Судя по 
Цитата(kashemirny @  19.3.2009,  13:49 Найти цитируемый пост)
Есть проблема следуещего характера: существует книга Excel, назовем ее "Журнал" - это база, и другая книга, назовем ее "Ввод данных", в которой содержатся макросы, которые берут данные из одного листа Журнала и переносят их на другой лист Журнала, при этом создаются новые сроки в последнем листе. Например, в форму "Ввод данных" вносят номер 1547 - отображается данные по данному товару, все его характеристики, количество в остатке - при этом вручную указывается сколько необходимо взять из остатка (со склада), например 40 шт. - при нажатии на кнопку "Снять со склада" на лист "Отгрузка" добавляется строка с номером, количеством, характеристиками, ФИО отгрузившего и прочая информация.

у тебя типичная учётная система, и реализация её в Excel - это даже не полумера, это пустая потеря твоего времени.
Как ты думаешь в Excel вести Партионный учёт поступлений/списаний каждого SKU??? ( Я не говорю уже о том что помимо физического партионного учёта руководство желает видеть ещё и финансовый партионный учёт)
На твоём месте я  формализовал бы существующие бизнес процессы, на основе формализации начертил бы схему данных (хотя бы карандашом на бумаге) , откатал бы систему по части логики и интерфейса в любой настольной БД (Хотя бы в том же Access , он в составе Office и за него дополнительно платить не надо), а затем с учётом наработанной системы, плавненько переводил бы всё на тот же MS SQL Server Express Edition ( - за него так же дополнительно платить ничего не надо) с клиентами на Access.
Учитывая что оба - продукты мелкомягких, подружаться они без проблем: Пользовательский Интерфейс - на клиенте, Справочники, журналы и прочая приблуда - на сервере, Бизнес логика - часть на клиенте (VBA) часть на сервере (Тригеры), Отчёты - на твой вкус либо клиент, либо Excel (OLAP Cubes) либо сервер (качай тогда версию с функционалом отчётности "...Advanced..." чего то там)
А с Экселем заканчивай уже - он для анализа smile 


Цитата(kashemirny @  23.3.2009,  18:53 Найти цитируемый пост)
Единственное, не понял, как можно переносить значения из листа в лист, не открывая последний?

Напрямую
Код

Sheets("Лист6").Visible = xlVeryHidden
Sheets("Лист1").range("A1").value = Sheets("Лист6").range("A1").value


Это сообщение отредактировал(а) FINANSIST - 25.3.2009, 12:41


--------------------
“...Брали корову рыжую одну, отдавать будем корову рыжую одну, чтобы не нарушать отчетности”
Эдуард Успенский, “Каникулы в Простоквашино”
PM MAIL ICQ   Вверх
FINANSIST
Дата 25.3.2009, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Статус: Жив
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 11.4.2008
Где: Москва

Репутация: 13
Всего: 23



Цитата(kashemirny @  23.3.2009,  18:53 Найти цитируемый пост)
Не страшно. Кто будет заниматься взломом, девочки, которые умеют лишь жать на кнопки?) Полагаю, что нет.

А девочки порой попадаются на удивление смышлённые smile  smile  smile 



--------------------
“...Брали корову рыжую одну, отдавать будем корову рыжую одну, чтобы не нарушать отчетности”
Эдуард Успенский, “Каникулы в Простоквашино”
PM MAIL ICQ   Вверх
kashemirny
Дата 17.4.2009, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 114
Регистрация: 12.11.2007

Репутация: нет
Всего: нет



FINANSIST

большое спасибо за разъяснение моделей... с вами полностью согласен.... но для того чтобы написать подобную систему нужно изучить сложные программые продукты, а времени и так нет.... так что возможно, к этому приду когда будет много времени....


Код

Sheets("Лист6").Visible = xlVeryHidden
Sheets("Лист1").range("A1").value = Sheets("Лист6").range("A1").value

реально работает, огромный сеньк! но! все равно без смены фокуса 2х открытых книг не обойтись....или я что-то не понимаю.... я обращаюсь из "Ввод данных.xls" в Журнал:

Код

Windows("Журнал.xls").Activate
ActiveWorkbook.Unprotect
ActiveWindow.SelectedSheets.Visible = False
ActiveWorkbook.Protect Structure:=True, Windows:=False
ActiveWindow.Visible = False

и уже потом цикл:

Код

Sheets("Лист1").Select
    Rows("3:3").Select
    Selection.Insert Shift:=xlDown
Sheets("Лист1").Range("7:7").Value = Sheets("Товары").Range("3:3").Value


Есть ли возможноть напрямую обращаться к другой книге?

Это сообщение отредактировал(а) kashemirny - 17.4.2009, 16:39
PM MAIL   Вверх
RockClimber
Дата 17.4.2009, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 848
Регистрация: 5.5.2006
Где: планета 013 в тен туре

Репутация: 7
Всего: 15



Цитата(kashemirny @  17.4.2009,  16:38 Найти цитируемый пост)
Есть ли возможноть напрямую обращаться к другой книге?

Можно так:
Код

Windows("Журнал.xls").Sheets("Лист1").Unprotect "mypassword"
Windows("Журнал.xls").Sheets("Лист1").Range("A1") = 123
Смены фокуса не происходит.


--------------------
Хорошо кинутый дятел далеко летит, крепко встревает, долго торчит.
PM MAIL GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование, связанное с MS Office"
mihanik staruha

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами



  • Несанкционированная реклама на форуме запрещена
  • Пожалуйста, давайте своим темам осмысленный, информативный заголовок. Вопль "Помогите!" таковым не является.
  • Чем полнее и яснее Вы изложите проблему, тем быстрее мы её решим.
  • Оставляйте свои записи в "Книге отзывов о работе администрации"
  • А вот тут лежит FAQ нашего подраздела


Если Вам понравилась атмосфера форума, заходите к нам чаще!
С уважением mihanik и staruha.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование, связанное с MS Office | Следующая тема »


 




[ Время генерации скрипта: 0.0593 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.