Strona 1 z 1

ukrywanie wierszy

: wt maja 24, 2016 12:04 pm
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

Re: ukrywanie wierszy

: wt maja 24, 2016 1:37 pm
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.

Re: ukrywanie wierszy

: wt maja 24, 2016 2:36 pm
autor: Adamoos
Dziękuję Panie Janie
skopiowałem to makro do arkusza ale on tam gdzie mam "Z" to zostawia a wszystkie inne ukrywa :(

Re: ukrywanie wierszy

: wt maja 24, 2016 2:43 pm
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 ?

Re: ukrywanie wierszy

: wt maja 24, 2016 4:24 pm
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

Re: ukrywanie wierszy

: wt maja 24, 2016 6:44 pm
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