Pagina 1 din 1

Cod VBA pt colorare celula in 3 culori diferite cu shortcut

Scris: Mie Ian 03, 2018 5:17 pm
de djidji_thebest
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!

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

Scris: Mie Ian 03, 2018 7:42 pm
de IPP
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

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

Scris: Joi Ian 04, 2018 1:48 am
de TudyBTH
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

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

Scris: Joi Ian 04, 2018 7:47 pm
de Nills
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).

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

Scris: Joi Ian 18, 2018 12:30 pm
de djidji_thebest
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!