Cod VBA pt colorare celula in 3 culori diferite cu shortcut

Închis
djidji_thebest
Mesaje: 41
Membru din: Mie Sep 15, 2010 2:28 pm

Cod VBA pt colorare celula in 3 culori diferite cu shortcut

Mesaj de djidji_thebest » Mie Ian 03, 2018 5:17 pm

Buna,

Am gasit un cod pe care vreau sa il modific si nu reusesc sa il finalizez.
Am nevoie ca prin shortcut-ul Ctrl+i sa imi coloreze celula activa, sau celulele active in galben la prima apasare, la a doua apasare in rosu, la a treia apasare in verde si la a patra apasare sa decoloreze.

Sub changeCellColor()

x = ActiveCell.Interior.Color
If x = 255 Then
Selection.Interior.Color = RGB(0, 0, 255)
Else
If x = 16711680 Then
Selection.Interior.Color = RGB(0, 255, 455)
Else
Selection.Interior.Color = RGB(255, 0, 0)

End If
End If
End Sub

Sau daca aveti alt cod pt asta, as fi recunoscator.
Ma poate cineva ajuta?
Multumesc!

IPP
Moderator
Moderator
Mesaje: 4196
Membru din: Mie Iul 29, 2009 7:26 am
Localitate: Cluj-Napoca

Re: Cod VBA pt colorare celula in 3 culori diferite cu short

Mesaj de IPP » Mie Ian 03, 2018 7:42 pm

Buna ziua

Atasat aveti spre testare o propunere.
Obiectiv: colorarea, la apasarea Ctrl+I, a fondului celulei/celulelor selectata/e in prealabil pornind de la fondul existent in celula active la momentul rularii macro si in ordinea culorilor: galben, rosu si (in exemplul meu) albastru pentru ca in Excel 2010 aceasta a fost culoarea pentru codul 16711680.

Am folosit urmatorul cod:

Cod: Selectaţi tot

Sub ChangeColor()

'IPP - 03.01.2018


Dim x As Long
 x = ActiveCell.Interior.Color
 
  If x <> 65535 And x <> 255 And x <> 16711680 Then
   Selection.Interior.Color = 65535 'galben
   Exit Sub
  End If
  
  If x = 65535 Then
   Selection.Interior.Color = 255 'rosu
   Exit Sub
  End If
  
 If x = 255 Then
  Selection.Interior.Color = 16711680 'albastru
  Exit Sub
 End If
 
  If x = 16711680 Then
  Selection.Interior.Color = xlNone 'nimic
  Exit Sub
 End If

End Sub
Pentru testare: deschideti fisierul atasat, activati macro/continutul, faceti selectia dorita si apasati combinatia de taste Ctrl+I

IP
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.

TudyBTH
Moderator
Moderator
Mesaje: 993
Membru din: Joi Feb 11, 2016 2:12 pm
Localitate: Cluj Napoca

Re: Cod VBA pt colorare celula in 3 culori diferite cu short

Mesaj de TudyBTH » Joi Ian 04, 2018 1:48 am

Buna,

Doua observatii as face referitor la problema dv.

1. Combinatiile de taste Ctrl + <caracter> sunt cam folosite deja de Excel (Ctrl+I de exemplu este folosit pentru "Apply or remove italic formatting"). Este recomandat sa folositi combinatii de genul Ctrl + Shift + <caracter> (Ctrl+Shift+I in cazul de fata).

2. Atunci cand folositi VBA pentru adaugarea unor functionalitati in Excel, este bine sa scrieti un cod care sa ramana valabil/functional chiar daca se modifica datele. In cazul de fata culorile.
Pentru a realiza asta, puteti seta culorile dorite intr-un range de celule (oriunde in fisier) si sa definiti cu un nume acel range. In fisierul atasat am definit cele patru culori in zona A1:A4 din foaia "Settings" cu numele "colors". In acest fel, veti putea modifica oricand culorile sau numarul acestora fara a fi nevoie sa modificati si codul VBA.
Capture.JPG
codul folosit este urmatorul:

Cod: Selectaţi tot

Sub ChangeColor_2()

    Dim x As Long
    Dim i As Integer, n As Integer
    Dim rColors As Range, r As Range
    
    Set rColors = ThisWorkbook.Names.Item("colors").RefersToRange
    n = rColors.Rows.Count
    Set r = Selection
    x = rColors(1).Interior.Color
    For i = 1 To n
        If r.Cells(1, 1).Interior.Color = rColors(i).Interior.Color Then
                x = rColors((i Mod n) + 1).Interior.Color
                Exit For
        End If
    Next i
    r.Interior.Color = x
End Sub
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.
Am invatat sa inotam in apa, ca pestii
Am invatat sa zburam in aer, ca pasarile
A ramas doar sa invatam sa traim pe Pamant, ca Oamenii.

Nills
Mesaje: 211
Membru din: Sâm Ian 23, 2016 11:24 am

Re: Cod VBA pt colorare celula in 3 culori diferite cu short

Mesaj de Nills » Joi Ian 04, 2018 7:47 pm

Diferenta dintre cele 2 coduri, este ca, cel al lui Tudy "umple" cu alb celula. Practic, nu lasa celula asa cum o gaseste (nu mai are linii de incadrare celula / range-ul).
I don't care what you think of me! Unless you think I'm awesome – in which case, you're right! Carry on :D

djidji_thebest
Mesaje: 41
Membru din: Mie Sep 15, 2010 2:28 pm

Re: Cod VBA pt colorare celula in 3 culori diferite cu short

Mesaj de djidji_thebest » Joi Ian 18, 2018 12:30 pm

Multumesc tuturor. Foarte bune raspunsurile.

Pana la urma am folosit codul lui IPP, doar ca am modificat culoarea albastru in verde.

Cod: Selectaţi tot

Sub ChangeColor()

Dim x As Long
 x = ActiveCell.Interior.Color
 
  If x <> 65535 And x <> 255 And x <> 65280 Then
   Selection.Interior.Color = 65535 'galben
   Exit Sub
  End If
  
  If x = 65535 Then
   Selection.Interior.Color = 255 'rosu
   Exit Sub
  End If
  
 If x = 255 Then
  Selection.Interior.Color = 65280 'verde
  Exit Sub
 End If
 
  If x = 65280 Then
  Selection.Interior.Color = xlNone 'nimic
  Exit Sub
 End If

End Sub
Si codul tau TudyBTH e interesant, am sa il folosesc probabil in alte circumstante - e f buna ideea. Multumesc si de atentionarea shortcut-ului format din caractere, insa in excel nu prea folosesc formatarea "Italic" la text. Plus ca o regasesc cu Ctrl+2 parca. Multzam fain!

Închis

Înapoi la “Visual Basic for Application (VBA) cu Excel - Intrebari tehnice”