Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: Удаляем пустые ряды Добавлено: 04.12.08 13:20  

Автор вопроса:  AngryBadger
Доброго времени суток.

Есть следующий код:

Sub Del()

Dim iStartRow As Integer
Dim iLastRow As Integer

 iStartRow = 4
 iLastRow = Columns(1).Rows(65536).End(xlUp).Row + 1

   Do until iStartRow = iLastRow + 1

If Cells(iStartRow, 4).Value = Empty Then
   Rows(iStartRow).Delete shift = xlUp
End If

   iStartRow = iStartRow + 1
   
   Loop

End Sub


Проблема в том, что удаляются не все ряды с пустой ячейкой в 4 колонке. Но самое интересное, если прогнать код раз 5 - все получается. Есть ли какой нибудь способ не включать For - Next, а продолжать использовать Do Loop?

Заранее спасибо.

Ответить

  Ответы Всего ответов: 6  

Номер ответа: 1
Автор ответа:
 Jasmin



Вопросов: 23
Ответов: 417
 Профиль | | #1 Добавлено: 04.12.08 15:02
Попробуй исправить
  1. iLastRow = Columns(1).Rows(65536).End(xlUp).Row + 1

на:
  1. iLastRow = Columns(4).Rows(65536).End(xlUp).Row + 1

Все удаляется за один проход.

Ответить

Номер ответа: 2
Автор ответа:
 AngryBadger



Вопросов: 33
Ответов: 245
 Профиль | | #2 Добавлено: 04.12.08 15:15
Хоть разницы ни какой, но попробовал. Таже ситуация, что и в первоначальном варианте.

Ответить

Номер ответа: 3
Автор ответа:
 AngryBadger



Вопросов: 33
Ответов: 245
 Профиль | | #3 Добавлено: 04.12.08 15:27
Всем спасибо, проблему решил. Все было из-за:

.Delete shift = xlUp

, при удалении ряда значение iCurrentRow перескакивало через ячейку, поэтому добавил:

 iLastRow = Columns(1).Rows(65536).End(xlUp).Row - 1
 iCurrentRow = iCurrentRow - 1

Ответить

Номер ответа: 4
Автор ответа:
 AngryBadger



Вопросов: 33
Ответов: 245
 Профиль | | #4 Добавлено: 04.12.08 15:29
Прошу прощения не iCurrentRow, а iStartRow ))

Ответить

Номер ответа: 5
Автор ответа:
 ADSemenov.ru



Вопросов: 5
Ответов: 276
 Web-сайт: www.adsemenov.ru
 Профиль | | #5
Добавлено: 04.12.08 17:19
____ Я бы удалял с конца, тогда не будет пропусков. И я бы брал только "существующие" строки, а не все на листе (через UsedRange).

Ответить

Номер ответа: 6
Автор ответа:
 Jasmin



Вопросов: 23
Ответов: 417
 Профиль | | #6 Добавлено: 04.12.08 17:22
На мой взгляд, разница в том, из какой колонки получать последнюю заполненную ячейку.

Я так поняла, что нужно удалить строки с пустой ячейкой в 4 столбце/колонке. Правильно ? Если да, то взяла твой код один в один, исправив только вышенаписанную мной строку и все нормально удаляется. За один проход.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам