Wpis z mikrobloga

#excel #makra #vba #arkuszkalkulacyjny #mirkopomusz #programowanie

próbuję sobie poklikać coś w vba, nigdy wcześniej nie miałem styczności, więc oglądam to co na yt, czytam i na stacku przeglądam rozwiązania, ale #!$%@? mnie bierze ( ͡° ͜ʖ ͡°).
1. czy w standardowym edytorze makr w excelu idzie zawijać wiersze? pracować z tym nie idzie, ktoś sugerował po prostu pisanie w jakimś edytorze i wklejanie do excela
2. czy można mieć dowolną paletę kolorów przy edycji toggle button? poza tym co oferuje excel

no i główne pytanie. mam toggle button, chcę hide/show wiersze, które nie są obok siebie, kminię z range i areas, ale nie umiem into vba i mnie skutecznie ta toporność odstrasza.
udało mi się ogarnąć coś takiego

Private Sub ToggleButton1_Click()

If ToggleButton1.Value Then
Application.ActiveSheet.Range("2:5,7:13,15:21,23:29,31:37).EntireRow.Hidden = True
ToggleButton1.Caption = "ungroup"
Else
Application.ActiveSheet.Range("2:5,7:13,15:21,23:29,31:37").EntireRow.Hidden = False
ToggleButton1.Caption = "group weekly summaries"
End If
End Sub

no i działa, ale no nie będę wklepywał z palca zakresów, a poza tym przy większej ilości jest 1004 object error i cześć. jak tu zadeklarować zmienną i dobrze to zrobić? próbowałem tak:
If ToggleButton1.Value Then
Dim dupa As Areas
Set dupa = Range("2:5,7:13,15:21,23:29 i tak dalej").Areas
tak by potem w If zamiast do range odnieść się do tej dupy, ale to nie działa.

ktoś pomoże? ( ͡° ʖ̯ ͡°) czytałem o odwoływaniu się do zakresów, ale głównie pojawiało się to w kontekście kolumn a ja chcę niestandardowe wiersze, które się nie stykają
  • 10
via Wykop Mobilny (Android)
  • 1
@Pan_Cerny: zrobiłem tak! ale, że nie umiem into vba to rozbiłem na dwa przyciski ( ͡° ͜ʖ ͡°) jedno zarejestrowane makro mi chowało, drugie odkrywało.
mimo wszystko albo sobie dane inaczej ułoże i jednym buttonem pochowam, albo tak jak mówisz pobawię się rejestrowaniem
@Pan_Cerny: jeszcze inaczej pokombinowałem. nie umiałem tak zadeklarować range ani area, by móc się do tego odwołać w pętli, rejestrowanie makra działa, ale wygodniej mi się obsługuje togglebutton. ale działa takie odwołanie:
If ToggleButton1.Value Then
Application.ActiveSheet.Range("2:5,7:13,15:21,23:29").EntireRow.Hidden = True
Application.ActiveSheet.Range("31:37,39:45,47:53").EntireRow.Hidden = True
i unikam 1004 error, bo sobie dzielę na sztywno interesujące mnie wiersze w nawiasie na małe fragmenty. aż zęby bolą jak się na to patrzy, ale działa ( ͡°
@tolstyy00: Wiersz zawijasz przez spacja podkreślnik :)

Zakres możesz zdefiniować w zmiennej:

zakr = "2:5,7:13,15:21,23:29,31:37,39:45,47:53"
Range(zakr).Select

O ile dobrze kojarzę, to zadziała dla tekstu o długości do 255. znaków (czyli z grubsza licząc 30-40. zakresów). Jeżeli chciałbyś więcej, można to obejść np. tak:

Sub grupowanie()

txt = "2:5,7:13,15:21,23:29,31:37,39:45,47:53"

zakresy = Split(txt, ",")

Set wiersze = Range(zakresy(0))

For i = 1 To UBound(zakresy)
Set wiersze = Union(wiersze, Range(zakresy(i)))
Next

wiersze.Select

End Sub
@DwaNiedzwiedzie: o tej spacji wykminiłem!
i już? tyle czytałem o tych zmiennych, że musi być areas albo range i potem odpowiednie odwołanie w pętli a tu takie range(zakr).select da radę :D.
tak, działa do 255 znaków, więc jak chciałem podać zmienny zakres i wklepałem prawie 300 wierszy to się dziwiłem gdzie błąd jest a dopiero później znalazłem info o tych wartościach.
próbowałem też duże zakresy połączyć union, ale nie potrafiłem. tak
tolstyy00 - @DwaNiedzwiedzie: o tej spacji wykminiłem!
i już? tyle czytałem o tych z...

źródło: comment_vNQbf24lUi5WKeHW7H4p2T5CT1kwhtKn.jpg

Pobierz
@DwaNiedzwiedzie: rivate Sub ToggleButton4Click()
If ToggleButton4.Value Then
Application.ActiveSheet.Range("2:5,7:13,15:21,23:29,31:37,39:45,47:53,55:61,63:69,71:77,79:85,87:93").EntireRow.Hidden = True
Application.ActiveSheet.Range("95:101,103:109,111:117,119:125,127:133,135:141,143:149,151:157,159:165,167:173,175:181,183:189")

.EntireRow.Hidden = True
Application.ActiveSheet.Range("191:197,199:205,207:213,215:221,223:229,231:237,239:245,247:253,255:261,263:269,271:277,279:285") _
.EntireRow.Hidden = True
xd Twoje rozwiązanie lepsze
via Wykop Mobilny (Android)
  • 0
Lepsze to jest użycie odrobiny matematyki :

@DwaNiedzwiedzie o ty śmieszku z tą matmą ( ͡° ͜ʖ ͡°)
spokojnie! zrozumiem to jak w wolnej chwili wrócę do tego arkusza. dziękuję za Twoją pomoc! ʕʔ