EXCEL – niepoprawny CurrentRegion po usunięciu wiersza
W makro wykorzystuje właściwość ActiveCell.CurrentRegion.Select aby wskazać aktywny zakres danych.
Jeźeli w trakcie pracy z określonego wcześniej regionu arkusza usunę wiersz lub wiersze to Excel pamięta ciągle stary zakres.
Dopiero po zapisaniu zmodyfikowanego arkusza (focus na komórce A1) zakres określany jest prawidłowo.
Jak uzyskać prawidłowe określenie CurrentRegion bez zapisywania pliku?
Jeźeli w trakcie pracy z określonego wcześniej regionu arkusza usunę wiersz lub wiersze to Excel pamięta ciągle stary zakres.
Dopiero po zapisaniu zmodyfikowanego arkusza (focus na komórce A1) zakres określany jest prawidłowo.
Jak uzyskać prawidłowe określenie CurrentRegion bez zapisywania pliku?
Odpowiedzi: 3
Zaraz pomyślę jak to zrobić, ale na początek
doczytałam kiedyś, źe xlCellTypeLastCell –
zwraca ostatni wiersz do którego kiedykolwiek zostały wpisane jakieś dane i stąd bierze sie koniecznośc zapisu chyba, moźe trzeba innej metody
np:
MsgBox Cells(3, 1).CurrentRegion.Address
w = Range(Cells(3, 1).CurrentRegion.Address).End(xlDown).Row
k = Range(Cells(3, 1).CurrentRegion.Address).End(xlToRight).Column
MsgBox "ostatnia komórka danych: wiersz " & w & ", kolumna " & k
ale jeszcze się upewnię...
Uźywasz w podanym przez Ciebie kodzie ActiveCell i jeśli bedę miała podczas wykonania Twojej procedury wybraną inną komórkę niź w podanym regionie (CurrentRegion) to fragment poniźszy jest całkowicie źle ?? Wiesz o tym ?
w = ActiveCell.SpecialCells(xlCellTypeLastCell).Row
k = ActiveCell.SpecialCells(xlCellTypeLastCell).Column
doczytałam kiedyś, źe xlCellTypeLastCell –
zwraca ostatni wiersz do którego kiedykolwiek zostały wpisane jakieś dane i stąd bierze sie koniecznośc zapisu chyba, moźe trzeba innej metody
np:
MsgBox Cells(3, 1).CurrentRegion.Address
w = Range(Cells(3, 1).CurrentRegion.Address).End(xlDown).Row
k = Range(Cells(3, 1).CurrentRegion.Address).End(xlToRight).Column
MsgBox "ostatnia komórka danych: wiersz " & w & ", kolumna " & k
ale jeszcze się upewnię...
Uźywasz w podanym przez Ciebie kodzie ActiveCell i jeśli bedę miała podczas wykonania Twojej procedury wybraną inną komórkę niź w podanym regionie (CurrentRegion) to fragment poniźszy jest całkowicie źle ?? Wiesz o tym ?
w = ActiveCell.SpecialCells(xlCellTypeLastCell).Row
k = ActiveCell.SpecialCells(xlCellTypeLastCell).Column
Wielkie sorry, rzeczywiście Current.Region zachowuje się poprawnie.
Po ponownej analizie doszedłem źe przyczyną błędu jest Last.Cell.
Poniźej kod który to ujawnia:
Sub myTest()
' kontrola jak działa CurrentRegion i LastCell
' zakładamy źe na pierwszym arkuszu są dane conajmniej w komórce "A3" i kilku sąsiednich wierszach
Dim w, k
Worksheets(1).Activate
w = Cells(3, 1).CurrentRegion.Rows.Count
k = Cells(3, 1).CurrentRegion.Columns.Count
MsgBox "Aktywny region ma " & w & " wierszy i " & k & " kolumn"
w = ActiveCell.SpecialCells(xlCellTypeLastCell).Row
k = ActiveCell.SpecialCells(xlCellTypeLastCell).Column
MsgBox "ostatnia komórka danych: wiersz " & w & ", kolumna " & k
End Sub
Uruchom myTest i zobacz wyniki,
następnie usuń jak zwykły uzytkownik dowolny wiersz z zakresu danych i ponownie uruchom test.
LastCell ciągle wskazuje poprzednią komórkę
Po ponownej analizie doszedłem źe przyczyną błędu jest Last.Cell.
Poniźej kod który to ujawnia:
Sub myTest()
' kontrola jak działa CurrentRegion i LastCell
' zakładamy źe na pierwszym arkuszu są dane conajmniej w komórce "A3" i kilku sąsiednich wierszach
Dim w, k
Worksheets(1).Activate
w = Cells(3, 1).CurrentRegion.Rows.Count
k = Cells(3, 1).CurrentRegion.Columns.Count
MsgBox "Aktywny region ma " & w & " wierszy i " & k & " kolumn"
w = ActiveCell.SpecialCells(xlCellTypeLastCell).Row
k = ActiveCell.SpecialCells(xlCellTypeLastCell).Column
MsgBox "ostatnia komórka danych: wiersz " & w & ", kolumna " & k
End Sub
Uruchom myTest i zobacz wyniki,
następnie usuń jak zwykły uzytkownik dowolny wiersz z zakresu danych i ponownie uruchom test.
LastCell ciągle wskazuje poprzednią komórkę
Poniewaź nie zaobserwowałam takiego "zjawiska" proszę o bliźszy opis "okoliczności", moźe kawałek kodu ?
Strona 1 / 1