Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.04.2013, 22:34   #1
terredis
Пользователь
 
Регистрация: 07.12.2011
Сообщений: 32
По умолчанию Скоро сдавать лабу. Макрос в excel

Здравствуйте. Помогите написать макрос. Нужно что бы по нажатию на кнопку "Заполнить". все остальные листы заполнялись (столбиком) датой с названием соответствующего листа. то есть на листе "Сентябрь" были все даты за сентябрь, в "Октябрь"- за октябрь и т.д. причем год должен браться из ячеек A2 и B2. с сентября до декабря должен формироваться столбец с годом указанным в ячейке A2, а с сентября по август - из B2. кому не сложно, прошу откликнуться.
(на листе "Сентябрь" пример того, как должно выглядеть заполнение листов. каждая дата должна повторяться 8 раз!)
Вложения
Тип файла: rar Пример.rar (34.0 Кб, 12 просмотров)
terredis вне форума Ответить с цитированием
Старый 11.04.2013, 12:45   #2
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

для 2013 офиса можно попробовать так:

Код:
Sub Fill()
  Application.ScreenUpdating = False
  If [B2] > [A2] Then
    For I = 9 To 8 + ([B2] - [A2]) * 12
      Set Sh = Worksheets.Add(After:=Worksheets(Worksheets.Count))
      Dt = DateSerial([A2] + I \ 12, (I - 1) Mod 12 + 1, 1)
      Sh.Name = Format$(Dt, "mmmm yyyy")
      For J = 1 To (DateAdd("m", 1, Dt) - Dt) * 8
        Sh.Cells(J, 1) = DateAdd("d", (J - 1) \ 8, Dt)
      Next J
    Next I
  End If
  Application.ScreenUpdating = True
End Sub
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 11.04.2013, 22:03   #3
terredis
Пользователь
 
Регистрация: 07.12.2011
Сообщений: 32
По умолчанию

Цитата:
для 2013 офиса можно попробовать так:
Спасибо. действительно работает. А как сделать чтобы он в существующие листы вписывал дату, а не создавал новые?
terredis вне форума Ответить с цитированием
Старый 12.04.2013, 09:30   #4
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
Код:
Set Sh = Worksheets.Add(After:=Worksheets(Worksheets.Count))
      Dt = DateSerial([A2] + I \ 12, (I - 1) Mod 12 + 1, 1)
      Sh.Name = Format$(Dt, "mmmm yyyy")
вот этот блок поправьте на такой:

Код:
Dt = DateSerial([A2] + I \ 12, (I - 1) Mod 12 + 1, 1)
Set Sh = Worksheets(Format$(Dt, "mmmm yyyy"))
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 12.04.2013, 12:58   #5
terredis
Пользователь
 
Регистрация: 07.12.2011
Сообщений: 32
По умолчанию

Цитата:
вот этот блок поправьте на такой:
К сожалению выдает ошибку на этой строке:
Код:
 Set Sh = Worksheets(Format$(Dt, "mmmm yyyy"))
terredis вне форума Ответить с цитированием
Старый 12.04.2013, 13:56   #6
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

1. Какую ошибку выдает?
2. а есть ли лист с таким названием?
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 12.04.2013, 14:21   #7
terredis
Пользователь
 
Регистрация: 07.12.2011
Сообщений: 32
По умолчанию

Цитата:
1. Какую ошибку выдает?
2. а есть ли лист с таким названием?
1. Rubn-time error '9':
Subscript out of range
2.Название листов показаны в файле "Пример.rar". там сразу созданы листы со след названиями: Сентябрь, Октябрь, Ноябрь, Декабрь, Январь, Февраль (1-ый семестр), Февраль (2-ой Семестр), Март, Апрель, Май, Июнь, Июль, Август.
terredis вне форума Ответить с цитированием
Старый 12.04.2013, 16:34   #8
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
Subscript out of range
означает, что в коллекции нет элемента с таким кодом. (в данном случае - листа с таким именем)

Цитата:
Название листов показаны в файле "Пример.rar". там сразу созданы листы со след названиями: Сентябрь, Октябрь, Ноябрь, Декабрь, Январь, Февраль (1-ый семестр), Февраль (2-ой Семестр), Март, Апрель, Май, Июнь, Июль, Август.
ну так поправьте формат:
Код:
Set Sh = Worksheets(Format$(Dt, "mmmm"))
з.ы. по каким критериям разделять февраль на 1 и 2 семестры Вы ни слова не сказали (а без этого нормально адресоваться на листы не представляется возможным)
з.з.ы. вариант с созданием листов в данном случае, по моему мнению, более корректен.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 12.04.2013, 18:35   #9
terredis
Пользователь
 
Регистрация: 07.12.2011
Сообщений: 32
По умолчанию

Цитата:
.ы. по каким критериям разделять февраль на 1 и 2 семестры Вы ни слова не сказали (а без этого нормально адресоваться на листы не представляется возможным)
з.з.ы. вариант с созданием листов в данном случае, по моему мнению, более корректен.
Вы правы, когда удалил Февраль(1 семестр) и Февраль (2-ой семестр), и вместо них создал лист "Февраль", то все заработало.
как можно сместить на пару ячеек заполнение столбцов. он заполняет с начала столбца A (A1). необходимо, что бы он начинал заполнение с ячейки A4.
А как вариант возможно написать код для Февраль (1-ый семестр) и Февраль (2-ой семестр отдельно?)
terredis вне форума Ответить с цитированием
Старый 17.04.2013, 08:57   #10
terredis
Пользователь
 
Регистрация: 07.12.2011
Сообщений: 32
По умолчанию

Цитата:
з.ы. по каким критериям разделять февраль на 1 и 2 семестры Вы ни слова не сказали (а без этого нормально адресоваться на листы не представляется возможным)
з.з.ы. вариант с созданием листов в данном случае, по моему мнению, более корректен.
Со всем разобрался кроме того, как начать заполнение с ячейки A4. Какой код нужно добавить или изменить?
terredis вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
протабулировать функцию на отрезке , сдавать скоро aleshkus Паскаль, Turbo Pascal, PascalABC.NET 8 15.12.2011 22:53
завтра лабу сдавать.. сделать не успеваю.. Если время есть можете помочь? skrepochka73 Помощь студентам 2 31.03.2011 23:25
Сдавать скоро а как сделать не знаю eXeS Паскаль, Turbo Pascal, PascalABC.NET 9 07.05.2009 13:43
Плиз, срочно надо!! скоро сдавать Olenka555 Помощь студентам 1 26.05.2008 14:48