Excel Forum - Porady, Pomoc,  Excel Help, Excel FAQ Strona Główna
 FAQ  RegulaminRegulamin  Szukaj   Użytkownicy   Grupy   Rejestracja   Profil   Twoje wiadomości   Zaloguj 


Poprzedni temat «» Następny temat
ID tematu: 64075 Skopiuj do schowka Sortowanie rosnąco kolumny
Autor Wiadomość
MichalScz 
forumowicz


Posty: 12
Wysłany: 08-02-2019, 10:30   Sortowanie rosnąco kolumny

Cześć,
Nagrałem makro które sortuje wartości w jednej z kolumn.

Kod:

    'Sortowanie po shp
    Range("G3:G51").Select
    Range(Selection, Selection.End(xlDown)).Select
    ActiveWorkbook.Worksheets("01").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("01").Sort.SortFields.Add2 Key:=Range("G3"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("01").Sort
        .SetRange Range("A3:T51")
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With


Problem z jakim się borykam to numer arkusza. W skoroszycie na którym pracuje, utworzono 31 arkuszy (na każdy dzień tygodnia). Powyższy kod został nagrany w 1. arkuszu.

Kod:

 ActiveWorkbook.Worksheets("01").


Jeżeli uruchamiam makro w 2. arkuszu, sortowanie nie działa. Jak zmodyfikować kod, aby makro sortowało kolumnę aktywnego arkusza? Możliwe do zrobienia?

Z góry dzięki za pomoc.
Pozdrawiam.
Michał
ID posta: 362195 Skopiuj do schowka
 
 
BrunO 
ExcelSpec



Pomógł: 126 razy
Posty: 551
Wysłany: 08-02-2019, 10:52   

Kod:
ActiveWorkbook.ActiveSheet.


P.S. 31 arkuszy, po jednym na każdy dzień tygodnia? To do weekendu jeszcze trochę wam zostało ;-)
ID posta: 362198 Skopiuj do schowka
 
 
MichalScz 
forumowicz


Posty: 12
Wysłany: 08-02-2019, 11:14   

