Excel + VBA ¿Cómo puedo establecer el color bg de una celda usando sus propios contenidos?

Estoy tratando de get una hoja donde ingresar un valor RGB en una celda establecerá el color de background a ese valor. Sé que puedo usar

Range("A1:BE57").Interior.Color = RGB(127, 255, 127) 

para establecer el background de todo el range en un solo color, pero me gustaría que cada celda individual en ese range extraiga de su propio contenido.

idealmente solo teniendo

 Range("A1:BE57").Interior.Color = RGB(.Value) 

donde .Value se replaceá con el contenido real de la celda (es decir, 127, 255, 127) para cada instancia en el range. Aunque soy consciente de que es poco probable que sea así de simple.

¿es posible?

De acuerdo. Aquí hay una function de VBA que toma una cadena e intenta convertirla en una cadena compatible con VBA Color. A continuación se muestra un ejemplo de uso extremadamente simple. Debería poder tomar esta function y agregarla a su código base. No hay validation de input para garantizar que la cadena RGB esté en el formatting correcto, pero lo he intentado con su valor original de "127, 255, 127" y funciona tan bien como "127,255,127" como valor en A1. Espero que esto esté claro para ti ahora.

 ' Converts a RGB string value to a HEX string you can use to set Color properties ' Splits the string into RGB values, reverses them for VBA, and returns a HEX string Public Function ConvertValueToColour(rgbString As String) As String ' Define an array to hold the RGB values Dim Colors() As String ' Initialize the return string ConvertValueToColour = "&H" ' Split the input Colors() = Split(rgbString, ",") ' Loop in reverse for VBA (Likes GBR not RGB) For i = UBound(Colors()) To LBound(Colors()) Step -1 ConvertValueToColour = ConvertValueToColour & Hex(RTrim(LTrim(Colors(i)))) Next i End Function ' This Sub calls the above function Public Sub ColorA1() Range("A1").Interior.color = ConvertValueToColour(Range("A1").Value) End Sub 

* Nota: he reescrito la function, así que eliminé el crédito a MrExcel

En primer lugar, no puede invocar la function RGB así:

 RGB(.Value) 

porque requiere tres parameters de tipo Integer.


Además, no creo que sea posible hacerlo con una sola línea. Me temo que necesita iterar a través de todas las celdas de su range.

Si almacena los valores de RGB en celdas en dicho formatting 100; 100; 100 , puede usar el siguiente código:

 Sub setBackground() Dim cell As Excel.Range Dim colors() As String '-------------------------------------------------------------------------- For Each cell In Range("A1:BE57").Cells colors = VBA.Split(cell.value, ";") cell.Interior.Color = RGB(CInt(colors(0)), CInt(colors(1)), CInt(colors(2))) Next cell End Sub