ukrywanie wierszy

Dyskusje dotyczące tworzenia makropoleceń, pisania skryptów oraz programowania przy użyciu UNO

ukrywanie wierszy

Postprzez Adamoos » Wt maja 24, 2016 12:04 pm

Witam
Chciałbym zapytać czy ktoś z forumowiczów pomógłby mi napisać makro do ukrywania wierszy. przeszukałem forum i w tych wątkach które mogły by coś wnieść do mojego arkusza nic nie znalazłem.Tak jak radzę sobie z funkcjami to już z makrem nie bardzo.
Pracuję na arkuszu w którym mam do 200 zajętych wierszy i ok 15 kolumn, jest to mój plan produkcji samochodów i chodzi o to ,że chciałbym ukryć wiersze w których pojazd został już zrobiony, do tej pory zaznaczałem sobie kolorem jako formatowanie warunkowe. Myślę że jeżeli w kolumnie B wpiszę literkę "z" jako zrobiony to ukrywanie wierszy będzie czytelniejsze bo zostaną tylko te które aktualnie się produkują. z góry dziękuję za pomoc znalazłem w sieci takie makro ale to wyrzuca błąd składni BASIC oczekiwano CRLF
Sub HideRowsInCol()
Dim lastRow
lastRow = Cells.SpecialCells(xlCellTypeLastCell).Row
Dim v_column
v_column = 2
For i = 1 To lastRow -- petla po wszystkich wierszach
If (StrComp(Cells(i, v_column).Value, "Z", vbTextCompare) = 0) Then -- tu modyfikujesz też warunek
Cells(i, v_column).EntireRow.Hidden = True
Else
Cells(i, v_column).EntireRow.Hidden = False
End If
Next i
End Sub
dziękuję za pomoc
openOffice 3,3 windows 7
Adamoos
 
Posty: 24
Dołączył(a): Cz kwi 19, 2012 1:07 pm

Re: ukrywanie wierszy

Postprzez Jan_J » Wt maja 24, 2016 1:37 pm

Twoje makro jest napisane w Visual Basicu dla Excela. I średnio jest napisane.

Pętla przebiega po numerach wierszy. OK. Ale w Calcu numeracja od zera.
Do porównania tekstów wystarczy użyć operatora =, np. cell.getString() = "Z"
(Swoją drogą, "Z" i "z" to dwie różne wartości).
Odwołuje się do wiersza metodą EntireRow, której nie ma w Calcu
Komentarze wierszowe powinny zaczynać się ' a nie od --

I wtedy trzeba będzie popracować nad zmianą API z Excelowego na Calcowe. Z grubsza, na bieżącym arkuszu bieżącego skoroszytu, będzie tak
Kod: Zaznacz cały   Rozszerz widokZwiń widok
Sub HideRowsInCol()
Dim lastRow
lastRow = 100 'Cells.SpecialCells(xlCellTypeLastCell).Row
Dim v_column
v_column = 2
s = thisComponent.currentController.getActiveSheet()
For i = 0 To lastRow-1
s.Rows(i).IsVisible = (s.getCellByPosition(v_column, i).getString() = "Z")
Next i
End Sub
Trzeba jeszcze wykryć długość danych, bo arbitralnie ustawiłem na 100.
JJ
LO 5.4 ∙ AOO 4.1.4 ∙ Python (3.6|2.7) ∙ Unicode 10 ∙ LATEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Fedora|CentOS|SUSE)
Jan_J
 
Posty: 3625
Dołączył(a): Pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: ukrywanie wierszy

Postprzez Adamoos » Wt maja 24, 2016 2:36 pm

Dziękuję Panie Janie
skopiowałem to makro do arkusza ale on tam gdzie mam "Z" to zostawia a wszystkie inne ukrywa :(
openOffice 3,3 windows 7
Adamoos
 
Posty: 24
Dołączył(a): Cz kwi 19, 2012 1:07 pm

Re: ukrywanie wierszy

Postprzez Adamoos » Wt maja 24, 2016 2:43 pm

W kolumnie F mam linki w postaci przycisków które odnoszą się do specyfikacji zapisanych w PDF w innym miejscu jak ukrywam wiersze to przyciski pozostają od ukrytych wierszy można coś z tym zrobić aby sie ukrywał wiersz łącznie z przyciskami ?
openOffice 3,3 windows 7
Adamoos
 
Posty: 24
Dołączył(a): Cz kwi 19, 2012 1:07 pm

Re: ukrywanie wierszy

Postprzez belstar » Wt maja 24, 2016 4:24 pm

Adamoos napisał(a):W kolumnie F mam linki w postaci przycisków które odnoszą się do specyfikacji zapisanych w PDF w innym miejscu jak ukrywam wiersze to przyciski pozostają od ukrytych wierszy można coś z tym zrobić aby sie ukrywał wiersz łącznie z przyciskami ?

Zakotwicz te przyciski do komórek w których się znajdują. W trybie projektu zaznacz przycisk, PPM i wybierz odpowiednią opcje.
Adamoos napisał(a):skopiowałem to makro do arkusza ale on tam gdzie mam "Z" to zostawia a wszystkie inne ukrywa

Jan na pewno pisał z palca i wkradł się mały błąd a raczej przeoczenie. Konstrukcja:
Kod: Zaznacz cały   Rozszerz widokZwiń widok
s.getCellByPosition(v_column, i).getString() = "z"

zwraca true a powinna w tym przypadku false, cała linia powinna wyglądać tak:
Kod: Zaznacz cały   Rozszerz widokZwiń widok
s.Rows(i).IsVisible = (NOT(s.getCellByPosition(v_column, i).getString() = "z"))


Jest jeszcze jeden błąd:
Kod: Zaznacz cały   Rozszerz widokZwiń widok
v_column = 2

reprezentuje kolumnę C, a tobie chodziło o B, więc zamiast 2 wstaw 1
LibreOffice 5.1.2.2 Ubuntu 16 LTS
belstar
 
Posty: 635
Dołączył(a): Cz mar 17, 2011 9:08 am

Re: ukrywanie wierszy

Postprzez Jan_J » Wt maja 24, 2016 6:44 pm

belstar napisał(a):Jan na pewno pisał z palca i wkradł się mały błąd a raczej przeoczenie.

Nie pisałem z palca, testowałem poprawność składni, ale rzeczywiście na szybko, więc dostarczyłem zaledwie szkic. Być może zawiera nie do końca ten warunek, o który chodzi.
Natomiast konstrukcja
Kod: Zaznacz cały   Rozszerz widokZwiń widok
for i = 0 to nrows-1
  s.Rows(i).IsVisible = (NOT(s.getCellByPosition(v_column, i).getString() = "z"))
next i
jest postaci “każdemu wierszowi przypisz widoczność zgodnie z wartością logiczną wyniku testu”. Siłą rzeczy, te które dostaną False, zostaną ukryte, a pozostałe będą miały wymuszoną widoczność.
Jeżeli chcemy tylko ukryć niektóre wiersze, nie ruszając statusu pozostałych, właściwsza będzie konstrukcja postaci
Kod: Zaznacz cały   Rozszerz widokZwiń widok
for i = 0 to nrows-1
  if (warunek ukrywania) then
    s.Rows(i).IsVisible = False
  endif
next i
JJ
LO 5.4 ∙ AOO 4.1.4 ∙ Python (3.6|2.7) ∙ Unicode 10 ∙ LATEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Fedora|CentOS|SUSE)
Jan_J
 
Posty: 3625
Dołączył(a): Pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław


Powrót do Makra i programowanie

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość