Error al transferir matriz a excel

17/09/2007 - 01:26 por Daniel Pozzi | Informe spam
Estoy tratando de transferir una matriz en vb a excel en un solo paso, tengo
varios ejemplos de cómo hacerlo. Dimensiono la matriz como variant y en ella
guardo texto. Mientras no almacene una string larga funciona correctamente,
pero con una string de ej. 1060 caracteres, me da error.
Si transfiero la matriz celda por celda, funciona correctamente.

esto funciona correctamente:

Dim rgnlineas(1 To 10000, 1 To 1) As Variant
Dim oExcel As Object
Dim oBook As Object
Dim oSheet As Object

'Start a new workbook in Excel
Set oExcel = CreateObject("Excel.Application")
Set oBook = oExcel.Workbooks.Add

..

Set oSheet = oBook.Worksheets(1)
For f = 1 To contlineas
oSheet.cells(f, 1) = rgnlineas(f, 1)
Next
oExcel.Visible = True

..
esto no funciona, da error cuando len(rgnlineas(xx,1)) es grande:

Set oSheet = oBook.Worksheets(1)
oSheet.Range("a2:a10000").Value = rgnlineas

oExcel.Visible = True


Pueden ayudarme, gracias

Daniel

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
17/09/2007 - 04:02 | Informe spam
hola, Daniel !

1) no se si con otras aplicaciones si puedas *empatar* matrices de diferentes dimensiones...
pero en excel [y hasta donde se] NO es posible hacerlo de esta manera :-(( [me explico]:

2) asumiendo que realmente *llenaste* tu variable de matriz variant con los 10000 elementos:
-> Dim rgnlineas(1 To 10000, 1 To 1) As Variant

a) en la forma donde SI te esta funcionando usas un bucle 'uno por uno' y estas iniciando desde la fila 1 [celda 'A1']
-> hasta n_elementos [n = For f = 1 To contlineas] con lo que avanzas desde 1 hasta 10000

b) la forma donde NO te esta funcionando, estas iniciando desde la fila 1 [celda 'A2']...
para *tratar* de *llenar* un rango de 9999 filas con una matriz de 10000 elementos -???-
-> oSheet.Range("a2:a10000").Value = rgnlineas

-> prueba cambiando a [p.e.] -> oSheet.Range("a2:a10001").Value = rgnlineas
o... oSheet.Range("a2").Resize(contlineas).Value = rgnlineas
o... ?????

3) por lo relacionado con cadenas de longitud mayores a xxx caracteres... revisa:
XL2000: Error de "255 caracteres de celda" cuando el error copia hoja de calculo
http://tinyurl.com/4gbmy [traduccion automatica al espanol]
XL2000: "255 Characters in Cell" Error When Copying Worksheet
http://tinyurl.com/5upbf [version 'original' -ingles-]
Data truncated to 255 characters with Excel ODBC driver
http://support.microsoft.com/kb/189897/en

-> hay mas articulos relacionados... solo en tanto comentas *como* rellenas tu variable de matriz variant :))

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

__ la consulta original __
Estoy tratando de transferir una matriz en vb a excel en un solo paso, tengo varios ejemplos de como hacerlo.
Dimensiono la matriz como variant y en ella guardo texto. Mientras no almacene una string larga funciona correctamente
pero con una string de ej. 1060 caracteres, me da error. Si transfiero la matriz celda por celda, funciona correctamente.

esto funciona correctamente:

Dim rgnlineas(1 To 10000, 1 To 1) As Variant
Dim oExcel As Object
Dim oBook As Object
Dim oSheet As Object

'Start a new workbook in Excel
Set oExcel = CreateObject("Excel.Application")
Set oBook = oExcel.Workbooks.Add
..

Set oSheet = oBook.Worksheets(1)
For f = 1 To contlineas
oSheet.cells(f, 1) = rgnlineas(f, 1)
Next
oExcel.Visible = True

..
esto no funciona, da error cuando len(rgnlineas(xx,1)) es grande:

Set oSheet = oBook.Worksheets(1)
oSheet.Range("a2:a10000").Value = rgnlineas

oExcel.Visible = True
Respuesta Responder a este mensaje
#2 Daniel Pozzi
17/09/2007 - 15:07 | Informe spam
Hola Hector, no es un problema de dimensiones de la matriz, eso ya lo probé.
Despues de mirar los links q me pasas, me inclino a pensar q no puedo
transferir mas de 256 caracteres por celda, sería un problema eso para mi...
Se te ocurre alguna solucion?
Gracias!

