sintaxis - ¿Cómo establecer una matriz de colores usando vba?
sintaxis visual basic pdf (3)
Deseo establecer una matriz de colores usando VBA.
eso no fue tan simple como pensé que sería.
usando Vb.NET
puedes declarar una matriz de color como esa:
Dim ar() As Color = {Color.Yellow, Color.Red, Color.Green}
así que probé algo parecido a un similer en VBA (y no me sorprendió tanto que se lanzara un error de compilación, me pregunto qué tipo de datos es vbYellow
( Enum
?)):
Private Sub CommandButton1_Click()
Dim ar(3) As Object
Dim a, b, c As Object
Set a = vbYellow
Set b = vbRed
Set c = vbGreen
ar(0) = a
ar(1) = b
ar(2) = c
End Sub
gracias.
En VBA / VB6, el tipo de Object
se reserva para variables que contienen una referencia de objeto . A diferencia de .NET, no todo es un objeto , por lo que no se puede asignar una constante enum (un entero Long
llamado, básicamente) a una referencia de objeto.
En su lugar, utiliza el tipo de Variant
y puede alinear la declaración de matriz con la función Array
:
Dim colors As Variant
colors = Array(vbRed, vbGreen, vbBlue, vbYellow)
También en VB.NET esto:
Dim a, b, c As Object
Declara 3 variables de Object
.
Sin embargo, en VBA / VB6, eso declara c
como un Object
, y deja b
como variables de Variant
implícitas: querrá evitar declaraciones múltiples en la misma línea.
vbYellow
devuelve un valor numérico, por lo que debe definir su variable como Long
. Por lo tanto, no hay necesidad de Set
antes.
Podría usar el enfoque directo, con ar(0) = vbYellow
(no necesita las variables a, byc` como "intermediario").
Private Sub CommandButton1_Click()
Dim ar(3) As Long
Dim a As Long, b As Long, c As Long
a = vbYellow
b = vbRed
c = vbGreen
ar(0) = a
ar(1) = b
ar(2) = c
End Sub
Para VBA puede usar esta función (la hice y la uso con éxito en varios proyectos)
Function GetColorFromColrName(ColrName As String) As Long
Dim rgbc As Long
Select Case ColrName
Case "red"
rgbc = RGB(255, 0, 0)
Case "brown"
rgbc = RGB(165, 42, 42)
Case "coral"
rgbc = RGB(255, 127, 80)
Case "orange red"
rgbc = RGB(255, 69, 0)
Case "orange"
rgbc = RGB(255, 165, 0)
Case "gold"
rgbc = RGB(255, 215, 0)
Case "yellow"
rgbc = RGB(255, 255, 0)
Case "yellow green"
rgbc = RGB(154, 205, 50)
Case "lawn green"
rgbc = RGB(124, 252, 0)
Case "green"
rgbc = RGB(0, 128, 0)
Case "lime"
rgbc = RGB(0, 255, 0)
Case "aqua"
rgbc = RGB(0, 255, 255)
Case "blue"
rgbc = RGB(0, 0, 255)
Case "blue violet"
rgbc = RGB(138, 43, 226)
Case "dodgerblue"
rgbc = RGB(30, 144, 255)
Case "dark magenta"
rgbc = RGB(139, 0, 139)
Case "dark violet"
rgbc = RGB(148, 0, 211)
Case "purple"
rgbc = RGB(128, 0, 128)
Case "magenta"
rgbc = RGB(255, 0, 255)
Case "chocolate"
rgbc = RGB(210, 105, 30)
Case "black"
rgbc = RGB(0, 0, 0)
Case "dim gray"
rgbc = RGB(105, 105, 105)
Case "gray"
rgbc = RGB(188, 188, 188)
Case "silver"
rgbc = RGB(192, 192, 192)
Case "white"
rgbc = RGB(255, 255, 255)
Case ""
End Select
GetColorFromColrName = rgbc
End Function
¡Todo lo mejor!