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

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

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.02.2013, 14:03   #11
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Код:
wsPr.Cells(iPrRow, 9).FormulaLocal = "=Номнедели(ArhRow, 9;[21])"
исправьте на:

Код:
wsPr.Cells(iPrRow, 9).FormulaLocal = "=Номнедели(" & wsArh.Cells(iArhRow, 9).Address &";21)"
И вообще, копирование делается проще:

Код:
If Cells(iArhRow, 9) <= sData And Cells(iArhRow, 10) >= sData Or Cells(iArhRow, 10) = "" Then
  Intersect(Cells(iArhRow, 2).Resize(,9), [B:C, E:F]).Copy  wsPr.Cells(iPrRow, 2) 
  Intersect(Cells(iArhRow, 2).Resize(,9), [I:J]).Copy  wsPr.Cells(iPrRow, 7) 
  wsPr.Cells(iPrRow, 9).FormulaR1C1Local = "=НОМНЕДЕЛИ(RC[-2];2)"
  wsPr.Cells(iPrRow, 1) = iPrRow - 1
  iPrRow = iPrRow + 1
End If
Правильно поставленная задача - три четверти решения.

Последний раз редактировалось DiemonStar; 15.02.2013 в 14:17.
DiemonStar вне форума Ответить с цитированием
Старый 15.02.2013, 14:33   #12
riniks17
Форумчанин
 
Регистрация: 15.12.2011
Сообщений: 355
По умолчанию

Уже не ругаеццо, но считает сколько кукушка накукует, а хотелось бы номера недель.
Вложения
Тип файла: zip График.zip (74.6 Кб, 9 просмотров)
riniks17 вне форума Ответить с цитированием
Старый 15.02.2013, 14:55   #13
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Код:
Private Sub Start_Click()
 Dim sData As Date
  sData = Now()
 Dim iArhRow As Integer
  iArhRow = 2
 Dim wsArh As Worksheet
  Set wsArh = Worksheets("Архив")
 Dim wsPr As Worksheet
  Set wsPr = Worksheets("Присутствующие")
 Dim wsDep As Worksheet
  Set wsDep = Worksheets("График отъездов")
 Dim wsArr As Worksheet
  Set wsArr = Worksheets("График приездов")
 Dim iPrRow As Integer
  iPrRow = 1
    
 wsPr.Range(wsPr.[A2], wsPr.Cells(wsPr.Rows.Count, 1).End(xlUp)).EntireRow.ClearContents
 Set Dst = wsPr.[A1]
 
 For Each Rw In Rows
   If Rw.Cells(1, 9) = "" Then Exit For
   If Rw.Cells(1, 9) <= sData And Rw.Cells(1, 10) >= sData Or IsEmpty(Rw.Cells(1, 10)) Then
     Intersect(Rw, [B:C, E:F]).Copy Dst.Offset(iPrRow, 1)
     Intersect(Rw, [I:J]).Copy Dst.Offset(iPrRow, 6)
     Dst.Offset(iPrRow, 8).FormulaR1C1Local = "=НОМНЕДЕЛИ(RC[-2];2)"
     Dst.Offset(iPrRow, 9).FormulaR1C1Local = "=ЕСЛИ(ЕПУСТО(RC[-2]);"""";НОМНЕДЕЛИ(RC[-2];2))"
     Dst.Offset(iPrRow) = iPrRow
     iPrRow = iPrRow + 1
   End If
 Next Rw
 wsPr.Range(wsPr.[H1], wsPr.Cells(wsPr.Rows.Count, 1).End(xlUp)).EntireRow.Sort Key1:=wsPr.[H1], Order1:=xlAscending, Header:=xlYes
       
 'wsPr.Range("I2").FormulaLocal = "=НОМНЕДЕЛИ(G2;21)"
       
End Sub
Замените вашу функцию на эту.

upd. Немного поправил условие.
Правильно поставленная задача - три четверти решения.

Последний раз редактировалось DiemonStar; 15.02.2013 в 15:01.
DiemonStar вне форума Ответить с цитированием
Старый 15.02.2013, 15:10   #14
riniks17
Форумчанин
 
Регистрация: 15.12.2011
Сообщений: 355
По умолчанию

Как только проставляю дату убытия на листе "архив" в колонке "J", вааще ничего не фильтрует. Но буду пробовать разобраться. Код-блеск.

Все работает, спасибо. Буду продолжать дальше.

Последний раз редактировалось riniks17; 15.02.2013 в 15:14.
riniks17 вне форума Ответить с цитированием
Старый 15.02.2013, 15:17   #15
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
Сообщение от riniks17 Посмотреть сообщение
Как только проставляю дату убытия на листе "архив" в колонке "J", вааще ничего не фильтрует. Но буду пробовать разобраться. Код-блеск.
Вы конкретнее объясните, чего хотите добиться. Как я понимаю, копируются из архива лишь те записи, которые не закрыты на текущую дату, проставляются номера недель и сортируются по дате прибытия. Тут всё логично. Но тогда вопрос: почему должно фильтровать здесь, если вы изменяете значение в архиве? Чего вы хотите этим добиться?
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 15.02.2013, 15:33   #16
riniks17
Форумчанин
 
Регистрация: 15.12.2011
Сообщений: 355
По умолчанию

Вообще то это рабочий файл. Ну не пример там никакой. Пока его формируют вручную. Все правильно. Из архива копируются незакрытые записи в три листа. Приезды, отъезды, присутствующие. Присутствующие сортируются по графе специальность для табеля. Табель ещё буду делать как сводную. Приезды сортируются по дате приезда и разбиваются в блоки по неделям. Отъезды сортируются по дате отъезда и разбиваются в блоки по неделям. Пример формата в листе. В этом же листе должна быть возможность проставить или изменить дату отъезда со всеми последуюими изменениями в файле. Примерно так.
riniks17 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Свой код для каждого листа Brucebelg Microsoft Office Excel 11 26.01.2012 17:21
Как получить список именованных диапазонов листа через VBA myprog Microsoft Office Excel 1 14.05.2011 13:57
При создании нового листа программно поставить на него защиту (с помощью VBA) Lis000iq Microsoft Office Excel 2 30.06.2009 18:41
Как средствами VBA сделать точную копию листа и вставить ее в конец книги? Pavel_Ine Microsoft Office Excel 13 10.06.2009 19:39
Печать листа через VBA Волк Microsoft Office Excel 1 27.02.2009 11:37