Daniel


"Héctor Miguel" escribió en el mensaje
news:eWEFG7M%
hola, Daniel !

1) no se si con otras aplicaciones si puedas *empatar* matrices de
diferentes dimensiones...
pero en excel [y hasta donde se] NO es posible hacerlo de esta manera
:-(( [me explico]:

2) asumiendo que realmente *llenaste* tu variable de matriz variant con
los 10000 elementos:
-> Dim rgnlineas(1 To 10000, 1 To 1) As Variant

a) en la forma donde SI te esta funcionando usas un bucle 'uno por uno'
y estas iniciando desde la fila 1 [celda 'A1']
-> hasta n_elementos [n = For f = 1 To contlineas] con lo que
avanzas desde 1 hasta 10000

b) la forma donde NO te esta funcionando, estas iniciando desde la fila
1 [celda 'A2']...
para *tratar* de *llenar* un rango de 9999 filas con una matriz de
10000 elementos -???-
-> oSheet.Range("a2:a10000").Value = rgnlineas

-> prueba cambiando a [p.e.] -> oSheet.Range("a2:a10001").Value =
rgnlineas
o... oSheet.Range("a2").Resize(contlineas).Value = rgnlineas
o... ?????

3) por lo relacionado con cadenas de longitud mayores a xxx caracteres...
revisa:
XL2000: Error de "255 caracteres de celda" cuando el error copia hoja
de calculo
http://tinyurl.com/4gbmy [traduccion automatica al espanol]
XL2000: "255 Characters in Cell" Error When Copying Worksheet
http://tinyurl.com/5upbf [version 'original' -ingles-]
Data truncated to 255 characters with Excel ODBC driver
http://support.microsoft.com/kb/189897/en

-> hay mas articulos relacionados... solo en tanto comentas *como*
rellenas tu variable de matriz variant :))

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

__ la consulta original __
Estoy tratando de transferir una matriz en vb a excel en un solo paso,
tengo varios ejemplos de como hacerlo.
Dimensiono la matriz como variant y en ella guardo texto. Mientras no
almacene una string larga funciona correctamente
pero con una string de ej. 1060 caracteres, me da error. Si transfiero la
matriz celda por celda, funciona correctamente.

esto funciona correctamente:

Dim rgnlineas(1 To 10000, 1 To 1) As Variant
Dim oExcel As Object
Dim oBook As Object
Dim oSheet As Object

'Start a new workbook in Excel
Set oExcel = CreateObject("Excel.Application")
Set oBook = oExcel.Workbooks.Add
..

Set oSheet = oBook.Worksheets(1)
For f = 1 To contlineas
oSheet.cells(f, 1) = rgnlineas(f, 1)
Next
oExcel.Visible = True

..
esto no funciona, da error cuando len(rgnlineas(xx,1)) es grande:

Set oSheet = oBook.Worksheets(1)
oSheet.Range("a2:a10000").Value = rgnlineas

oExcel.Visible = True




Respuesta Responder a este mensaje
#3 Héctor Miguel
17/09/2007 - 20:14 | Informe spam
hola, Daniel !

... no es un problema de dimensiones de la matriz, eso ya lo probe.
Despues de mirar los links q me pasas, me inclino a pensar q no puedo transferir mas de 256 caracteres por celda
seria un problema eso para mi... Se te ocurre alguna solucion?



