Форум по Эксель

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Форум по Эксель » Форум по Excel » Создание шаблона путем копирования листа


Создание шаблона путем копирования листа

Сообщений 1 страница 17 из 17

1

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
С ув. Муля!

0

2

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

0

3

Добрый день!
Ув.Hugo!Обратился к вам как к единственному модератору форума, не подумавши что это может иметь какие то негативные для меня последствия.
Да разве я против чьей то помощи? Буду только рад ее получить от кого угодно.Лиш бы она была еффективной.
С ув. Муля!

0

4

Тема еще актуальна?
Смущает, что "...все  таблицы дпнамичны. То есть, могут менять свои размеры по длине и двигаться по листу вверх-вниз."
Сделайте шаблон (лист Апрель) с запасом. Например, если а/машин у вас 15, то сделайте 50 строк или больше. Таблицы с входящими/исходящими остатками - то же самое. Ненужные строки можно скрыть, зато в коде можно обращаться к фиксированным диапазонам, и можно будет упростить формулы.

0

5

nilem написал(а):

Тема еще актуальна?

Да!
Доброго вам вечера!
Ваше предложение заслуживает внимания! Но это же надо почти все переделывать заново. А в прикрепленном примере нужно только подправить макросы копирования и очистки шаблона. И на Планете (см. здесь:http://www.planetaexcel.ru/forum.php?thread_id=17576), KuklP (дай Бог ему здоровья!)уже сделал мне эти макросы, но только для другой, меньшей  таблицы (на 8 столбцов).А сечас не появляется на форуме. Наверное в отпуске.Поэтому и не закончил макрос.
А я вот каждый день пробую и так и этак, но пока безуспешно.Очень слабо знаю макросы.А эти, как видите, не из простых.
С ув. Муля!

0

6

to Муля2010
вам доброго времени суток.
у меня есть пара вопросов ( для общего развития)
мне хорошо знакома бензиновая тематика. (жена бухгалтер )
итак первый вопрос и сразу же пояснения к нему
1. это отчетный документ впоследствии печатается на бумажный носитель ?
если после подсчетов программа уходит на принтер - тогда нет необходимости делать электронные  листы на каждый месяц. Ваша программа от этого постоянно "тяжелеет ".
Наличие всего 1-ой заготовки - позволяет мне обходится без макросов (возможно с макросами было бы проще и программа была бы легче, но я их просто не знаю)
2. второй вопрос:
По какому принципу заполняется ячейка К9 ?
если каждый месяц увеличивается на 1, тогда есть смысл " привязать" к месяцу. впрочем и сам месяц тоже можно не писАть руками, а доверить это дело машине
и последний вопрос. Он скорее имеет не технический , а юмористический уклон:
почему при общении на укр. языке, Ваша компания имеет русское название ?   o.O

0

7

итак первый вопрос и сразу же пояснения к нему
«1. это отчетный документ впоследствии печатается на бумажный носитель ?» - не отчетный документ, а учетный регистр для аналитического учета произвольной формы. Форма которого утверждается самим предприятием). После заполнения обязатедьно печатается на бумаге. Иначе зачем его делать..

"если после подсчетов программа уходит на принтер - тогда нет необходимости делать электронные  листы на каждый месяц". - Мне не понятный смысл эжтого предложения.
Поєтому отвечаю шуткуой. Кума пригласила кума в гости, чтобы сооблазнить его на близкие отношения. Напоила, накормила его. А в ходе беседы, на все намеки и вопросы кум отвечает ей : "А я такой!". И так без конца. Кума увидела что ничего не получится и говорит куму. Если бы я знала, что вы кум "такой …"  то я бы вас в гости не приглашала!

«Ваша программа от этого постоянно "тяжелеет "». – А что, если заносить всю поточную информацию на один лист, то програма не тяжелеет? И потом, как в таком случае біть с ограниченым количеством , 65536 строк на листе?

«Наличие всего 1-ой заготовки - позволяет мне обходится без макросов (возможно с макросами было бы проще и программа была бы легче, но я их просто не знаю)»
Тогда, чтобыв совсем не «утяжелять» Екселя, лучше всего вести учет на пустографках и суммировать цыфиры на калькуляторе.

«2. второй вопрос: По какому принципу заполняется ячейка К9 ?»
Каждый месяц увеличивается на 1,
«тогда есть смысл " привязать" к месяцу» - не вижу в этом осложнении никакого смысла.
« впрочем и сам месяц тоже можно не писАть руками, а доверить это дело машине»
- чего я собственно и хочу.

«и последний вопрос. Он скорее имеет не технический , а юмористический уклон:
почему при общении на укр. языке, Ваша компания имеет русское название « - Потому, что это вымышленное название. А на русском – для удобства чтения. Потому что форум русско-язычный. А переписывать на русском всю форму (тоже для удобства), просто не было времени. Ведь программирование - моя не основная работа. А скорее всего, вынуждено-печальная нагрузка, с целью облегчить свой адский и неблагодарный труд учетного работника. И причины для смеха, я здесь не вижу.
А, лично мне, от собственного неумения писать макросы, хочется плакать. Поэтому и перешел в режим чтения спецлитературы.
Но вот беда! Когда читаешь – вроди все понятно. А начинаешь лямпичить код – ничего не получается.
С ув. Муля!

0

