utilizar datos de Excel en una aplicación externa

07/09/2004 - 11:05 por btomeu | Informe spam
Como puedo acceder a los datos de un libro de Excel desde una aplicación
externa que tambien utiliza VBA, como puedo moverme entre las casillas y
coger sus valores desde una aplicación externa a Excel y utilizarlos en
esa aplicación externa.

Gracias

Preguntas similare

Leer las respuestas

#6 btomeu
14/09/2004 - 08:53 | Informe spam
Mi duda ahora es como puedo trabajar con dicha matriz, puedo moverme con
dos indices? Me devuelve la matriz entera? No es un poco raro declarar una
matriz así Dim matr As Variant, y los indices matr(i,j)?


Fernando Arroyo wrote:

A mí el siguiente códio me funciona sin problemas desde un formulario de


Access:

Sub CommandButton1_Click()
Dim xls As Object, strNombreLibro As String
Dim appExcel As Excel.Application
Dim Dato As String

On Error GoTo Control_Error

Set xls = CreateObject("Excel.Application")
strNombreLibro = "C:kk.xls"
If Dir(strNombreLibro) = "" Then
MsgBox "El libro " & strNombreLibro & " no existe.", vbCritical
Exit Sub
End If

xls.Workbooks.Open strNombreLibro
Dato = xls.Sheets("Hoja1").Cells(1, 1)
Me.TextBox1 = Dato

xls.Quit
Set xls = Nothing

Exit Sub

Control_Error:
MsgBox "Se ha producido el error nº " & Err.Number _
& vbCrLf & Err.Description _
, vbCritical
End Sub


He sustituido el método FileExists por la función Dir, porque dicho método


no pertenece a Excel sino al objeto FileSystemObject.

También he añadido una instrucción al final del código para salir de Excel,


porque si no es libro quedaría abierto y podría haber dificultades para
acceder a él luego.

Como dices que quieres trabajar con una matriz, te recuerdo que es posible


volcar directamente el contenido de un rango a una matriz de tipo Variant. Por
ejemplo, para volcar a la matriz mtr el rango A1:B3 de Hoja1:

Dim mtr as Variant
mtr = xls.Sheets("Hoja1").[A1:B3]

Un saludo.


Fernando Arroyo
MS MVP - Excel


"tomeu" escribió en el mensaje


news:et%
> Creo que me estoy liando y fuerte. Más o menos me defiendo en VBA para
> Excel pero no consigo realizar lo mismo desde fuera de Excel aunque se
> utilize también VBA.Vale eso es lo que intente aunque luego no sabia como
> moverme sobre la hoja y lo he intentado como tu dices y también fallo en
> algo
> Para hacer una prueba me hice un form con un TextBox y un boton que
> ejecute el código
> pero al ejecutarlo me aparece el siguiente error nº438 "Object doesnŽt
> support this property or
> method"
>
>
> Sub CommandButton1_Click()
> Dim xls As Object, strNombreLibro As String
>
> Dim appExcel As Excel.Application
>
> 'Dim i As Integer
> 'Dim j As Integer
> Dim Dato As String
>
> On Error GoTo Control_Error
>
>
>
> Set xls = CreateObject("Excel.Application")
> strNombreLibro = "C:AA.xls"
> If Not xls.FileExists(strNombreLibro) Then
> MsgBox "El libro " & strNombreLibro & " no existe.", vbCritical
> Exit Sub
> End If
>
> xls.Workbooks.Open strNombreLibro
> Dato = xls.Sheets("Hoja1").Cells(1, 1)
> 'i = 0
> 'j = 0
> 'While (i < 100)
> ' While (j < 6)
> 'Para referirte a una celda concreta de una hoja en base a la
> fila y columna
> ' Dato = .Sheets(Hoja1).Cells(i, j) 'PRETENDO COGER EL VALOR DE LA
> CELDA EN UNA VARIABLE Y NO LO CONSIGO
> ' j = j + 1
> ' Wend
> 'i = i + 1
> 'Wend
>
> Me.TextBox1 = Dato
>
> Exit Sub
> Control_Error:
> MsgBox "Se ha producido el error nº " & Err.Number _
> & vbCrLf & Err.Description _
> , vbCritical
> End Sub
>
>
Respuesta Responder a este mensaje
#7 Fernando Arroyo
14/09/2004 - 10:18 | Informe spam
Puedes trabajar con la matriz como lo harías con la propiedad Cells de Excel. Por ejemplo, para volcar a mtr el rango A1:B3 de Hoja1:

Sub prueba()
Dim mtr As Variant
Dim n As Byte, strC As String
mtr = [Hoja1!A1:B3]
For n = LBound(mtr) To UBound(mtr)
strC = strC & mtr(n, 1) & "," & mtr(n, 2) & vbNewLine
Next n
MsgBox strC
End Sub


La matriz tendrá tantas "filas" y "columnas" como el rango, pero si las columnas son más que las filas es posible "transponer" la matriz, si interesa hacerlo por algún motivo. Por ejemplo, para volcar "transpuesto" a mtr el rango A1:E3 de Hoja1:

Sub prueba2()
Dim mtr As Variant
Dim n As Byte, strC As String
mtr = WorksheetFunction.Transpose([Hoja1!A1:E3])
For n = LBound(mtr) To UBound(mtr)
strC = strC & mtr(n, 1) & "," & mtr(n, 2) & "," & mtr(n, 3) & vbNewLine
Next n
MsgBox strC
End Sub

Un saludo.


Fernando Arroyo
MS MVP - Excel



"tomeu" escribió en el mensaje news:%23$
Mi duda ahora es como puedo trabajar con dicha matriz, puedo moverme con
dos indices? Me devuelve la matriz entera? No es un poco raro declarar una
matriz así Dim matr As Variant, y los indices matr(i,j)?


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida