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