The following link provides colors mixer code in html.
https://www.w3schools.com/colors/colors_mixer.asp
I am looking for colors mixer code in vba.
I have tried to use the following code which includes Gradient Method but the following code produces different output.
By the way I know that using Gradient Method is not good idea for this issue.
Sub SetGradient()
Dim myrange As Range
Set myrange = ThisWorkbook.Sheets("Sheet1").Range("A1")
With myrange.Interior
.Pattern = xlPatternLinearGradient
.Gradient.Degree = 90
.Gradient.ColorStops.Clear
End With
With myrange.Interior.Gradient.ColorStops.Add(0.5)
.Color = vbRed
End With
With myrange.Interior.Gradient.ColorStops.Add(0.5)
.Color = vbBlue
End With
End Sub
Let me summarize what I want.
I will enter #FF0000 which is Red and enter #0000FF which is Blue into VBA. Then VBA will produce #8c0073 for me.
Please click following link in order to see which color I want to get.
Please Click Here
3
Maybe the following function is of any help
Function GenerateGradient(color1 As String, color2 As String, steps As Integer) As String()
Dim r1 As Long, g1 As Long, b1 As Long
Dim r2 As Long, g2 As Long, b2 As Long
Dim rStep As Double, gStep As Double, bStep As Double
Dim i As Integer
Dim r As Long, g As Long, b As Long
Dim gradient() As String
' Convert color1 from hex to RGB
r1 = CLng("&H" & Mid(color1, 2, 2))
g1 = CLng("&H" & Mid(color1, 4, 2))
b1 = CLng("&H" & Mid(color1, 6, 2))
' Convert color2 from hex to RGB
r2 = CLng("&H" & Mid(color2, 2, 2))
g2 = CLng("&H" & Mid(color2, 4, 2))
b2 = CLng("&H" & Mid(color2, 6, 2))
' Calculate step increments
rStep = (r2 - r1) / (steps - 1)
gStep = (g2 - g1) / (steps - 1)
bStep = (b2 - b1) / (steps - 1)
' Initialize the array to hold gradient values
ReDim gradient(steps - 1)
' Generate the gradient
For i = 0 To steps - 1
r = r1 + rStep * i
g = g1 + gStep * i
b = b1 + bStep * i
' Convert RGB back to hex and store in the array
gradient(i) = "#" & Right("00" & Hex(r), 2) & Right("00" & Hex(g), 2) & Right("00" & Hex(b), 2)
Next i
' Return the gradient array
GenerateGradient = gradient
End Function
You can test it like
Sub GetMiddleColor()
Dim gradient() As String
Dim middleColor As String
' Generate 21 colors between Red and Blue
gradient = GenerateGradient("#FF0000", "#0000FF", 21)
' Get the middle color (11th in the 21-element array, index 9 or 10)
middleColor = gradient(9)
Debug.Print middleColor
' Output the middle color
MsgBox "Middle color in the gradient is: " & middleColor ' Expected output: #8C0073
End Sub
If you like I can make a video about it 🙂
https://youtube.com/@buildgreatproducts?si=A5EoDdUkow9H1_5-
1