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.
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”:
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:
Y en el archivo de texto “ExcelDna.dna”, donde se programan las funciones de VB.NET tengo:
<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:
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”:
<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:
[/font]
Excel-DNA a VBA.rar