visual sintaxis que programacion para lista lenguaje comandos codigos vba vb6

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!