Kamil D.

Kamil D. Asystent
projektanta/SOFTPROJ
ECT

Temat: VBA - usuwanie pustych wierszy

Cześć!
Mam taki oto problem: do tabeli użytkownik wprowadza dane przy pomocy userforma. Dane z tabeli wykorzystywane są w liście rozwijalnej (poprawność danych > lista). Gdy użytkownik pozostawi jeden wiersz w tabeli pusty na liście również pojawia się puste miejsce, co nie jest fajne. Zrobiłem makro które przesuwa wypełnione wiersze w miejsce pustych.

Obrazek


Obrazek

Niestety, nie działa jak powinno - uwzglednia tylko pierwszy pusty wiersz. Uruchomione "z palca" kilka razy daje dopiero dobry wynik. Drugi problem jest taki, że chciałbym aby jedynie całkowicie puste wiersze były usuwane, I tutaj już nie mam pomysłu. Ktoś pomoże?
Mateusz M.

Mateusz M. Mateusz M.

Temat: VBA - usuwanie pustych wierszy

Cześć
sprawdź czy zadziała

Dim lastRow As Long
lastRow = Range("A" & Rows.Count).End(xlUp).Row



Range("A1").Select
Range(("A1:A" & lastRow), Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.EntireRow.Delete
Kamil D.

Kamil D. Asystent
projektanta/SOFTPROJ
ECT

Temat: VBA - usuwanie pustych wierszy

Dzięki! Działa ale są dwa problemy:
1) gdy nie ma żadnego pustego wiersza wyrzuca błąd
2) gdy w kolumnie A jest pusta komórka usuwa cały wiersz nawet gdy w komórkach B:D są wartości. Chciałbym aby usuwało wiersz gdy nie ma w nim żadnych wartości. User może chcieć zostawić sobie nie uzupełniony wiersz "na później"

Fajne i zgrabne makro. A ja się grzebałem z pętlami :)Ten post został edytowany przez Autora dnia 22.09.16 o godzinie 10:13
Oskar Shon

Oskar Shon Dodatki do Office
www.VBATools.pl

Temat: VBA - usuwanie pustych wierszy

Zaproponowano:
Selection.SpecialCells(xlCellTypeBlanks).Select

Co jest błędem, ponieważ zaznacza komórki a nie wiersze, co prowadzić może do niebezpiecznych przesunięć. A skasowanie wierszy skasuje rekordy częściowo zapełnione.
Dodatkowo zamiast zaznaczenia .select można użyć zmiennych obiektowych, co znacznie przyśpieszy działanie kodu, jak i zapobiegnie miganiu ekranu.

Oczywiście podam alternatywny pomysł wzbogacony w uniwersalność jego użycia:
http://vbatools.pl/usuwanie-wierszy/
Mateusz M.

Mateusz M. Mateusz M.

Temat: VBA - usuwanie pustych wierszy

Spróbuj tego

Dim row As Range
Dim sheet As Worksheet
Set sheet = ActiveSheet

one:
For i = 1 To sheet.UsedRange.Rows.Count

Set row = sheet.Rows(i)
If WorksheetFunction.CountA(row) = 0 Then
row.Delete
GoTo one


End If

Next i
Kamil D.

Kamil D. Asystent
projektanta/SOFTPROJ
ECT

Temat: VBA - usuwanie pustych wierszy

Hula jak trzeba. Dzięki!
Marzanna Szulta

Marzanna Szulta właściciel, Usługi
Informatyczne
SZULTASET

Temat: VBA - usuwanie pustych wierszy

Mateusz M.:
For i = 1 To sheet.UsedRange.Rows.Coun

Proponowałabym zmienić na :
For i = sheet.UsedRange.Rows.Coun To 1 Step -1 


Przy usuwaniu wierszy "od góry" - ich numery się przesuwają. Jeżeli np.usuniemy wiersz 4, obecny wiersz 5 stanie się 4 - wartość licznika i w pętli się nie zmieni, więc wiersz ten nie będzie sprawdzony.
Idąc "od dołu" - nie ominiemy żadnego wiersza.

Następna dyskusja:

Ukrywanie/usuwanie wierszy ...




Wyślij zaproszenie do