Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
Krool
0 / 0 / 0
Регистрация: 19.03.2015
Сообщений: 16
1

Excel. Журнал учета операций в книге

30.03.2015, 11:38. Просмотров 1108. Ответов 9
Метки нет (Все метки)

Друзья, начальство поставило нехилую задачку, обращаюсь к Вам за помощью.

Существует книга, назовем её "Пример". Изначально виден всего 1 лист "Главная" в ней 3 кнопки, при нажатии запросит пароль:
Руководство - 123
Оператор 1 - 1234
Оператор 2 - 12345
Руководство видит все листы, операторы только определенные.

Мне необходимо, чтобы в этой же книге был лист, который "записывает" все операции. (Примерное содержание на последнем листе "Пример журнала"). Естественно чтобы только Руководство могло его видеть.

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

P.S. Пример во вложении в архиве, файл весил 103 кб, форум не дал его загрузить.
0
Вложения
Тип файла: rar Пример.rar (25.4 Кб, 13 просмотров)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.03.2015, 11:38
Ответы с готовыми решениями:

Построчная проверка и журнал учета операций
Помогите пожалуйста, не могу разобраться с двумя нюансами. Пример во вложении. 1) Построчная...

Журнал учета переработки
Доброго времени суток. Делаю журнал учета переработки и у меня появилась проблема в создании...

Журнал учета бланков
Добрый день. Уже пару часов сижу думаю и никак не могу сообразить. Есть таблица организаций к...

журнал операций
при нажатии на сумму в журнале операций открывается документ а надо чтоб просто можно...

9
Vovchikvsb
464 / 121 / 61
Регистрация: 04.03.2015
Сообщений: 324
30.03.2015, 11:53 2
Во первых поменяйте везде, где
Visual Basic
1
.Visible = False
На
Visual Basic
1
.Visible = 2
Иначе листы очень просто открыть.
1
Krool
0 / 0 / 0
Регистрация: 19.03.2015
Сообщений: 16
30.03.2015, 12:04  [ТС] 3
Vovchikvsb, это на первое время, естественно структуру книги я ещё не изменял, иначе неудобно будет постоянно вводить пароль чтобы внести изменения, естественно для "ЭтаКнига" я добавлю


Visual Basic
1
2
3
4
5
6
7
8
9
10
11
'Защита книги и листов от удаления формул и изменения таблицы
Private Sub Workbook_Open()
Application.ScreenUpdating = False
ThisWorkbook.Protect Password:="пароль"
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
ws.EnableOutlining = True
ws.Protect Password:="пароль", UserInterfaceOnly:=True, AllowFiltering:=True
ws.EnableAutoFilter = True
Next
End Sub
0
Vovchikvsb
464 / 121 / 61
Регистрация: 04.03.2015
Сообщений: 324
30.03.2015, 13:38 4
Лучший ответ Сообщение было отмечено Krool как решение

Решение

Сейчас попробую написать.

Добавлено через 44 минуты
Этот код добавьте в процедуры введения пароля для случая правильного введения.
В каждой процедуре замените Оператор 1 на соответствующее.

Visual Basic
1
2
3
4
5
6
        tp = Sheets("Пример журнала").Cells(Sheets("Пример журнала").Rows.Count, 1).End(xlUp).Row
        Sheets("Пример журнала").Cells(tp, 1).Value = Date
        Sheets("Пример журнала").Cells(tp, 2).Value = Time
        Sheets("Пример журнала").Cells(tp, 2).NumberFormat = "[$-F400]h:mm:ss AM/PM"
        Sheets("Пример журнала").Cells(tp, 3).Value = "Введен пароль для Оператор 1"
        Sheets("Пример журнала").Cells(tp + 1, 1).Value = "'======="
