Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Europejski lider sprzedaży techniki i elektroniki.
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Zaznaczanie wierszy VBA Excel -

mpodciwinski 27 Lip 2017 09:44 837 15
  • #1 27 Lip 2017 09:44
    mpodciwinski
    Poziom 4  

    Cześć wszystkim, mam 2 małe problemy makrem do zaznaczania wierszy.
    1. Pierwsze makro dodaje mi obramowanie do zaznaczonego wiersza - w tym kodzie chciałbym dodać zakres w jakim ma ono działać (tylko w obrębie tabeli) Od wiersza 42 do 305.

    Code:

      If w > 0 Then
        With Rows(w)
          .Borders(xlEdgeBottom).LineStyle = xlNone
        End With
      End If

      With Target(1).EntireRow
        w = .Row

        With .Borders(xlEdgeBottom)
          .LineStyle = xlContinuous
          .Weight = xlThin
          .Color = RGB(217, 217, 217)
        End With

      End With


    2. To makro dodaje mi kolor wypełnienia wiersza - Jak zrobić by kolor z zaznaczenia wiersza (z kodu VBA) nakładał się na wypełnienie już istniejące z formatowania warunkowego? w tej chwili nie działa to na wypełnione kolorem komórki.

    Code:

    Rows("42:305").Interior.ColorIndex = xlNone
    If Not Intersect(Target, Rows("42:305")) Is Nothing Then Selection.EntireRow.Interior.Color = RGB(249, 249, 249)


    Pomożecie?

    0 15
  • #2 29 Lip 2017 01:15
    lanzul
    Poziom 21  

    mpodciwinski napisał:
    ... w tym kodzie chciałbym dodać zakres w jakim ma ono działać (tylko w obrębie tabeli) Od wiersza 42 do 305...
    mpodciwinski napisał:
    With Target(1).EntireRow

    1. W obrębie tabeli ... a co z kolumnami, nieważne ?

    2. Ten fragment powyżej to z Worksheet_SelectionChange(ByVal Target As Range) czy Worksheet_Change(ByVal Target As Range) ?

    W kodzie z twojego pkt nr 2 jest rozwiązanie:
    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    poza tym jakby nie patrzeć, to w obydwu powyższych zdarzeniach arkusza jest 'Target', który można wykorzystać - poniżej komunikat pojawi się tylko w zakresie "A1:D10":
    Kod: vba
    Zaloguj się, aby zobaczyć kod


    mpodciwinski napisał:
    Jak zrobić by kolor z zaznaczenia wiersza (z kodu VBA) nakładał się na wypełnienie już istniejące z formatowania warunkowego?

    Wtedy formatowanie warunkowe nie byłoby już warunkowym ... tylko standardowym.

    0
  • #3 31 Lip 2017 10:27
    mpodciwinski
    Poziom 4  

    1. interesują mnie tylko wiersze.
    2. Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    Możliwe, że jest, ale nie wiem jak zmodyfikować ten kod, próbowałem sam, ale ciągle wyskakują błędy.

    lanzul napisał:
    Kod: vba Rozwiń Zaznacz wszystko
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        If Not Intersect(Target, Range("a1:d10")) Is Nothing Then
            w = Target.Row
            k = Target.Column
            MsgBox "Wiersz = " & w & " ; Kolumna = " & k
        End If
    End Sub


    Ten kod działa, ale musi to jeszcze odwracać te procedurę, czyli po kliknięciu w inne miejsce poprzednie wypełnienie wiersza musi zniknąć (pozostawiając wypełnienie standardowe)
    Jak to zrobić?

    Kolejne pytanie, czy można te dwa kody złączyć w jeden? by w jednym kodzie było wypełnienie i obramowanie?

    0
  • #4 31 Lip 2017 16:10
    lanzul
    Poziom 21  

    mpodciwinski napisał:
    ale musi to jeszcze odwracać te procedurę

    Poniższy kod działa w zakresie wierszy od 42 do 305
    Kod: vba
    Zaloguj się, aby zobaczyć kod

    zaś poniższy działa poza zakresem tych wierszy, tj. poza wierszami z zakresu 42 do 305:
    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    0
  • #5 31 Lip 2017 16:49
    mpodciwinski
    Poziom 4  

    Dzięki za odpowiedź, ale odwoływanie coś mi nie działa.
    Wiem, że dla Ciebie to pestka, ale ja jestem początkujący w VBA i mam nadal problem..

    Code:

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim w As Long
    Dim zakres As String

        zakres = "42:305"
       
        If Not Intersect(Target, Range(zakres)) Is Nothing Then
            '...
            'jakieś instrukcje, która mają
            'zadziałać w zakresie wierszy od 42 do 305
            'np.:
            Selection.EntireRow.Interior.ColorIndex = 19
            '...
        End If
       
        If Intersect(Target, Range(zakres)) Is Nothing Then
            '...
            'jakieś instrukcje, która mają
            'zadziałać poza zakresem wierszy od 42 do 305
            'np.:
            .Interior.ColorIndex = xlNone
            '...
        End If
    End Sub


    Tak zrobiłem, ale wyskakuje mi błąd..
    Czy mogę Cie prosić o sklecenie mi takiej gotowej formuły z wypełnieniem i obramowaniem? i jej odwołaniem?
    Z góry dziękuje.

    0
  • #6 03 Sie 2017 19:14
    lanzul
    Poziom 21  

    mpodciwinski napisał:
    czy można te dwa kody złączyć w jeden?

    Można, poprzez warunek If ... Else ... End If
    Kod: vba
    Zaloguj się, aby zobaczyć kod

    Jeśli w zakresie '42:305' ma działać kod nr 1 oraz część kodu nr 2 z wpisu nr 1, to trzebo go tam wsadzić, inna sprawa, że nie wiadomo skąd zmienna 'w' bierze tam swoją wartość, skoro jest napisane, że:
    Kod: vba
    Zaloguj się, aby zobaczyć kod

    przecież, jeśli 'w = Target.Row', to zawsze będzie to większe od "0", nie ma bowiem wiersza = "0", ani tym bardziej wiersza "ujemnego".
    Tak więc, mielibyśmy, na przykład, z kodu nr 1 oraz z części kodu nr 2:
    Kod: vba
    Zaloguj się, aby zobaczyć kod


    Natomiast w sytuacji odwrotnej - poza zakresem '42:305'
    mpodciwinski napisał:
    musi to jeszcze odwracać te procedurę, czyli po kliknięciu w inne miejsce poprzednie wypełnienie wiersza musi zniknąć (pozostawiając wypełnienie standardowe)

    Część kodu:
    Kod: vba
    Zaloguj się, aby zobaczyć kod

    wejdzie w:
    Kod: vba
    Zaloguj się, aby zobaczyć kod


    Po uporządkowaniu, oraz przy założeniu, że 'w' jest tożsame z nr wiersza, w którym jest zaznaczona komórka (czyli z 'Target'), mogłoby to wyglądać całościowo, tak:
    Kod: vba
    Zaloguj się, aby zobaczyć kod

    chociaż, są tu jakieś rozbieżności - jaki właściwie ma być styl linii - oraz jaka ma być w sumie kolorystyka wypełnienia komórek (?).
    Chyba, że jeszcze o coś innego chodzi ?

    0
  • #8 04 Sie 2017 13:26
    lanzul
    Poziom 21  

    mpodciwinski napisał:
    nie odwraca to zaznaczenia wiersza

    ? jak nie odwraca ... odwraca, poniżej próbka na przykładowej kolorystyce:

    https://filmy.elektroda.pl/49_1501844650.mp4
    (Filmik na pewno odtwarza się poprzez MPC-HC (programik darmowy))

    Z kodów (kod nr 2 wpis nr 1), które zamieściłeś wynika, że zaznaczenie komórki w zakresie "42:305" nakłada barwę wypełnienia komórek na "RGB(249, 249, 249)", czyli "prawie biały" (biały = 255/2555/255):
    Kod: vba
    Zaloguj się, aby zobaczyć kod

    Natomiast zaznaczenie dowolnej komórki poza zakresem "42:305" ma nakładać na ten zakres "format standardowy", czyli brak wypełnienia:
    Kod: vba
    Zaloguj się, aby zobaczyć kod

    lub również tak:
    Kod: vba
    Zaloguj się, aby zobaczyć kod
    Kod: vba
    Zaloguj się, aby zobaczyć kod

    oraz info:
    mpodciwinski napisał:
    ... ale musi to jeszcze odwracać te procedurę, czyli po kliknięciu w inne miejsce poprzednie wypełnienie wiersza musi zniknąć (pozostawiając wypełnienie standardowe)

    Ponieważ "prawie biały" (249/249/249) prawie się równa "brakowi koloru", czyli białemu (255/255/255), to "prawie nic nie widać" ... :-> ...
    Najlepiej to nagraj kawałek makra z kolorkami jakie chciałbyś mieć przy zaznaczaniu komórek w zakresie "42:305" i poza tym zakresem i zamieść tutaj lub po prostu podaj barwy jakie mają być.

    0
  • #9 06 Sie 2017 13:58
    mpodciwinski
    Poziom 4  

    Ja widzę każdą zmianę kolor, mam monitor graficzny, ale nie w tym rzecz.
    Tutaj filmik z innym kolorem:
    https://www.dropbox.com/s/a63ox30nj10wcaa/2017-08-06_13h54_10.mp4?dl=0
    jak widzisz nie jest to problem z kolorem.
    Być może mówimy o innym działaniu, bo u ciebie kasowało całe wypełnienie tabeli
    A powinno to działać w ten sposób:
    https://www.dropbox.com/s/nazbiwwll08uoug/2017-08-06_13h55_47.mp4?dl=0
    Czyli zaznacza się cały wiersz i tylko on, zaraz po kliknięciu w inne miejsce, to poprzednio zaznaczone wraca do normalnego stanu i podświetla się to w które klikałeś (wiersz)

    0
  • #10 06 Sie 2017 17:49
    lanzul
    Poziom 21  

    mpodciwinski napisał:
    A powinno to działać w ten sposób:
    https://........
    Czyli zaznacza się cały wiersz i tylko on, zaraz po kliknięciu w inne miejsce, to poprzednio zaznaczone wraca do normalnego stanu i podświetla się to w które klikałeś (wiersz)

    W porządku, tyle tylko, że widzę iż już sobie poradziłeś ze sprawą, tak więc co jeszcze jest na rzeczy ?

    0
  • #11 07 Sie 2017 09:38
    mpodciwinski
    Poziom 4  

    To jest stara formuła która działa tylko z wypełnieniem, wkleiłem ja na początku wątku (2).
    Nie działa ona z obramowaniem.. :/
    Jesteś w stanie mi pomóc z tym problemem? ;)

    0
  • #12 07 Sie 2017 14:14
    lanzul
    Poziom 21  

    mpodciwinski napisał:
    Nie działa ona z obramowaniem

    Opis działania:
    1. W zakresie wierszy '42:305' zaznaczenie dowolnej komórki ma wywoływać:
    a. wypełnienie całego wiersza, z zaznaczoną komórką, "jakimś kolorem" (na tę chwilę nieważne jakim)
    b. nałożenie obramowania wiersza (przynajmniej na dolną krawędź)
    c. usunięcie wypełnienia wiersza spoza zakresu '42:305', w którym to wierszu była wcześniej zaznaczona jakaś komórka

    2. Poza zakresem wierszy '42:305' zaznaczenie dowolnej komórki ma wywoływać:
    a. wypełnienie całego wiersza, z zaznaczoną komórką, "jakimś kolorem" (na tę chwilę nieważne jakim)
    b. zdjęcie obramowania wiersza (przynajmniej z dolnej krawędzi) z zakresu '42:305'
    c. usunięcie wypełnienia wiersza z zakresu '42:305', w którym to wierszu była wcześniej zaznaczona jakaś komórka

    Tak, czy jeszcze jakoś inaczej ? Jeśli inaczej napisz w punktach.

    0
  • #13 07 Sie 2017 15:00
    mpodciwinski
    Poziom 4  

    tak powinno działać makro:
    1. W zakresie wierszy '42:305' zaznaczenie dowolnej komórki ma wywoływać:
    a. wypełnienie całego wiersza, z zaznaczoną komórką, "jakimś kolorem" (na tę chwilę nieważne jakim)
    b. nałożenie obramowania wiersza (przynajmniej na dolną krawędź)
    c. usunięcie wypełnienia z wcześniej zaznaczonego wiersza z zakresu '42:305'
    d. usunięcie obramowania z wcześniej zaznaczonego wiersza z zakresu '42:305'
    2. poza zakresem nic się nie dzieje.

    0
  • #14 07 Sie 2017 18:22
    lanzul
    Poziom 21  

    mpodciwinski napisał:
    tak powinno działać makro:
    1. W zakresie wierszy '42:305' zaznaczenie dowolnej komórki ma wywoływać:
    a. wypełnienie całego wiersza, z zaznaczoną komórką, "jakimś kolorem" (na tę chwilę nieważne jakim)
    b. nałożenie obramowania wiersza (przynajmniej na dolną krawędź)
    c. usunięcie wypełnienia z wcześniej zaznaczonego wiersza z zakresu '42:305'
    d. usunięcie obramowania z wcześniej zaznaczonego wiersza z zakresu '42:305'
    2. poza zakresem nic się nie dzieje.

    Poniżej kod arkusza:
    Kod: vba
    Zaloguj się, aby zobaczyć kod

    Poniżej zaś, jeszcze "ewentualny" kod do wklejenia do "ThisWorkbook", gdybyś chciał sobie poeksperymentować z odblokowywanymi komentarzami w kodzie powyżej i zobaczyć jak to działa w różnych "układach":
    Kod: vba
    Zaloguj się, aby zobaczyć kod

    Można to wszystko jeszcze "ubrać" w konstrukcję "With ... End With", ale wtedy wszystko się bardzo "wydłuży" i może być mniej zrozumiałe.

    Ps: To jest moje "rozumienie" tematu, inni koledzy z forum z pewnością zrobiliby to inaczej, pewnie prościej i lepiej, tak więc jeśli nie trafiłem, poczekaj, może odezwie się np.: kolega JRV, adamas_nt, Prot, inni których nie wymieniłem ...

    0
  • #15 08 Sie 2017 09:49
    mpodciwinski
    Poziom 4  

    Można by powiedzieć, ze działa z jednym wyjątkiem. Po kliknięciu w inne miejsce zostaje jasnoniebieskie obramowanie z góry i z dołu którego koloru nie ma w kodzie nawet.
    Zaznaczanie wierszy VBA Excel -

    I mam pytanie, co to jest "pamietnik" odwołujący sie do komórki A1?

    0
  • #16 21 Sie 2017 10:27
    lanzul
    Poziom 21  

    mpodciwinski napisał:
    co to jest "pamietnik ... komórki A1"

    Wartość wyjściowa dla makra, nie przeszkadza
    mpodciwinski napisał:
    w inne miejsce zostaje jasnoniebieskie obramowanie

    Nie wiem ... przy zdjętych linach siatki (Narzędzia\Opcje\Linie siatki) nic nie zostaje ...

    0
TME logo Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME
TME Logo