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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.02.2013, 12:47   #1
riniks17
Форумчанин
 
Регистрация: 15.12.2011
Сообщений: 355
По умолчанию VBA код. Очистка листа и сортировка.

Здравствуйте уважаемые гуру.
Написал код. надо перед новым запуском программы очистить все записи. Сначала записал перед циклом "Сlear", но убирает и шапку и форматы дат. ClearContens лучше, но зачем чистить весь лист? Когда нужно только записи и шапку оставить. Можно, конечно перед циклом после очистки записать шапку, но как то непрофессионально. И ещё. Надо отфильтровать лист по датам по столбцу "Н". Чё то я затупил. И макрорекодером записывал, и код уважаемого EducatedFool пробовал. Не катит. Если сортирую в листе, первый столбец № по порядку сбивается.Вобщем я в панике. Помогите начинающему самоучке.

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 = 2
wsPr.Cells.ClearContents
Do While Cells(iArhRow, 9) <> ""
If Cells(iArhRow, 9) <= sData And Cells(iArhRow, 10) > sData Or Cells(iArhRow, 10) = "" Then

wsPr.Cells(iPrRow, 2) = wsArh.Cells(iArhRow, 2)
wsPr.Cells(iPrRow, 3) = wsArh.Cells(iArhRow, 3)
wsPr.Cells(iPrRow, 4) = wsArh.Cells(iArhRow, 5)
wsPr.Cells(iPrRow, 5) = wsArh.Cells(iArhRow, 6)
wsPr.Cells(iPrRow, 7) = wsArh.Cells(iArhRow, 9)
wsPr.Cells(iPrRow, 8) = wsArh.Cells(iArhRow, 10)
wsPr.Cells(iPrRow, 1) = iPrRow - 1
iPrRow = iPrRow + 1

End If

iArhRow = iArhRow + 1

Loop

'wsPr.Range("B2:H11000").Sort wsPr.Range("H2:Н1000"), xlAscending

End Sub

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

например, для удаления данных со второй строки подойдёт такой код:

Код:
Range([A2], Cells(Rows.Count, 1).End(xlUp)).EntireRow.ClearContents
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 13.02.2013, 15:00   #3
riniks17
Форумчанин
 
Регистрация: 15.12.2011
Сообщений: 355
По умолчанию

Цитата:
Сообщение от DiemonStar Посмотреть сообщение
например, для удаления данных со второй строки подойдёт такой код:

Код:
Range([A2], Cells(Rows.Count, 1).End(xlUp)).EntireRow.ClearContents
wsPr.Range([A2], Cells(Rows.Count, 1).End(xlUp)).EntireRow.ClearConten ts

Не работает
riniks17 вне форума Ответить с цитированием
Старый 13.02.2013, 15:15   #4
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
Сообщение от riniks17 Посмотреть сообщение
wsPr.Range([A2], Cells(Rows.Count, 1).End(xlUp)).EntireRow.ClearConten ts

Не работает
Код:
wsPr.Range(wsPr.[A2], wsPr.Cells(wsPr.Rows.Count, 1).End(xlUp)).EntireRow.ClearContents
А если попробовать так?
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 13.02.2013, 15:34   #5
riniks17
Форумчанин
 
Регистрация: 15.12.2011
Сообщений: 355
По умолчанию

Цитата:
Сообщение от DiemonStar Посмотреть сообщение
Код:
wsPr.Range(wsPr.[A2], wsPr.Cells(wsPr.Rows.Count, 1).End(xlUp)).EntireRow.ClearContents
А если попробовать так?
Поклон. Ща плюсану....
riniks17 вне форума Ответить с цитированием
Старый 13.02.2013, 18:52   #6
riniks17
Форумчанин
 
Регистрация: 15.12.2011
Сообщений: 355
По умолчанию

С сортировкой по столбцу "Н" кто-нить могёт помочь? Начиная со второй строки.
riniks17 вне форума Ответить с цитированием
Старый 14.02.2013, 08:29   #7
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Код:
wsPr.Range(wsPr.[H2], wsPr.Cells(wsPr.Rows.Count, 1).End(xlUp)).EntireRow.Sort  Key1:=wsPr.[H1], Order1:=xlAscending, Header:=xlYes
всё примерно так же)
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 14.02.2013, 12:28   #8
riniks17
Форумчанин
 
Регистрация: 15.12.2011
Сообщений: 355
По умолчанию

Цитата:
Сообщение от DiemonStar Посмотреть сообщение
Код:
wsPr.Range(wsPr.[H2], wsPr.Cells(wsPr.Rows.Count, 1).End(xlUp)).EntireRow.Sort  Key1:=wsPr.[H1], Order1:=xlAscending, Header:=xlYes
всё примерно так же)
Полтергейст. Вчера вечер убил. И писал то же самое (почти ). А сегодня Ваш код вставил и всё заработало. Только Range(wsPr.[H2], wsPr.Cells(wsPr.Rows.Count, 1).сюда Н1 вставил. А то код вторую строчку за Header считал. И всё заработало. А где хоть плюсануть Вас можно, уважаемый?
riniks17 вне форума Ответить с цитированием
Старый 14.02.2013, 13:36   #9
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
А где хоть плюсануть Вас можно, уважаемый?
Слева весы есть в каждом сообщении.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 15.02.2013, 13:58   #10
riniks17
Форумчанин
 
Регистрация: 15.12.2011
Сообщений: 355
По умолчанию

Ыщо одна задача. Хочу, что в код вставить формулу для определения номера недель. Просто вставить в код, получается.
wsPr.Range("I2").FormulaLocal = "=Номнедели(G2;21)"
а вставляю в цикл, ругаеццо.
Do While Cells(iArhRow, 9) <> ""
If Cells(iArhRow, 9) <= sData And Cells(iArhRow, 10) >= sData Or Cells(iArhRow, 10) = "" Then

wsPr.Cells(iPrRow, 2) = wsArh.Cells(iArhRow, 2)
wsPr.Cells(iPrRow, 3) = wsArh.Cells(iArhRow, 3)
wsPr.Cells(iPrRow, 4) = wsArh.Cells(iArhRow, 5)
wsPr.Cells(iPrRow, 5) = wsArh.Cells(iArhRow, 6)
wsPr.Cells(iPrRow, 7) = wsArh.Cells(iArhRow, 9)
wsPr.Cells(iPrRow, 8) = wsArh.Cells(iArhRow, 10)
wsPr.Cells(iPrRow, 9).FormulaLocal = "=Номнедели(ArhRow, 9;[21])"
wsPr.Cells(iPrRow, 1) = iPrRow - 1
iPrRow = iPrRow + 1

End If

iArhRow = iArhRow + 1
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