Hej, dzięki za szybką odpowiedź. Na każdy dzień miesiąca :hamer Stąd to makro.
Niestety wyświetla błąd.
Kod:
   
 'Sortowanie po shp
    Range("G3:G51").Select
    Range(Selection, Selection.End(xlDown)).Select
    ActiveWorkbook.ActiveSheet.Sort.SortFields.Clear
    ActiveWorkbook.ActiveSheet.Sort.SortFields.Add2 Key:=Range("G3"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.ActiveSheet
        .SetRange Range("A3:T51")
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

podświetla wiersz
Kod:

.SetRange Range("A3:T51")


Treść błędu
Object doesn't support this object or method

Może źle zmodyfikowałem powyższy kod. Dopiero zaczynam zabawę z VBA.

Pozdrawiam
Michał

PS. Działa Zrobiłem błąd ale już sobie poradziłem.

Dzięki.
Pozdrawiam
Michał
ID posta: 362201 Skopiuj do schowka
 
 
BrunO 
ExcelSpec



Pomógł: 126 razy
Posty: 551
Wysłany: 08-02-2019, 11:48   

poprawiając najwyraźniej zjadłeś ".Sort" na końcu linijki
Kod:
With ActiveWorkbook.ActiveSheet


zastanawia mnie też
Kod:
ActiveWorkbook.ActiveSheet.Sort.SortFields.Add2
a dokładnie ta dwójka na końcu. Nie wywalało ci błędu na tej linijce?
Zaznaczanie obszaru na początku można sobie darować, with można odrobinę rozszerzyć względem tego, co automat nagrał

Kod:
    With ActiveWorkbook.ActiveSheet.Sort
        .SortFields.Clear
        .SortFields.Add Key:=Range("G3"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .SetRange Range("A3:T51")
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With


Sprawdź czy działa na twoich danych, ja testowałem na mniejszym obszarze, bo nie chciało mi się takiej płachty preparować...
ID posta: 362203 Skopiuj do schowka
 
 
Zbiniek 
Excel Expert



Zaproszone osoby: 2
Wersja: Win Office 2013
Pomógł: 404 razy
Posty: 2577
Wysłany: 08-02-2019, 12:43   

BrunO napisał/a:
zastanawia mnie też
Kod:
ActiveWorkbook.ActiveSheet.Sort.SortFields.Add2

Zerknij tu -> http://www.excelforum.pl/viewtopic.php?p=353970 i w dół
_________________
pozdrawiam
Zbiniek

Pisz po polsku! Jest różnica czy siedzisz w sadzie czy w sądzie. "Język polski jest ą-ę" :-)

Prawdopodobieństwo otrzymania satysfakcjonującej odpowiedzi jest proporcjonalne do właściwego sformułowania problemu (popartego załącznikiem).

Jest załącznik - jest impreza

http://rtfm.killfile.pl/
ID posta: 362209 Skopiuj do schowka
 
 
BrunO 
ExcelSpec



Pomógł: 126 razy
Posty: 551
Wysłany: 08-02-2019, 13:04   

To by wszystko tłumaczyło, pracuję na 2010, więc mi krzaczyło. Pomyślałem, że ta 2 się nieopatrznie dopisała podczas zamian i zdziwiło mnie czemu MichalScz pisze o błędzie w dalszym wierszu.
ID posta: 362210 Skopiuj do schowka
 
 
ąćęłńóś
Excel Expert


Pomógł: 193 razy
Posty: 881
Wysłany: 08-02-2019, 13:18   

MichalScz napisał/a:
sortowało kolumnę aktywnego arkusza

Dziwne te sorotowania w nowych xlsach ... :roll: :
I po co aktywny arkusz (?) .. oczopląsu będzie można dostać, jak zacznie mrygolić ...
Kod:
Option Explicit

Sub aaa()
    Dim i As Integer, idn As Integer, idw As Integer, dzien
   
    dzien = Array("01", "02", "03", "04", "05", "06", "07", "08", "09", "10", _
                  "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", _
                  "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", _
                  "31")
    idn = LBound(dzien)
    idw = UBound(dzien)
   
    With ThisWorkbook
        On Error Resume Next
        For i = idn To idw
            With .Sheets(dzien(i))
                .Range("A3").CurrentRegion.Sort Key1:=.Range("G3"), Order1:=xlAscending, _
                                                Header:=xlNo, Orientation:=xlTopToBottom
            End With
            If Err.Number <> 0 Then Err.Clear
        Next
        On Error GoTo 0
    End With
End Sub
ID posta: 362211 Skopiuj do schowka
 
 
MichalScz 
forumowicz


Posty: 12
Wysłany: 08-02-2019, 21:06   

Hej,
arkusz jest aktywny bo jeszcze muszę go "obrobić". Muszę jeszcze ręcznie usunąć zdublowane wartości z 4 kolumn. Ale żeby nie było za łatwo, pierwszy rekord z każdej zdublowanej wartości musi pozostać w arkuszu. Na przykład kolumna A zawiera liczby porządkowe. Pierwsze trzy wiersze mają przypisaną liczbę porządkową "1". Chciałbym w komórce A1 zostawić "1" a usunąć duble z komórek A2 i A3. Jakieś pomysły?
Pozdrawiam.
Michał
ID posta: 362242 Skopiuj do schowka
 
 
BrunO 
ExcelSpec



Pomógł: 126 razy
Posty: 551
Wysłany: 08-02-2019, 22:30   

Jest opcja Dane->UsuńDuplikaty, prawdopodobnie jest ona w stanie zaoszczędzić tej ręcznej roboty, aczkolwiek nie widząc danych mogę tylko domniemywać.
ID posta: 362244 Skopiuj do schowka
 
 
ąćęłńóś
Excel Expert


Pomógł: 193 razy
Posty: 881
Wysłany: 08-02-2019, 23:56   

MichalScz napisał/a:
... żeby nie było za łatwo, pierwszy rekord z każdej zdublowanej wartości musi pozostać w arkuszu ... w komórce A1 zostawić "1" a usunąć duble z komórek A2 i A3 ...

Co to ma wspólnego z pierwszym wpisem i tematem wątku ?
ID posta: 362245 Skopiuj do schowka
 
 
MichalScz 
forumowicz


Posty: 12
Wysłany: 09-02-2019, 10:02   

Cześć,
ąćęłńóś napisał/a:
Co to ma wspólnego z pierwszym wpisem i tematem wątku ?

Nie zakładałem kolejnego wątku skoro ten się tak potoczył.


BrunO napisał/a:
Jest opcja Dane->UsuńDuplikaty, prawdopodobnie jest ona w stanie zaoszczędzić tej ręcznej roboty, aczkolwiek nie widząc danych mogę tylko domniemywać.

Sęk w tym, że opcja usuń duble usunie wartości z całego wiersza, z wszystkich kolumn. A mi chodzi o to żeby usunąć zdublowane wartości w 4 kolumnach. W załączniku plik wyjściowy i plik docelowy.

Pozdrawiam.
Michał.

Docelowy.xls
Pobierz Plik ściągnięto 8 raz(y) 36.5 KB

Wyjściowy.xls
Pobierz Plik ściągnięto 7 raz(y) 36.5 KB

ID posta: 362252 Skopiuj do schowka
 
 
Artik 



Wersja: Win Office 365
Pomógł: 2624 razy
Posty: 8659
Wysłany: 09-02-2019, 11:43   

MichalScz napisał/a:
Nie zakładałem kolejnego wątku skoro ten się tak potoczył.
A powinieneś. Problem duplikatów nijak się ma do tematu wątku.

Jeżeli z sortowaniem jest wszystko OK, to proszę zaprzestać kontynuacji wątku pobocznego i założyć nowy. A być może, przed założeniem, poszukać czy problemu już ktoś nie rozwiązał wcześniej. Wiem, to może nie być łatwe, ale między innymi przez takie wątki poboczne, źle nazywane tematy (nie dotyczy Ciebie), trudno później coś znaleźć z wykorzystaniem wyszukiwarki.

Artik
_________________
Persistence is a virtue in the world of programming.
ID posta: 362255 Skopiuj do schowka
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Theme xandgreen created by spleen& Programosy modified v0.3 by warna
Opieka techniczna www.marketingNET.pl

Archiwum

Strona używa plików cookies.

Kliknij tutaj, żeby dowiedzieć się jaki jest cel używania cookies oraz jak zmienić ustawienia cookie w przeglądarce.
Korzystając ze strony użytkownik wyraża zgodę na używanie plików cookies, zgodnie z bieżącymi ustawieniami przeglądarki.
Sprawdź, w jaki sposób przetwarzamy dane osobowe