Saltar al contenido

Pasar matriz de excel-dna a vba


Recommended Posts

publicado

Hola, estoy tratando de usar Excel-DNA (Excel-DNA) para ordenar una matriz de una sola dimensión. Es para probar el uso de .NET en VBA.

Excel-DNA ya me corre bien para funciones sencillas, como por ejemplo si en el editor de macros de Excel 2010 le pongo:


Public Sub Prueba01()
MsgBox Application.Run("Sumale", 3, 4)
End Sub
[/CODE]

Y en el archivo de texto “ExcelDna.dna”, donde se programan las funciones de VB.NET tengo:

[CODE]
<DnaLibrary RuntimeVersion="v4.0" Language="VB" >
<![CDATA[
Imports ExcelDna.Integration
Public Module MyFunctions

Function Sumale(x, y)
Sumale = x + y
End Function

End Module
]]>
</DnaLibrary>
[/CODE]

Devuelve 7.

Igualmente si en una celda de Excel le declaro la formula “=Sumale(3, 4)” también devuelve 7.

Es sencillo modificar el el archivo de texto “ExcelDna.dna” y luego desde Excel me voy al menú “Programador” , selecciono el botón “Complementos” y habilito el “ExcelDNA”, con lo que hace como una compilación de los errores de sintaxis que tiene el archivo “ExcelDna.dna”.

Este complemento hace referencia al archivo “ExcelDna.xll”, el cuál estoy usando tal cual como viene de origen, sin modificaciones.

Después quise probar a ordenar una matriz, basándome en un ejemplo de la ayuda de MSDN (Cómo: Ordenar una matriz en Visual Basic)

En el editor de macros de Excel tengo el siguiente código VBA:

[CODE]
Option Explicit

Public Sub SortAnimals()
Dim i As Integer
Dim Cadena As String
Dim zooAnimals2() As String
Dim zooAnimals(3) As String

ReDim zooAnimals2(UBound(zooAnimals()))

zooAnimals(0) = "lion2"
zooAnimals(1) = "turtle4"
zooAnimals(2) = "armadillo1"
zooAnimals(3) = "ostrich3"

For i = LBound(zooAnimals()) To UBound(zooAnimals())
' Aquí llama a Excel-DNA:
Cadena = Application.Run("Ordena_Matriz", zooAnimals, i)
zooAnimals2(i) = Cadena
Next

Call Muestra_Matriz(zooAnimals2())
End Sub

Public Sub Muestra_Matriz(ByRef Matriz() As String)
Dim i As Byte
Dim Cadena As String

For i = LBound(Matriz()) To UBound(Matriz())
Cadena = Cadena & " " & Matriz(i) & " " & Chr$(10)
Next

MsgBox "********" & Chr$(10) & Cadena & "********"
End Sub
[/CODE]

Y tengo el siguiente código VB.NET en el archivo “ExcelDna.dna”:

[CODE]
<DnaLibrary RuntimeVersion="v4.0" Language="VB" >
<![CDATA[
Imports ExcelDna.Integration
Public Module MyFunctions

Public Function Ordena_Matriz2(Matriz(), i) As String
Array.Sort(Matriz)
Array.Reverse(Matriz)
Return Matriz(i)
End Function

End Module
]]>
</DnaLibrary>
[/CODE]

[/font]

[font=Courier New][color=#0000ff][font=Arial][color=#000000]Y funciona bien, me devuelve: [/color][/font]turtle4, ostrich3, lion2, armadillo1[/color]

Aunque hay que hacer una iteración para cada uno de los valores de la matriz, porque no sé como pasar la matriz entera de DNA de regreso a VBA.

¿Alguna idea de cómo regresar la matriz entera?

Algo así, pero que si funcione:

[CODE] zooAnimals2() = Application.Run("Ordena_Matriz", zooAnimals) [/CODE]

[/font]

Excel-DNA a VBA.rar

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.