Hugo! Помогите, пожалуйста, справиться с нерешаемой для меня задачей.
ЧТО ТРЕБУЕТСЯ СДЕЛАТЬ:
Мне нужно сделать шаблон-заготовку для формирования ведомости на следующий месяц.
Для этого нужно скопировать лист с текущим месяцем (в порядке 04.2010, 05.2010 и так далее) , в моем примере – квытень (по русски апрель), а если быть точным то – 04.2010, и далее осуществить над ним следующие действия :
1). Присвоить ему имя – 05.2010 или 5.2010
2) Пронумеровать по порядку ведомость (см. ячейка К9)
3) Записать название месяца на украинском языке (травень) в ячейку F10.
4) Перенести остатки на конец месяца.
Которые нужно взять в нижней (вспомогательной) таблице под названием: «Таблиця вихідниих залишків») за квітень (апрель) месяц и перенести их у верхнюю вспомогательную таблицу под названием «Таблиця вхідних залишків», но уже в шаблон следующего травня (мая) месяца.
5) Если в результате расчетов в нижней (вспомогательной) таблице текущего (квітня) месяца , образовались нулевые значения (см. ячейку L44 нижней вспомогательной таблицы за квітень) то , в шаблоне следующего (травня) месяца , необходимо удалить всю строку, в которой находится эта ячейка. И одновременно (синхронно) удалить строку с таким же номером карточки (см. ячейку Н14 на листе 04.2010 ) у верхней (вспомогательной) таблице, но уже за квітень месяц.
4) Очистить основную (большую) таблицу от старых данных. Но так, чтобы формулы (для наглядности я закрасил оранжевым) и выпадающие списки (см. ячейки закрашенные зеленым) в ячейках остались. А также перенести форматы, но конечно же без учета заливки. Так как в работе она не нужна.
При этом надо иметь в виду то, что все таблицы дпнамичны. То есть, могут менять свои размеры по длине и двигаться по листу вверх-вниз. В зависимости от количества карточек, автомобилей и количества дней их работы.
Также прикрепляю файл, где показано что есть (см. лист 04.2010) и что надо получить (см. лист 05.2010).
Вот и все! Файл с примером: http://slil.ru/29513950
С ув. Муля!
Создание шаблона путем копирования листа
Сообщений 1 страница 17 из 17
Поделиться12010-07-29 19:51:51
Поделиться22010-07-30 14:57:46
Добрый день.
Зря Вы именно ко мне обращаетесь. Так другие могут от ответов воздержаться. А у меня сейчас нет времени в вашей проблеме разбираться. Файл я скачал с Планеты (у меня сейчас нет доступа на файлобменники), может на выходных посмотрю, если отдыхать не буду . Так что не раньше понедельника, но не обещаю.
Поделиться32010-07-30 15:49:42
Добрый день!
Ув.Hugo!Обратился к вам как к единственному модератору форума, не подумавши что это может иметь какие то негативные для меня последствия.
Да разве я против чьей то помощи? Буду только рад ее получить от кого угодно.Лиш бы она была еффективной.
С ув. Муля!
Поделиться42010-08-03 19:03:23
Тема еще актуальна?
Смущает, что "...все таблицы дпнамичны. То есть, могут менять свои размеры по длине и двигаться по листу вверх-вниз."
Сделайте шаблон (лист Апрель) с запасом. Например, если а/машин у вас 15, то сделайте 50 строк или больше. Таблицы с входящими/исходящими остатками - то же самое. Ненужные строки можно скрыть, зато в коде можно обращаться к фиксированным диапазонам, и можно будет упростить формулы.
Поделиться52010-08-03 19:49:32
Тема еще актуальна?
Да!
Доброго вам вечера!
Ваше предложение заслуживает внимания! Но это же надо почти все переделывать заново. А в прикрепленном примере нужно только подправить макросы копирования и очистки шаблона. И на Планете (см. здесь:http://www.planetaexcel.ru/forum.php?thread_id=17576), KuklP (дай Бог ему здоровья!)уже сделал мне эти макросы, но только для другой, меньшей таблицы (на 8 столбцов).А сечас не появляется на форуме. Наверное в отпуске.Поэтому и не закончил макрос.
А я вот каждый день пробую и так и этак, но пока безуспешно.Очень слабо знаю макросы.А эти, как видите, не из простых.
С ув. Муля!
Поделиться62010-08-03 23:52:25
to Муля2010
вам доброго времени суток.
у меня есть пара вопросов ( для общего развития)
мне хорошо знакома бензиновая тематика. (жена бухгалтер )
итак первый вопрос и сразу же пояснения к нему
1. это отчетный документ впоследствии печатается на бумажный носитель ?
если после подсчетов программа уходит на принтер - тогда нет необходимости делать электронные листы на каждый месяц. Ваша программа от этого постоянно "тяжелеет ".
Наличие всего 1-ой заготовки - позволяет мне обходится без макросов (возможно с макросами было бы проще и программа была бы легче, но я их просто не знаю)
2. второй вопрос:
По какому принципу заполняется ячейка К9 ?
если каждый месяц увеличивается на 1, тогда есть смысл " привязать" к месяцу. впрочем и сам месяц тоже можно не писАть руками, а доверить это дело машине
и последний вопрос. Он скорее имеет не технический , а юмористический уклон:
почему при общении на укр. языке, Ваша компания имеет русское название ?
Поделиться72010-08-04 11:34:16
итак первый вопрос и сразу же пояснения к нему
«1. это отчетный документ впоследствии печатается на бумажный носитель ?» - не отчетный документ, а учетный регистр для аналитического учета произвольной формы. Форма которого утверждается самим предприятием). После заполнения обязатедьно печатается на бумаге. Иначе зачем его делать..
"если после подсчетов программа уходит на принтер - тогда нет необходимости делать электронные листы на каждый месяц". - Мне не понятный смысл эжтого предложения.
Поєтому отвечаю шуткуой. Кума пригласила кума в гости, чтобы сооблазнить его на близкие отношения. Напоила, накормила его. А в ходе беседы, на все намеки и вопросы кум отвечает ей : "А я такой!". И так без конца. Кума увидела что ничего не получится и говорит куму. Если бы я знала, что вы кум "такой …" то я бы вас в гости не приглашала!
«Ваша программа от этого постоянно "тяжелеет "». – А что, если заносить всю поточную информацию на один лист, то програма не тяжелеет? И потом, как в таком случае біть с ограниченым количеством , 65536 строк на листе?
«Наличие всего 1-ой заготовки - позволяет мне обходится без макросов (возможно с макросами было бы проще и программа была бы легче, но я их просто не знаю)»
Тогда, чтобыв совсем не «утяжелять» Екселя, лучше всего вести учет на пустографках и суммировать цыфиры на калькуляторе.
«2. второй вопрос: По какому принципу заполняется ячейка К9 ?»
Каждый месяц увеличивается на 1,
«тогда есть смысл " привязать" к месяцу» - не вижу в этом осложнении никакого смысла.
« впрочем и сам месяц тоже можно не писАть руками, а доверить это дело машине»
- чего я собственно и хочу.
«и последний вопрос. Он скорее имеет не технический , а юмористический уклон:
почему при общении на укр. языке, Ваша компания имеет русское название « - Потому, что это вымышленное название. А на русском – для удобства чтения. Потому что форум русско-язычный. А переписывать на русском всю форму (тоже для удобства), просто не было времени. Ведь программирование - моя не основная работа. А скорее всего, вынуждено-печальная нагрузка, с целью облегчить свой адский и неблагодарный труд учетного работника. И причины для смеха, я здесь не вижу.
А, лично мне, от собственного неумения писать макросы, хочется плакать. Поэтому и перешел в режим чтения спецлитературы.
Но вот беда! Когда читаешь – вроди все понятно. А начинаешь лямпичить код – ничего не получается.
С ув. Муля!
Поделиться82010-08-04 17:05:54
А что, если заносить всю поточную информацию на один лист, то програма не тяжелеет? И потом, как в таком случае біть с ограниченым количеством , 65536 строк на листе?
количество строк ограничивается не 65 тыс Excel-евских строк а максимальными размерами бумажного листа
после того как программа сделает и распечатает расчет за "Сiчень" - после этого ( в этой же таблице) обнуляются все данные и вводите "Грудневi" записи.
У жены бензиновый отчет распечатывается на 2-х листах формата А3 !
Представляете какой бы был монстр, если б таблица только заполнялась и не удалялись записи с прошло месяца ?
Тогда, чтобыв совсем не «утяжелять» Екселя, лучше всего вести учет на пустографках и суммировать цыфиры на калькуляторе.
мне как-то 2-а формата А3 на калькуляторе не очень-то ну а Вы вправе попробовать
А, лично мне, от собственного неумения писать макросы ...
когда Hoogo появится на форуме, совершенно точно что он "причешет" Вашу программу.
Но лично меня такой вариант не устраивает. И не потому что я кому-то не доверяю.
а потому что, если у жены на работе какой-нибудь шутник в команде Sub START() заменит "u" на "а" - то тогда точно мне прийдется познакомиться с возможностями калькулятора...
К чему я все это расписываю ? может быть, учитывая "глубокие" знания макросов - нет необходимости ожидать Hoogo, а сделать таблицу " под себя" ?
тем более что таблица у Вас очень простая. ( А с автоматическим выводом названия следующего месяца - я обещаю Вам помочь )
Отредактировано 0mega (2010-08-04 17:08:01)
Поделиться92010-08-04 17:16:31
Добрый день! А я тут, рядом , правда с инетом пока проблемы, поэтому больше наблюдаю.
Приятно, что меня так высоко ценят , но в данном случае я не помогу. Посмотрел, вроде бы и можно сделать, но сильно муторно. Я для себя бы делать не стал - проще раз в месяц руками данные перенести, чем ломать голову, как совместить переменное количество строк в отчёте и остатках входящих/исходящих с формулами, которые в этих остатках сидят...
Если только на спор делать
Если переделать этот отчёт так, чтоб было удобно кодом переносить данные - тогда другое дело. Но я не хозяин отчёта...
А по поводу кода Сергея - я подозревал. Похожий почерк, да и в шапке написано
Но может лучше его подождать, пусть подправит, ему виднее, я посмотрел - тоже не очень прозрачный код, надо вникать.
Поделиться102010-08-04 17:39:05
Если переделать этот отчёт так, чтоб было удобно кодом переносить данные - тогда другое дело. Но я не хозяин отчёта...
Доброго вам дня Hugo!
Какой вариант предлагаете вы? И что при таком варианте, нужно пнределать?
Ответте пожалуйста.
С ув. Муля!
Поделиться112010-08-04 18:08:30
Это надо подумать...
Поделиться122010-08-05 12:13:44
Что-то непридумывается ничего, наверное потому, что неясна работа с этими залишками... Пока подправил код Сергея, но коррекцию залишков отключил - что-то там неправильно удалялось.
Файл приложить не могу, держите код:
Sub CopySheet() Dim a As String ' Макрос записан 19.07.2010 (Sergey) Dim sFormat As String Dim avArr: avArr = Array("", "січень", "лютий", "березень", "квітень", "травень", "червень", "липень", "серпень", "вересень", "жовтень", "листопад", "грудень") On Error Resume Next a = InputBox("Название листа?") If a = "" Then Exit Sub sFormat = avArr(CInt(Val(a))) With Sheets(Sheets.Count) .Copy After:=Sheets(Sheets.Count) End With Sheets(Sheets.Count).Name = a Call KonctantyUdalim [K9] = [K9] + 1 '[F10] = a & " " & 'Year(Date) & " року" [F10] = sFormat Application.ScreenUpdating = False [A19].Select End Sub Sub KonctantyUdalim() Dim iShtRplData As Worksheet Dim iFoundRng As Range, lRow As Long, Frow As Long, lRow1 As Long, li As Long, c As Range Dim strFind As String On Error Resume Next Application.ScreenUpdating = False Set iShtRplData = ActiveWorkbook.ActiveSheet strFind = "Залишки і рух коштів" & "*" With iShtRplData Set iFoundRng = .Columns(4).Find(What:=strFind, LookIn:=xlFormulas, LookAt:=xlWhole) 'поиск If Not iFoundRng Is Nothing Then 'если нашли lRow = iFoundRng.Row - 1 ' lRow1 = Cells(Rows.Count, 12).End(xlUp).Row strFind = "Залишок коштів на картках" & "*" Set iFoundRng = .Columns(4).Find(What:=strFind, LookIn:=xlFormulas, LookAt:=xlWhole) 'поиск If Not iFoundRng Is Nothing Then 'если нашли Range(.Cells(lRow + 1, 6), .Cells(lRow1, 12)).Copy iFoundRng.Offset(, 2).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Frow = Cells(1, 2).End(xlDown).Row + 2 .Range(.Cells(Frow, 1), .Cells(lRow - 1, 12)).SpecialCells(xlCellTypeConstants).ClearContents End If End If 'For li = lRow + 1 To lRow1 - 1 Step -1 'If Cells(li, 12).Value = 0 Then Rows(li).Delete 'Next li 'lRow1 = iFoundRng.Row + 1 ''Range(Cells(lRow1, 10), Cells(Frow - 1, 11)).Value = 0 '"x" 'For li = Frow - 2 To lRow1 Step -1 'If Cells(li, 12).Value = 0 Then Rows(li).Delete 'Next li Set iFoundRng = Nothing End With Application.ScreenUpdating = True MsgBox "Данные на листе удалены!", 64, "Очистка листа" End Sub
Поделиться132010-08-05 19:39:44
Ув. Hugo и др. спецы!
Этот вариант название месяца и номер ведомости проставляет правильно.
Основную таблицу, очищает правильно.
А вот остатки по карточкам, переносит неправильно. А именно в первой строке карточка№159456, почему то уменьшает сумму на 10. Должно быть 1290 а Ексель , ставит 1280. Не могу докопаться почему так происходит.
И кроме того, нижняя вспомогательная таблица обрамляется бегущец линией, и чтобы ее снять, нужно дополнительно щелкать мышкой.
И далее, я тут покумекал и решил. А что если макрос который копирует лист оставить, поцепивши его на отдельную кнопку. А тот, который очищает основную таблицу, переносит остатки и удаляет строки в вспомогательных таблицах заменить на два , самостоятельно работающие макроса. Первый из нихочищает основную таблицу:
Option Explicit
Sub УдалитьСтарыеЗначения()
Dim Table As Range
On Error Resume Next
Set Table = ActiveSheet.Range("Приход\Расход")
If Err = 0 Then
If MsgBox("Очистить таблицу от старых значений", vbQuestion + vbYesNo, "Удаление старых значений") = vbYes Then
Table.SpecialCells(xlCellTypeConstants).ClearContents
End If
Else
MsgBox "Таблицы 'Приход\Расход' нет на этом листе.", , "Удаление старых значений"
End If
On Error GoTo 0
End Sub
Где сочетание Приход\Расход определяется именованной формулой такого содержания :
=ИНДЕКС('05.2010'!$A$16:$L$40;3;0):ИНДЕКС('05.2010'!$A$16:$L$40;ЧСТРОК('05.2010'!$A$16:$L$40)-1;0) и также поцепить его на отдельную кнопку.
А второй - который должен переносить остатки с «Таблиця вихідних залишків» за апрель, в таблицу «Таблиця вхідних залишків» за май месяц, нужно еще написать. Но у меня он не получается. Что вы скажете по этому варианту. Может быть он покажется вам более простым решением этой проблемы.
Файл с новым макросом пришлю, если скажете куда.
С ув. Муля!
Поделиться142010-08-06 09:37:13
Здравствуйте.
Я проверил последний код ещё раз - у меня сумма 1290 всюду, и выделение снимается. Так что смотрите у себы пошагово, где что напутано.
По поводу остального - пока нечего сказать.
Поделиться152010-08-06 12:29:38
Добрый день всем живым!
Hugo! Я все таки нашел причину ошибки, на которую указывл в своем предыдущем посте. А заключалась она в наличии в даеой книге листа, в котором я показываю что надо получить. Очевидо макрос берет какие то цыфры с этоголиста. Когда его удалил, остатки стали переносится правильно.
Но возникает другая беда!
Когда я пробую переносить эти два макроса в идентичную таблицу, но в другую книгу, то там он усе ломает.
А вот новый - под именем «УдалитьСтарыеЗначения», работает корректно и переносится в др. книги, без проблем. Поэтому, как мне кажется, путь, выбраный мною, более надежный и менее прихотлив к адаптации на новом месте.
Вот только макрос
Поделиться162010-08-08 14:41:19
Доброго дня Вам и хорошего выходного дня!
Сообщаю вам о том, что этот вопрос решен Серкеем-земляком (хай йому щастить скрізь і всюди)на Планете.
Всем форумчанам спасибо за участие и посильную помощь!
Тему можно закрывать
Поделиться172010-08-08 14:41:48
Доброго дня Вам и хорошего выходного дня!
Сообщаю вам о том, что этот вопрос решен Серкеем-земляком (хай йому щастить скрізь і всюди)на Планете.
Всем форумчанам спасибо за участие и посильную помощь!
Тему можно закрывать