ukrywanie wierszy

Dyskusje dotyczące tworzenia makropoleceń, pisania skryptów oraz programowania przy użyciu UNO
Adamoos
Posty: 37
Rejestracja: czw kwie 19, 2012 1:07 pm

ukrywanie wierszy

Post autor: Adamoos »

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
Jan_J
Posty: 4560
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: ukrywanie wierszy

Post autor: Jan_J »

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

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 (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Adamoos
Posty: 37
Rejestracja: czw kwie 19, 2012 1:07 pm

Re: ukrywanie wierszy

Post autor: Adamoos »

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: 37
Rejestracja: czw kwie 19, 2012 1:07 pm

Re: ukrywanie wierszy

Post autor: Adamoos »

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
belstar
Posty: 654
Rejestracja: czw mar 17, 2011 9:08 am

Re: ukrywanie wierszy

Post autor: belstar »

Adamoos pisze: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 pisze: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

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

s.Rows(i).IsVisible = (NOT(s.getCellByPosition(v_column, i).getString() = "z"))
Jest jeszcze jeden błąd:

Kod: Zaznacz cały

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
Jan_J
Posty: 4560
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: ukrywanie wierszy

Post autor: Jan_J »

belstar pisze: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

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

for i = 0 to nrows-1 
  if (warunek ukrywania) then
    s.Rows(i).IsVisible = False
  endif
next i
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
ODPOWIEDZ