disculpa lo *burdo* del siguiente ejemplo realizado por macros [obviamente] desde el propio excel...
se trata de una simple matriz uni-dimensional que se rellena con las 26 letras del alfabeto [USA]
y se termina *metiendo* en el siguiente elemento [el # 27] una cadena de 3 caracteres *repetida* 1024 veces
lo que resulta en [y *deposita*] un contenido de tipo string de 3072 caracteres en la celda 'A27'

Sub Largo_matriz_texto()
Dim Matriz(), Sig As Byte
For Sig = 0 To 25
ReDim Preserve Matriz(Sig)
Matriz(Sig) = Chr(65 + Sig)
Next
ReDim Preserve Matriz(UBound(Matriz) + 1)
Matriz(UBound(Matriz)) = Application.Rept("abc", 1024)
For Sig = LBound(Matriz) To UBound(Matriz)
Cells(Sig + 1, 1) = Matriz(Sig)
Next
End Sub

por esto te comentaba... "solo en tanto comentas *como* rellenas tu variable de matriz variant"

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#4 Daniel Pozzi
17/09/2007 - 21:30 | Informe spam
No me funciona la línea del Rept.
Ya lo estudiaré.
Pero igual te comento q lo q pretendo hacer es pegar TODA la matriz de una
ves en excel y no celda a celda como lo haces. Así celda a celda lo hace
bien. El problema se presenta cuando quiero transferir TODA la matriz
(oSheet.Range("a2").Resize(contlineas).Value = rgnlineas). Me da la
impresion q no es lo mismo hacerlo celda a celda q todo de una ves, q se
complica con los string largos.



"Héctor Miguel" escribió en el mensaje
news:urCwsaV%
hola, Daniel !

... no es un problema de dimensiones de la matriz, eso ya lo probe.
Despues de mirar los links q me pasas, me inclino a pensar q no puedo
transferir mas de 256 caracteres por celda
seria un problema eso para mi... Se te ocurre alguna solucion?



disculpa lo *burdo* del siguiente ejemplo realizado por macros
[obviamente] desde el propio excel...
se trata de una simple matriz uni-dimensional que se rellena con las 26
letras del alfabeto [USA]
y se termina *metiendo* en el siguiente elemento [el # 27] una cadena de 3
caracteres *repetida* 1024 veces
lo que resulta en [y *deposita*] un contenido de tipo string de 3072
caracteres en la celda 'A27'

Sub Largo_matriz_texto()
Dim Matriz(), Sig As Byte
For Sig = 0 To 25
ReDim Preserve Matriz(Sig)
Matriz(Sig) = Chr(65 + Sig)
Next
ReDim Preserve Matriz(UBound(Matriz) + 1)
Matriz(UBound(Matriz)) = Application.Rept("abc", 1024)
For Sig = LBound(Matriz) To UBound(Matriz)
Cells(Sig + 1, 1) = Matriz(Sig)
Next
End Sub

por esto te comentaba... "solo en tanto comentas *como* rellenas tu
variable de matriz variant"

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

Respuesta Responder a este mensaje
#5 Daniel Pozzi
17/09/2007 - 23:05 | Informe spam
Un dato q se me olvido pasarte, estoy haciendo todo desde vb, no desde
excel.



"Daniel Pozzi" escribió en el mensaje
news:eX5M4EW%
No me funciona la línea del Rept.
Ya lo estudiaré.
Pero igual te comento q lo q pretendo hacer es pegar TODA la matriz de una
ves en excel y no celda a celda como lo haces. Así celda a celda lo hace
bien. El problema se presenta cuando quiero transferir TODA la matriz
(oSheet.Range("a2").Resize(contlineas).Value = rgnlineas). Me da la
impresion q no es lo mismo hacerlo celda a celda q todo de una ves, q se
complica con los string largos.



"Héctor Miguel" escribió en el mensaje
news:urCwsaV%
hola, Daniel !

... no es un problema de dimensiones de la matriz, eso ya lo probe.
Despues de mirar los links q me pasas, me inclino a pensar q no puedo
transferir mas de 256 caracteres por celda
seria un problema eso para mi... Se te ocurre alguna solucion?



disculpa lo *burdo* del siguiente ejemplo realizado por macros
[obviamente] desde el propio excel...
se trata de una simple matriz uni-dimensional que se rellena con las 26
letras del alfabeto [USA]
y se termina *metiendo* en el siguiente elemento [el # 27] una cadena de
3 caracteres *repetida* 1024 veces
lo que resulta en [y *deposita*] un contenido de tipo string de 3072
caracteres en la celda 'A27'

Sub Largo_matriz_texto()
Dim Matriz(), Sig As Byte
For Sig = 0 To 25
ReDim Preserve Matriz(Sig)
Matriz(Sig) = Chr(65 + Sig)
Next
ReDim Preserve Matriz(UBound(Matriz) + 1)
Matriz(UBound(Matriz)) = Application.Rept("abc", 1024)
For Sig = LBound(Matriz) To UBound(Matriz)
Cells(Sig + 1, 1) = Matriz(Sig)
Next
End Sub

por esto te comentaba... "solo en tanto comentas *como* rellenas tu
variable de matriz variant"

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.





Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida