Problema al escribir en excel desde vb

ivanalameda
06 de Julio del 2004
Hola:

Tengo la siguiente función en Visual Basic que pasa datos de una tabla a una Hoja de Excel. Esta función, que en otros casos me ha funcionado me da un problema de automatización que no consigo me diga cual es exactamente. Lo curioso del tema es que en anteriores ocasiones me funcionaba correctamente. La instrucción que me está fallando es cuando al objeto Excel (tipo "excel.application"), le asigno valor a la propiedad "cells(nRow,nCol)", donde nRow es el número de fila donde quiero apuntar un valor, y nCol sería el número de columna donde asignar el valor.

He probado también a declarar un objeto del tipo "excel.worksheet", y trabajar con el, pero el resultado es el mismo.

Paso a continuación el código de la función.

Si alguién me pudiese echar un cable, me haría un grandisimo favor.

Un saludo.

Public Sub tableToExcel(rsDatos As ADODB.Recordset, filename As String, strHeads As String, strTitle As String)
Dim appExcel As Excel.Application 'la aplicacion excel
' Dim nFile As Integer 'el fichero del que sacaremos los datos
Dim colCount As Integer 'la columna en la que estamos en cada momento
Dim rowCount As Integer 'la fila en la que estamos en cada momento
' Dim strLineRead As String 'la linea leida del fichero
Dim arrLinea() As String 'array para datos a insertar no de la tabla
Dim indFor As Integer 'indice para recorrer el for
Dim nFields As Integer 'numero de campos

colCount = 1 'la columna inicial sera 1. Desde ahi empezaremos a escribir
rowCount = 1 'la fila inicial sera 1. Desde ahi empezaremos a escribir

Set appExcel = CreateObject("excel.application") 'creamos el objeto excel

'si no hay ningún libro creamos uno. Lo mismo si no hay hoja.
If appExcel.Workbooks.Count < 1 Then appExcel.Workbooks.Add
If appExcel.Workbooks(1).Sheets.Count < 1 Then appExcel.Workbooks(1).Sheets.Add

'si se le paso una cadena con un titulo y no vacia, se la incluimos en excel
If Len(strTitle) > 0 Then
appExcel.Cells(rowCount, colCount).Font.Bold = True 'negrita
appExcel.Cells(rowCount, colCount) = strTitle 'insertamos el titulo
rowCount = rowCount + 2 'incrementamos en dos para que haya una linea en blanco
End If

'si se le paso una cadena con cabeceras y no vacia, rellenamos las cabeceras en excel
If Len(strHeads) > 0 Then
arrLinea = Split(strHeads, ",") 'pasamos a array el parametro con las cabeceras
For indFor = 0 To UBound(arrLinea) 'recorremos todo el array
appExcel.Cells(rowCount, colCount + indFor).Font.Bold = True 'negrita
appExcel.Cells(rowCount, colCount + indFor) = arrLinea(indFor) 'insertamos dato
DoEvents 'para que windows haga sus eventos, y no paralizar el sistema
Next indFor
rowCount = rowCount + 1
End If

If Not rsDatos.EOF Then
nFields = rsDatos.Fields.Count
Else
Exit Sub
End If

rsDatos.MoveFirst
While Not rsDatos.EOF
For indFor = 0 To nFields - 1
appExcel.Cells(rowCount, colCount + indFor) = rsDatos.Fields(indFor).Value
DoEvents
Next indFor
rowCount = rowCount + 1
rsDatos.MoveNext
DoEvents
Wend

'si existe el fichero excel, lo borramos, para evitar que nos pregunte si sustituir
If Dir(filename) <> "" Then
Kill filename 'instruccion de borrado
End If

appExcel.ActiveWorkbook.SaveAs filename 'grabamos el fichero excel
appExcel.Quit 'cerramos excel (estaba en background)
Set appExcel = Nothing 'apuntamos a null para descargar de memoria y evitar bloqueos
End Sub


JesusNuno
06 de Julio del 2004
Como podria agregar formatos como bordes, colores, negritas a las celdas desde VB a un archivo de excel??

sdemingo
06 de Julio del 2004
mira este truco....


http://puntovisualbasic.webcindario.com/tutoriales.php?id=1