8

Муля2010 написал(а):

А что, если заносить всю поточную информацию на один лист, то програма не тяжелеет? И потом, как в таком случае біть с ограниченым количеством , 65536 строк на листе?

количество строк ограничивается  не 65 тыс Excel-евских строк а максимальными размерами бумажного листа
после того как программа сделает и распечатает  расчет за "Сiчень" - после этого ( в этой же таблице) обнуляются все данные и вводите "Грудневi" записи.
У жены бензиновый отчет распечатывается на 2-х листах формата  А3 !
Представляете  какой бы  был монстр, если б таблица только заполнялась и не удалялись записи с прошло месяца ?

Муля2010 написал(а):

Тогда, чтобыв совсем не «утяжелять» Екселя, лучше всего вести учет на пустографках и суммировать цыфиры на калькуляторе.

мне как-то 2-а формата А3 на калькуляторе не очень-то   o.O  ну а Вы вправе попробовать  :writing:

Муля2010 написал(а):

А, лично мне, от собственного неумения писать макросы ...

когда Hoogo появится на форуме, совершенно точно что он "причешет" Вашу программу.
Но лично меня такой вариант не устраивает. И не потому что я кому-то не доверяю.
а потому что, если у жены на работе какой-нибудь шутник в команде Sub START() заменит "u" на "а" - то тогда точно мне прийдется познакомиться с возможностями калькулятора...
К чему я все это расписываю ? может быть, учитывая "глубокие" знания макросов - нет необходимости ожидать Hoogo, а сделать таблицу " под себя" ?
тем более что таблица у Вас очень простая. ( А с автоматическим выводом названия следующего месяца - я обещаю Вам помочь  :idea: )

Отредактировано 0mega (2010-08-04 17:08:01)

0

9

Добрый день! А я тут, рядом :), правда с инетом пока проблемы, поэтому больше наблюдаю.
Приятно, что меня так высоко ценят :) , но в данном случае я не помогу. Посмотрел, вроде бы и можно сделать, но сильно муторно. Я для себя бы делать не стал - проще раз в месяц руками данные перенести, чем ломать голову, как совместить переменное количество строк в отчёте и остатках входящих/исходящих с формулами, которые в этих остатках сидят...
Если только на спор делать :)
Если переделать этот отчёт так, чтоб было удобно кодом переносить данные - тогда другое дело. Но я не хозяин отчёта...
А по поводу кода Сергея - я подозревал. Похожий почерк, да и в шапке написано :)
Но может лучше его подождать, пусть подправит, ему виднее, я посмотрел - тоже не очень прозрачный код, надо вникать.

0

10

Hugo написал(а):

Если переделать этот отчёт так, чтоб было удобно кодом переносить данные - тогда другое дело. Но я не хозяин отчёта...

Доброго вам дня Hugo!
Какой вариант предлагаете вы? И что при таком варианте, нужно пнределать?
Ответте пожалуйста.
С ув. Муля!

0

11

Это надо подумать...

0

12

Что-то непридумывается ничего, наверное потому, что неясна работа с этими залишками... Пока подправил код Сергея, но коррекцию залишков отключил - что-то там неправильно удалялось.
Файл приложить не могу, держите код:

Код:
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

0

13

Ув. 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) и также поцепить его на отдельную кнопку.

А второй - который должен переносить остатки с «Таблиця вихідних залишків» за апрель, в таблицу «Таблиця вхідних залишків» за май месяц, нужно еще написать. Но у меня он не получается. Что вы скажете по этому варианту. Может быть он покажется вам более простым решением этой проблемы.
Файл с новым макросом пришлю, если скажете куда.
С ув. Муля!

0

14

Здравствуйте.
Я проверил последний код ещё раз - у меня сумма 1290 всюду, и выделение снимается. Так что смотрите у себы пошагово, где что напутано.
По поводу остального - пока нечего сказать.

0

15

Добрый день всем живым!
Hugo! Я все таки нашел причину ошибки, на которую указывл в своем предыдущем посте. А заключалась она в наличии в даеой книге листа, в котором я показываю что надо получить. Очевидо макрос берет какие то цыфры с этоголиста. Когда его удалил, остатки стали переносится правильно.
Но возникает другая беда!
Когда я пробую переносить эти два макроса в идентичную таблицу, но в другую книгу, то там он усе ломает.
А вот новый - под именем «УдалитьСтарыеЗначения», работает корректно и переносится в др. книги, без проблем. Поэтому, как мне кажется, путь, выбраный мною, более надежный и менее прихотлив к адаптации на новом месте.
Вот только макрос

0

16

Доброго дня Вам и хорошего выходного дня!
Сообщаю вам о том, что этот вопрос решен Серкеем-земляком (хай йому щастить скрізь і всюди)на Планете.
Всем форумчанам спасибо за участие и посильную помощь!
Тему можно закрывать

0

17

Доброго дня Вам и хорошего выходного дня!
Сообщаю вам о том, что этот вопрос решен Серкеем-земляком (хай йому щастить скрізь і всюди)на Планете.
Всем форумчанам спасибо за участие и посильную помощь!
Тему можно закрывать

0

Быстрый ответ

Напишите ваше сообщение и нажмите «Отправить»



Вы здесь » Форум по Эксель » Форум по Excel » Создание шаблона путем копирования листа