Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

zmiana koloru komórki po kliknięciu w nią

kejt09 14 Cze 2018 13:21 696 22
  • #1 14 Cze 2018 13:21
    kejt09
    Poziom 3  

    Witam, jestem początkująca w VBA. Potrzebuję kodu , który spowoduje, że po kliknięciu w komórkę zmieni się jej kolor np. na zielony po kliknięciu dwukrotnie na czerwony itd. Czy to w ogóle możliwe?
    Potrafię nagrać zmianę koloru i podpiąć pod przycisk, ale to nie to:/

    0 22
  • Pomocny post
    #2 14 Cze 2018 18:57
    clubs
    Poziom 32  

    Witam
    Wklej do kodu arkusza

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    0
  • #3 15 Cze 2018 10:22
    kejt09
    Poziom 3  

    Ok działa!
    Tylko jeszcze jak spowodować żeby to było zapętlone?
    Po każdym kliknięciu zmiana koloru kolejno na zielony, żółty i czerwony i bez konieczności klikania w inną komórkę po kolejnym kliknięciu znowu zielony itd.?

    Dodano po 35 [minuty]:

    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Target.Interior.ColorIndex = 3
    End Sub

    Private Sub Worksheet_Change(ByVal Target As Range)
    Target.Interior.ColorIndex = 6
    End Sub

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Target.Interior.ColorIndex = 10

    End Sub


    Tu już śmigają 3 kolory, ale nie potrafię tego zapętlić. I czy konieczne jest podwójne kliknięcie? Może da się je zmieniać po prostu po każdym pojedynczym kliknięciu?

    0
  • Pomocny post
    #4 15 Cze 2018 10:45
    drobok
    Poziom 29  

    Spróbuj czegoś w tym stylu:

    Spoiler:
    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    //edit, poprawiono z Color na ColorIndex
    //edit2, po ponownym kliknięciu też działa
    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    0
  • #5 15 Cze 2018 10:50
    kejt09
    Poziom 3  

    Niestety kod działa tylko na kolor czerwony

    0
  • #6 15 Cze 2018 20:27
    clubs
    Poziom 32  

    kejt09 napisał:
    Tylko jeszcze jak spowodować żeby to było zapętlone?

    A co to ma być "kolorofon"? :D One maja migać na zmianę.?

    0
  • #7 15 Cze 2018 21:26
    drobok
    Poziom 29  

    Nie wiem po co ci to tak działające, ale niech ci będzie - poprawiłem poprzedni post (tym razem kod jest przetestowany)

    0
  • #8 15 Cze 2018 23:48
    kejt09
    Poziom 3  

    Dziękuję! Działa idealnie:D Chyba! Sprawdzę to w poniedziałek, chodzi o to, żeby na ekranie dotykowym działało to w wygodny sposób, żeby zaznaczać w formularzu, czy dane spotkanie odbyło się czy też nie, zgodnie z legendą :twisted:

    Dodano po 17 [minuty]:

    Ostatnie pytanie:>
    Chciałam żeby działało na 4 kolory, ale zepsuło się i działa tylko na żółty i szary

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    For Each d In Target
    Select Case d.Interior.ColorIndex
    Case 3
    d.Interior.ColorIndex = 6
    Case 6
    d.Interior.ColorIndex = 10
    Case 10
    d.Interior.ColorIndex = 16

    Case Else
    d.Interior.ColorIndex = 3



    End Select
    Application.Union(Target, ActiveSheet.Range("NUA10000")).Select
    Next d
    End Sub

    0
  • Pomocny post
    #9 16 Cze 2018 07:15
    adamas_nt
    Moderator Programowanie

    Tak się zastanawiam... A dlaczego pętla? Target, to target.
    Po drugie: żebym sobie mógł klikać w tę samą komórkę/zakres, trzeba odejść z focusem na z góry upatrzoną "komórkę neutralną".
    Po trzecie: pożyteczny byłby też jakiś wyłącznik. Tu z wykorzystaniem komórki neutralnej. Jeśli =1, kolorowanie wyłączone.

    Kod: vba
    Zaloguj się, aby zobaczyć kod


    Edit: Hmm, być może pętla, żeby zmieniały się kolory w wielokomórkowym zaznaczeniu. Wtedy:
    Kod: vba
    Zaloguj się, aby zobaczyć kod

    0
  • #10 16 Cze 2018 09:24
    drobok
    Poziom 29  

    Pętla pełni dwie funkcje (po pierwsze nie odznaczam klikniętej komórki - pozwala to na wprowadzenie tekstu - co twoje rozwiązanie uniemożliwia), jeśli masz zaznaczone dwie komórki to bez pętli (a raczej dostania się do każdej komórki indywidualnie) .Interior.ColorIndex jest nullem. No a drugą opcją jest masowe zaznaczanie (co może być pożądane a może nie, chociaż autor nic o tym nie wspomniał)

    Generalnie wprowadzając wyłącznik (o czym ja w swoim lenistwie nie pomyślałem) da się obejść wspomniany problem z wprowadzeniem danych inny sposób (wg mnie to lepsze rozwiązanie, bo wprowadzanie tekstu może być nieumyślnie uruchomione). Ew można by też wprowadzić przycisk i formularz do wprowadzania danych.

    0
  • #11 16 Cze 2018 10:01
    kejt09
    Poziom 3  

    Adamas nie widzę różnicy między pierwszym a drugim rozwiązaniem, w obu przypadkach zmieniają się kolory przy zaznaczeniu wielu komórek :> Niesamowite, działa świetnie, tylko w takim razie czemu mój dopisany 4 kolor przestał działać, kod wygląda podobnie?:D
    Skąd najlepiej uczyć się VBA?
    Dzięki!

    Dodano po 7 [minuty]:

    I co do przycisku, da się wrzucić ten "wyłącznik/gumkę" w przycisk?
    I czy oprócz klikania w komórki, da się też zastosować ten kod do klikania w obiekty? (żeby wypełniały się też kształty)
    Jestem zafascynowana :D

    0
  • Pomocny post
    #12 16 Cze 2018 10:09
    adamas_nt
    Moderator Programowanie

    Och, jest różnica :) Patrz posty kolegi drobok -
    zmień sobie kolory na różne w kilku sąsiadujących komórkach, następnie zaznacz je wszystkie razem...

    Gdzie się uczyć VBA? Po opanowaniu podstaw (Np Link), najwięcej "złapiesz" na rozwiązywaniu własnych pomysłów/realizowaniu potrzeb. Jak już całkiem się zaplątasz, klikasz elektroda.pl ;)

    Całkiem dobrym "podpowiadaczem" jest rejestrator makr, tudzież klawisz [F1].

    0
  • Pomocny post
    #13 16 Cze 2018 10:33
    drobok
    Poziom 29  

    Dobiłaś mnie tą informacją - serio. Nie wiem jakim cudem, ale w wypadku gdy case jest dłuższy event odpada się 2 razy (nie mam pojęcia jakim cudem, tym bardziej po przeniesieniu zaznaczania kolejnej komórki na początek). Rozwiązaniem (trochę na około, ale działającym), jest opcja wyłączenia eventów

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    Co do reszty wypowiedzi, weź sobie dodaj zakładkę developer na wstążce, dajesz insert button, i przypisujesz makro do danego przycisku. W wypadku gumki musisz zapisać fakt kliknięcia tego przycisku do zmiennej i używać jej do wybrania między gumką a zmienianiem kolorów w kodzie z drugiej części - spróbuj sama. Jak coś to cię wspomożemy.

    0
  • #14 18 Cze 2018 09:04
    kejt09
    Poziom 3  

    ok dodałam 2 przyciski wszystko działa pięknie:D
    Teraz ostatnie pytanie - mam nadzieję


    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim kom As Range, komN As String

    komN = "A1" 'komórka "neutralna"
    If Target.Address(0, 0) = komN Then Exit Sub 'focus na neutralnej, więc wychodzimy

    If Range(komN) = 1 Then 'przełącznik/gumka
    Target.Interior.ColorIndex = Empty
    Exit Sub
    End If

    For Each kom In Target
    With kom
    Select Case .Interior.ColorIndex
    Case 43
    .Interior.ColorIndex = 3
    Case 3
    .Interior.ColorIndex = 44
    Case 44
    .Interior.ColorIndex = 16
    Case Else
    .Interior.ColorIndex = 43
    End Select
    End With
    Next

    Range(komN).Select

    End Sub




    gdzie tu dodać zakres komórek, które mają się kolorować? Nie chciałabym żeby to działało w całym arkuszu

    0
  • #15 18 Cze 2018 11:23
    drobok
    Poziom 29  

    If InRange(Target, Range("A1:A10")) Then
    'tu dajesz to co ma działać w danym zakresie
    End If

    0
  • #16 03 Lip 2018 13:06
    kejt09
    Poziom 3  

    Witam ponownie i wracam z nowymi problemami
    Kolorki już opanowałam bawię się nimi do woli
    Co teraz, gdy zamiast zmiany koloru potrzebuję wstawić jakiś symbol? Nadal po stuknięciu (kliknięciu) w komórkę - tu bez żadnych udziwnień wydaje się proste, ale nie wiem jakiego polecenia użyć?

    0
  • #17 03 Lip 2018 21:11
    clubs
    Poziom 32  

    kejt09 napisał:
    Co teraz, gdy zamiast zmiany koloru potrzebuję wstawić jakiś symbol?

    Co to za symbol?

    0
  • #18 03 Lip 2018 21:17
    kejt09
    Poziom 3  

    Krzyżyk albo 'ptaszek'

    0
  • Pomocny post
    #19 03 Lip 2018 22:07
    clubs
    Poziom 32  

    Zainteresuj się funkcją chr ,chrw

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    0
  • #20 10 Lip 2018 08:39
    kejt09
    Poziom 3  

    Okej, ale nie potrafię wstawić go po kliknięciu w komórkę


    Code:
    Sub symbol()
    

        ActiveCell.FormulaR1C1 = ChrW(&H2713)
        Range("G9").Select
    End Sub


    To wrzuciłam do przycisku i działa, ale nie o to mi chodziło
    Mogę prosić o jakieś dalsze wskazówki?

    0
  • Pomocny post
    #21 10 Lip 2018 11:58
    drobok
    Poziom 29  

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    0
  • #22 10 Lip 2018 12:12
    kejt09
    Poziom 3  

    Dokładnie o to chodziło, dziękuję!

    Code:
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    

    [b]If Intersect(Target, Range("A1:H30")) Is Nothing Then Exit Sub[/b]
    Application.EnableEvents = False
    Application.Union(Target, ActiveSheet.Range("NUA10000")).Select
    For Each d In Target
        If d.FormulaR1C1 = ChrW(&H2713) Then
            d.FormulaR1C1 = ""
            Else
            d.FormulaR1C1 = ChrW(&H2713)
        End If
    Next d
    Application.EnableEvents = True
    End Sub

    dodałam jeszcze ograniczenie co do zakresu komórek, ale mam problem, gdy klikam w daną kolumnę lub wiersz - wypełnia się cała kolumna lub wiersz do końca arkusza i w efekcie excel się zawiesza. Da radę to zablokować?

    0
  • Pomocny post
    #23 10 Lip 2018 17:49
    clubs
    Poziom 32  

    kejt09 napisał:
    Da radę to zablokować?

    Dodaj
    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    0