Excel это не сложно
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
28.03.2024, 19:59:30

Войти
На форуме добавлена возможность подписки на RSS-ленты любого раздела форума. Подписаться можно, нажав на иконку RSS , расположенную левее наименования раздела.
33 233 Сообщений в 5 454 Тем от 6 750 Пользователей
Последний пользователь: Alex1210
*
Перейти на сайт Хитрости Надстройка MulTEx Обучающие тренинги Наша группа ВКонтакте
Правила форума Начало Помощь Поиск Календарь Войти Регистрация Выйти
+  Excel это не сложно
|-+  Основные форумы
| |-+  Полезные решения
| | |-+  Кассовый отчет для ИП
Страниц: [1]   Вниз
Печать
Автор Тема: Кассовый отчет для ИП  (Прочитано 10589 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Andrew-P
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 19


Просмотр профиля
« : 12.01.2017, 13:14:00 »

Добрый день, форумчане.
Во время работы в одной небольшой фирме сделал простенькую форму отчета для продавца на торговой точке. Хотел бы поделиться этой формой. Быть может кому нибудь пригодится. Буду рад комментариям, замечаниям и конструктивной критике Улыбка.
Что умеет табличка. Каждый новый день она создает лист с именем соответствующим текущей дате. В таблицу вносятся данные о доходах и расходах торговой точки. Таблица вычисляет результат. При закрытии книга прячет внутри себя лист и отправляется на указанный адрес E-mail. Книга сохраняет в себе листы с данными за прошедшие дни, с возможностью их просмотра. На "Лист 2" Рассчитывается итоговая сумма по всем листам. При очередном открытие книги создается новый лист с текущей датой, Остаток на начало дня в котором равен остатку на конец дня предыдущего листа.
Как то так... Не судите строго. Если файл кому будет полезен - буду рад Улыбка.
Всего доброго.
« Последнее редактирование: 13.01.2017, 15:26:38 от vikttur » Записан
vikttur
Глобальный модератор
Ветеран
*****

Репутация: +124/-0
Офлайн Офлайн

Сообщений: 1 816



Просмотр профиля
« Ответ #1 : 12.01.2017, 14:10:46 »

Данные нужно хранить в одной базе. Кассовый отчет - один лист-шаблон, в который подтягиваются данные за любую выбранную дату.
В таком формате не хранится лишняя  дублирующаяся информация, не множатся листы, удобно фильтровать, выбирать, просматривать, анализировать и проч.
Записан
Andrew-P
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 19


Просмотр профиля
« Ответ #2 : 12.01.2017, 15:18:03 »

Дело в том, что у продавцов изначально был бумажный лист с табличкой примерно такого вида, как в файле. Они в ручную вносили туда данные считали на калькуляторе, потом с водителем передавали в офис.
То есть я всего лишь сделал в Excel-е их бумажный листок, что-бы он сам все считал, и отправлялся по почте на соответствующий адрес.
У меня есть ответная часть для этого отчета- где файл собирает данные с листов на один лист. Единственно, что... там в основном работает макрос, который я нашел на этом сайте- The Prist- консолидация данных. Так что тот файл я бы тоже выложил, если это удобно.
Записан
Andrew-P
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 19


Просмотр профиля
« Ответ #3 : 14.01.2017, 12:30:16 »

Со Старым Новым Годом, Уважаемые Форумчане!
Иногда бывает необходимо, сделать так, что бы макрос запускался  не чаще чем один раз в календарную дату. Именно это и нужно было мне в создании кассового отчета. Предлагаю несложное решение данной задачи.
Допустим нужно, что бы Макрос 1() запускался не чаще одного раз в сутки.
Вот такой небольшой код:

Код: (vb)
Sub ЗапускФайла()
    If ActiveWorkbook.Sheets("Лист1").Range("E12").Value <> Format(Now, "dd.mm.yyyy") Then
      Call Макрос1
     ActiveWorkbook.Sheets("Лист1").Range("E12").Value = Format(Now, "dd.mm.yyyy")
    End If
End Sub
Записан
Andrew-P
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 19


Просмотр профиля
« Ответ #4 : 25.01.2017, 17:42:19 »

Добрый вечер, уважаемые форумчане.
Иногда бывает необходимо присвоить текущему листу имя соответствующее текущей дате. Когда делал форму кассового отчета для ИП, мне как раз потребовалась такая возможность.
Допустим мы хотим скопировать "Лист1" , вставить вновь созданный лист между листами "Лист1" и "Лист2"и присвоить ему имя соответствующее текущей дате.
Предлагаю простенький код, который позволяет это сделать:
Код: (vb)

Sub ИмяЛиста()
    Sheets("Лист1").Copy Before:=Sheets(2)
    ActiveSheet.Name = Format(Now, "dd.mm.yyyy")
End Sub

Так же, если поэкспериментировать с функцией Format(Now, "dd.mm.yyyy"), можно присвоить листу имя соответствующее текущему месяцу.
« Последнее редактирование: 25.01.2017, 17:45:01 от Andrew-P » Записан
Andrew-P
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 19


Просмотр профиля
« Ответ #5 : 04.02.2017, 19:48:31 »

Добрый вечер, уважаемые форумчане.
Вот и очередная субботний вечер наступил Улыбка Решил вот немного дополнить файл "Кассовый отчет для ИП", а именно проверку вводимых данных. Объединить стандартную функцию Excel проверка данных с небольшим макросом листа. Иногда при вводе десятичных чисел, пользователи вводят ошибочные разделители, так вот макрос на лету исправляет ошибку и преобразует текст-как-число в число. И не дает ввести ошибочные данные.
Такой вот небольшой фрагмент кода:
Код: (vb)

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim arrM()
Dim A As Integer
arrM = Array("~?~", "ю", "б", "/", "\")
If Not Intersect(Target, Union(Range("K11:K28"), Range("Q11:Q28"))) Is Nothing Then
With Range("K11")
For A = LBound(arrM) To UBound(arrM)
.Replace arrM(A), "."
.NumberFormat = "General"
.Value = .Value
Next
End With
End Sub

А полностью посмотреть этот код  можно, если скачать файл
Записан
Andrew-P
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 19


Просмотр профиля
« Ответ #6 : 05.02.2017, 23:18:27 »

Здравствуйте, уважаемые форумчане.
Иногда бывает необходимо организовать выполнение различных алгоритмов выполнения макроса, в зависимости от очерёдности его запуска. Именно это мне и понадобилось сделать в Кассовом отчете для ИП, в макросе листа. Предлагаю небольшой код для этого.
Если запускать этот код несколько раз при открытой книге Excel, то значение переменной Tr поочередно будет принимать значения "истина" и "ложь", а дальше уже в зависимости от значения переменной можно организовать выбор соответствующего алгоритма.
Такой вот небольшой макрос:
 Может кому пригодится Улыбка
Код: (vb)

Sub Макрос1()
Static Tr As Boolean
If Tr <> True Then
Tr = True
Else
Tr = False
End If
Range("A1") = Tr
End Sub
Записан
Andrew-P
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 19


Просмотр профиля
« Ответ #7 : 08.02.2017, 22:24:03 »

Добрый вечер, уважаемые форумчане.
Иногда бывает необходимо, в зависимости от выполнения тех или иных условий, или от результатов той или иной проверки данных, программно записать в ячейку соответствующее примечание. Именно это мне и потребовалось при разработки файла "Кассовый отчет для ИП".
Допустим нам надо проверить, являются ли введенные в ячейку данные числом и если не являются создать  соответствующее примечание.
Предлагаю Вашему вниманию не сложный  код, который умеет это делать:
Код: (vb)

Sub Макрос1()
Dim MyComentText As String
MyComentText = "Ошибка! Введены неверные данные"
If IsNumeric(Range("A1")) = False Then
With Range("A1")
If (.Comment Is Nothing) Then
.AddComment.Text MyComentText
End If
End With
Else
Range("A1").ClearComments
End If
End Sub
Записан
Andrew-P
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 19


Просмотр профиля
« Ответ #8 : 12.02.2017, 01:02:51 »

Здравствуйте, уважаемые форумчане.
Иногда бывает так, что в файл Excel пользователи ошибочно вводят неверные данные, например вместо чисел вводится текст похожий на число, это в свою очередь приводит к тому, что формулы перестают вычисляться...
Это часто происходило при  работе  файла "Кассовый отчета для ИП".
Предлагаю решение буквально в несколько строк кода, которое не позволит ввести в ячейку не числовые данные.
Код: (vb)

Sub Макрос1()
If IsNumeric(Range("A1")) = False Then
Range("A1").ClearContents
End If
End Sub

Если мы введем в ячейку А1 не числовые данные, нажмем на Enter. А после этого  запустим выполнение данного макроса, курсор вернется в ячейку  А1 и неверно введенные данные будут удалены.
Записан
vikttur
Глобальный модератор
Ветеран
*****

Репутация: +124/-0
Офлайн Офлайн

Сообщений: 1 816



Просмотр профиля
« Ответ #9 : 12.02.2017, 01:30:32 »

Сомнительная полезность кода. Пользватель введет неправильные данные и НЕ нажмет Enter Улыбка
Для проверки нужно или использовать нструмент Excel Проверка_данных, или вешать код на событие листа.
Записан
Andrew-P
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 19


Просмотр профиля
« Ответ #10 : 14.02.2017, 00:05:13 »

Виктор! Полностью с Вами согласен!
Конечно же делать макрос для проверки данных в одной единственной ячейке как то не очень целесообразно. Но данный макрос я написал с той только целью, что-бы показать принцип работы функции IsNumeric, проверка что введенные данные являются числом. Сам узнал недавно Улыбка.
А так у меня в файле "Кассовый отчет для ИП" используется макрос листа, как раз таки привязанный к событию: Worksheet_SelectionChange(). Который от  стандартной Excel -проверки данных отличается тем, что представляет собой  как бы три макроса  в одном.
1. Исправляет неверно введенный десятичный разделитель.
2. Преобразует число как текст в число.
3. Если введены все таки не числовые данные, то Excel возвращается в предыдущую ячейку и удаляет неверно введенные данные.
То есть не дает ввести в ячейку не числовые данные.
То есть макрос листа, не сложный но довольно длинный, т.к. состоит из трёх простых макросов связанных общей логикой. Вот эти простые макросы и разместил по отдельности с описанием принципа их работы.
Записан
Andrew-P
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 19


Просмотр профиля
« Ответ #11 : 18.02.2017, 00:04:39 »

Добрый вечер, уважаемые форумчане.
Предлагаю Вашему вниманию макрос расширенной проверки данных.
Макрос не дает ввести в ячейку в таблице Excel не числовые данные.
Макрос работает в связке со встроенным Excel инструментом проверки данных. Но в отличие от встроенного инструмента проверки данных, этот макрос представляет собой как бы три-в-одном.
То есть во первых при вводе ошибочных десятичных разделителей, макрос автоматически исправляет их.
Во вторых преобразует текст-как-число; в число.
И наконец в третьих, если введено все таки не число, то макрос возвращается в ранее выделенную ячейку, удаляет ошибочно введенные данные и выдает соответствующее сообщение.
Отдельные части этого макроса рассмотрел в этом разделе в выше размещённых сообщениях.
Этот макрос использовался в качестве макроса листа при разработке файла "Кассовый отчет для ИП".
Код: (vb)

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim arrM()
Dim A As Integer
Static Tr As Boolean
Static Itr As Integer, Jtr As Integer, Ifl As Integer, Jfl As Integer
Dim i As Integer, j As Integer
Dim MyComentText As String
Dim Rz As Range
Set Rz = Selection
MyComentText = "Ошибка! Вы ввели текст.Укажите верное числовое значение"
arrM = Array("~?~", "ю", "б", "/", "\", "ж", "э", ">", "<")
If Not Intersect(Target, Union(Range("K11:K28"), Range("Q11:Q28"), Range("A1"))) Is Nothing Then
If Tr <> True Then
Tr = True
Else
Tr = False
End If
If Tr = True Then
Itr = Rz.Row
Jtr = Rz.Column
If Itr = 1 And Jtr = 1 Then
i = Itr
j = Jtr
Else
i = Ifl
j = Jfl
End If
End If
If Tr = False Then
Ifl = Rz.Row
Jfl = Rz.Column
i = Itr
j = Jtr
End If
On Error Resume Next
With Cells(i, j)
.ClearComments
For A = LBound(arrM) To UBound(arrM)
.Replace arrM(A), "."
.NumberFormat = "General"
.Value = .Value
Next
End With
If IsNumeric(Cells(i, j)) = False Then
With Cells(i, j)
If (.Comment Is Nothing) Then
.AddComment.Text MyComentText
Else
.Comment.Text MyComentText
End If
.Select
.ClearContents
End With
End If
End If
End Sub

И ещё один момент... Так как некоторые переменные в данном макросе объявлены через оператор "Static", то для корректной работы макроса этим переменным необходимо задать начальные значения. То есть макрос должен пару раз  сработать в холостую. в файле "Кассовый отчет для ИП", это решалось при помощи макроса книги по обработке события Auto_open().
Записан
Страниц: [1]   Вверх
Печать
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2011, Simple Machines Valid XHTML 1.0! Valid CSS!
Яндекс.Метрика Рейтинг@Mail.ru