VBA negozio RGB, colore variabile

Sto cercando di memorizzare un colore RGB in una variabile in un progetto VBA di Excel, per essere utilizzato per impostare il colore di sfondo delle celle diverse/gamme di tutto un sub.

Voglio impostare il colore una volta in una variabile, in modo che se decido di cambiare tutto ho solo bisogno di farlo in un unico luogo.

Tuttavia il mio tentativo di sotto non funziona:

Dim clrBlue As ColorFormat
clrBlue = RGB(0, 0, 256)

Range("a2").Interior.Color = clrBlue
Range("b3").Interior.Color = clrBlue

Con il codice di cui sopra, ho un Object variable or With block variable not set errore di runtime.

Sento che sto facendo qualcosa di fondamentalmente sbagliato! Qualcuno può suggerire cosa è? Questo può anche essere fatto?

Nella scrittura di questo mi rendo conto che avrei potuto scrivere funzioni separate (SetBlue, SetRed, SetGreen)per applicare il colore, ma si sente solo disordinato.

  • Provare a utilizzare dim clrBlue as Long invece di come colorFormat
  • Grazie, ho appena trovato lo stesso questo post (stackoverflow.com/a/1427293/1448678) – anche se non è un duplicato. Se si posta come una risposta io accettare!
  • “Potrei scrivere funzioni separate (SetBlue, SetRed, SetGreen)per applicare il colore” Una funzione che in pratica sostituisce 1 riga di codice è di solito non è utile.
  • ^ Sì, sono d’accordo. Come ho detto: “disordinato”!
InformationsquelleAutor Jonny | 2014-08-08

 

3 Replies
  1. 32

    RGB restituisce un Long, quindi è necessario dichiarare clrBlue come Long invece di come ColorFormat.

    Dim clrBlue As Long
    
    clrBlue = RGB(0, 0, 256)
    
    Application.union(Range("A2"), Range("B3")).Interior.Color = clrBlue
    • Penso che sarebbe più utile per il po e l’ulteriore visitatori, whenn aggiungere qualche spiegazione per la tua intensione.
    • Ha scritto la spiegazione in un commento alla domanda di sopra… ti unisci la risposta.
  2. 10

    Come altri hanno detto, RGB() restituisce un Lungo, quindi è necessario utilizzare che invece di ColorFormat. Su un po ‘ nota correlata, mi piace molto il Colore enum in C#, e ho iniziato imitando quello in mio moduli VBA. È possibile creare il proprio enum per memorizzare i valori dei colori del progetto, quindi fare riferimento al colore con il Colore.Blu.

    Questo rende molto facile da modificare un colore, se si decide di andare con una diversa tonalità di blu. Aggiornamento enum, e tutti i luoghi che hai usato il Colore.Blu di aggiornamento.

    Esempio:

    Public Enum Color
        Black = 0         'RGB(0, 0, 0)
        Blue = 14390640   'RGB(112, 149, 219)
        Gray = 11842740   'RGB(180, 180, 180)
        Red = 6118894     'RGB(238, 93, 93)
        White = 16777215  'RGB(255, 255, 255)
    End Enum

    Per ottenere il valore RGB del valore di negozio, ho appena buttato il valore nella finestra Immediata e copiare l’output.

    Nella Finestra Immediata, tipo:

    ? RGB(112, 149, 219)

    L’uscita sarà 14390640. Ci potrebbe essere un modo più semplice per ottenere il valore.

  3. 1

    Non ho provato e non ho intenzione di contestare qualsiasi dei precedenti commentatori.

    Ho notato che il codice originale del campione: clrBlue = RGB(0, 0, 256)

    Il più alto numero di ammessi in RGB 255. Che potrebbe essere il problema.

    • 255 è il più alto valore significativo, i valori forniti sono superiore sarà assunto come 255. In altre parole, RGB(0, 0, 256) saranno gli stessi come RGB(0, 0, 255) senza alzare un errore.

Lascia un commento