Это в модули листов машин.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim tp As Integer
    If Target.Value <> temp Then
        tp = Sheets("Пример журнала").Cells(Sheets("Пример журнала").Rows.Count, 1).End(xlUp).Row
        Sheets("Пример журнала").Cells(tp, 1).Value = Date
        Sheets("Пример журнала").Cells(tp, 2).Value = Time
        Sheets("Пример журнала").Cells(tp, 2).NumberFormat = "[$-F400]h:mm:ss AM/PM"
        Sheets("Пример журнала").Cells(tp, 3).Value = "Лист """ & ActiveSheet.Name & _
        """ ячейка " & Target.Address(0, 0) & " изменение значения с """ & temp & _
        """ на """ & Target.Value & """"
        Sheets("Пример журнала").Cells(tp + 1, 1).Value = "'======="
    End If
End Sub
 
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    temp = ActiveCell.Value
End Sub
Объявите в любом общем модуле
Visual Basic
1
Public temp As String, tp As Integer
Добавлено через 32 минуты
Книгой одновременно пользуется только один пользователь?
1
Krool
0 / 0 / 0
Регистрация: 19.03.2015
Сообщений: 16
30.03.2015, 14:26  [ТС] 5
Vovchikvsb, да, одновременно только один.
И подскажите "Объявить в любом общем модуле", допустим я его добавил в модуль кнопки руководства, он выдает ошибку "Invalid attribute in sub Funkrion" или я не правильно Вас понял?
0
Vovchikvsb
464 / 121 / 61
Регистрация: 04.03.2015
Сообщений: 324
30.03.2015, 14:31 6
Цитата Сообщение от Krool Посмотреть сообщение
"Invalid attribute in sub Funkrion"
В самое начало модуля нужно добавить.

Добавлено через 1 минуту
Цитата Сообщение от Krool Посмотреть сообщение
одновременно только один
Тогда должно нормально работать.
1
Krool
0 / 0 / 0
Регистрация: 19.03.2015
Сообщений: 16
30.03.2015, 14:44  [ТС] 7
Vovchikvsb, В принципе всё работает как надо, огромное спасибо, выручил, но есть пару ньансов:
1)Лист "Оператор 2" ячейка C2 изменение значения с "" на "10" вот какое сообщение он выдаёт в листе журнала, хотя изменение произошло на Листе машина 1, и было значение 5, стало 10, хотя код добавил в обьект каждой машины
2) Как сделать чтобы перед каждым вводом пароля был разделитель, для удобства чтения информации а то этот разделитель отображается просто в конце всех записей

=====
Оператор 1 ввел пароль
Изменил ячейку
=====
Оператор 2 ввел пароль
Изменил ячейку
=====
0
Vovchikvsb
464 / 121 / 61
Регистрация: 04.03.2015
Сообщений: 324
30.03.2015, 14:48 8
Лучший ответ Сообщение было отмечено Krool как решение

Решение

Лучше наверное чуток поменять. Добавьте в модель книги следующий код, чтоб в каждом листе не добавлять.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    If Mid(Sh.Name, 1, 6) = "Машина" Then
        If Target.Value <> temp Then
            tp = Sheets("Пример журнала").Cells(Sheets("Пример журнала").Rows.Count, 1).End(xlUp).Row
            Sheets("Пример журнала").Cells(tp, 1).Value = Date
            Sheets("Пример журнала").Cells(tp, 2).Value = Time
            Sheets("Пример журнала").Cells(tp, 2).NumberFormat = "[$-F400]h:mm:ss AM/PM"
            Sheets("Пример журнала").Cells(tp, 3).Value = "Лист """ & Sh.Name & _
            """ ячейка " & Target.Address(0, 0) & " изменение значения с """ & temp & _
            """ на """ & Target.Value & """"
            Sheets("Пример журнала").Cells(tp + 1, 1).Value = "'======="
        End If
    End If
End Sub
 
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    temp = ActiveCell.Value
End Sub
Добавлено через 3 минуты
Цитата Сообщение от Krool Посмотреть сообщение
Как сделать чтобы перед каждым вводом пароля был разделитель
Visual Basic
1
tp = Sheets("Пример журнала").Cells(Sheets("Пример журнала").Rows.Count, 1).End(xlUp).Row
поменяйте на
Visual Basic
1
tp = Sheets("Пример журнала").Cells(Sheets("Пример журнала").Rows.Count, 1).End(xlUp).Row + 1
1
Krool
0 / 0 / 0
Регистрация: 19.03.2015
Сообщений: 16
30.03.2015, 14:53  [ТС] 9
Vovchikvsb, супер! огромное человеческое спасибо!*)
0
Vovchikvsb
464 / 121 / 61
Регистрация: 04.03.2015
Сообщений: 324
30.03.2015, 14:55 10
Цитата Сообщение от Krool Посмотреть сообщение
огромное человеческое спасибо!
Не за что)
0
30.03.2015, 14:55
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.03.2015, 14:55

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Создание БД журнал учета учебных занятий
Доброго времени суток, уважаемые! Срочно необходима помощь светлых и просвещенных голов с созданием...

Журнал операций на управляемых формах
Привет. Вопрос: есть ли возможность создать журнал документов на управляемых формах, чтобы...

Журнал учета объема розничной продажи алкогольной и спиртосодержащей продукции
Всем привет! в связи с новым законом хотелось бы написать обработочку. Может кто-нибудь подскажет...

Расходы не отражаются в книге учета доходов и расходов
Добрый день. Бухгалтерия предприятия, редакция 2.0 (2.0.64.10). 1 сентября 2014 г. отразили...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.