Foros del Web » Programación para mayores de 30 ;) » .NET »

[SOLUCIONADO] Proyecto VB Studio 2010 para Excel

Estas en el tema de Proyecto VB Studio 2010 para Excel en el foro de .NET en Foros del Web. Buen día, Pues me acerco a ustedes con una duda muy grande (para mi que no soy experto en .net). Antes que nada los pongo ...
  #1 (permalink)  
Antiguo 14/08/2013, 08:17
 
Fecha de Ingreso: octubre-2012
Ubicación: Piedras Negras
Mensajes: 8
Antigüedad: 12 años, 1 mes
Puntos: 0
Pregunta Proyecto VB Studio 2010 para Excel

Buen día,

Pues me acerco a ustedes con una duda muy grande (para mi que no soy experto en .net).

Antes que nada los pongo en antecedentes:

Estoy creando un proyecto en Visual Basic (Visual Studio 2010) para Excel, el proyecto esta creado y algunas cosas ya funcionan como yo quiero.

El problema empieza donde realizo una consulta a una base de datos e intento poner los resultados en una hoja (hoja2) me arroja el siguiente error:
Referencia a objeto no establecida como instancia de un objeto.

NullReferenceException was unhandled by user code

El error me lo presenta en esta parte del codigo:
Código vb:
Ver original
  1. Public Function loadData(ByVal datos)
  2.         Dim INCData As New Hoja2
  3.         If datos = "INC" Then
  4.             xlFila = 2
  5.             xlColumna = 1
  6.             With INCData
  7.                 .Activate() '<----- Aquí es donde me marca el error
  8.                .Range(.Range("A2"), .Range("S2").End(Excel.XlDirection.xlDown)).Clear()
  9.                 numReg = UBound(Rs.GetRows(), 2) + 1
  10.                 Rs.MoveFirst()
  11.                 While Not Rs.EOF
  12.                     xlColumna = 1
  13.                     For i = 0 To Rs.Fields.Count - 1
  14.                         .Cells(xlFila, xlColumna) = Rs(i).Value
  15.                         xlColumna = xlColumna + 1
  16.                     Next i
  17.                     xlFila = xlFila + 1
  18.                     Rs.MoveNext()
  19.                 End While
  20.  
  21.             End With
  22.         Else
  23.  
  24.         End If
  25.  
  26.     End Function

Incluso si comento esa línea me marca el error en la siguiente, todo lo que tenga que ver con hacer referencia a la hoja me arroja ese error y en el troobleshooting tips me envía el siguiente link:
Use the "new" keyword to create an object instance.

Hasta el momento he intentado todo lo que se me ocurre, declarar la hoja como nueva, declararla en un modulo como publica, etc, etc... Pero hasta el momento nada me ha dado resultado.

Espero me puedan ayudar.

Saludos.
  #2 (permalink)  
Antiguo 14/08/2013, 08:53
Avatar de alan_69niupi  
Fecha de Ingreso: junio-2011
Mensajes: 200
Antigüedad: 13 años, 5 meses
Puntos: 17
Respuesta: Proyecto VB Studio 2010 para Excel

Microsoft.Office.Interop.Excel.Application aplicacion;
Microsoft.Office.Interop.Excel.Workbook libros_trabajo;
Microsoft.Office.Interop.Excel.Worksheet hoja_trabajo;
aplicacion = new Microsoft.Office.Interop.Excel.Application();
libros_trabajo = aplicacion.Workbooks.Add();
hoja_trabajo =
(Microsoft.Office.Interop.Excel.Worksheet)libros_t rabajo.Worksheets.get_Item(1);

el uno lo reemplazas por dos esto es C# pero puedes pasar el código a VB. espero te ayude
saludos!!!
  #3 (permalink)  
Antiguo 14/08/2013, 09:35
 
Fecha de Ingreso: octubre-2012
Ubicación: Piedras Negras
Mensajes: 8
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Proyecto VB Studio 2010 para Excel

Hola alan_69niupi,

Gracias por tan pronta respuesta.

Fijate que intente adaptar el codigo que compartiste, pero...

Por ejemplo usas el
libros_trabajo = aplicacion.Workbooks.Add();

Pero no necesito abrir un nuevo libro de excel porque de hecho desde donde mando llamar a la función es desde el mismo excel. Probablemente, estoy haciendo algo mas (Es lo mas seguro ) Esta es mi adaptación de tu codigo:
Código vb:
Ver original
  1. Public Function loadData(ByVal datos)
  2.         Dim xlApp = New Excel.Application()
  3.         Dim xlBook = xlApp.ThisWorkbook() '<---- Aquí me marca la excepción.
  4.        Dim INCData = xlBook.Worksheets.Item(2)
  5.         If datos = "INC" Then
  6.             xlFila = 2
  7.             xlColumna = 1
  8.             With INCData
  9.                 '.Activate()
  10.                .Range(.Range("A2"), .Range("S2").End(Excel.XlDirection.xlDown)).Clear()
  11.                 numReg = UBound(Rs.GetRows(), 2) + 1
  12.                 Rs.MoveFirst()
  13.                 While Not Rs.EOF
  14.                     xlColumna = 1
  15.                     For i = 0 To Rs.Fields.Count - 1
  16.                         .Cells(xlFila, xlColumna) = Rs(i).Value
  17.                         xlColumna = xlColumna + 1
  18.                     Next i
  19.                     xlFila = xlFila + 1
  20.                     Rs.MoveNext()
  21.                 End While
  22.  
  23.             End With
  24.         Else
  25.  
  26.         End If
  27.  
  28.     End Function

Ahora obtengo una excepción del COM

Excepción de HRESULT: 0x800A03EC

Ya no me dice que tengo que declararla como new.

De antemano agradezco tu ayuda.

Saludos.
  #4 (permalink)  
Antiguo 14/08/2013, 09:46
Avatar de alan_69niupi  
Fecha de Ingreso: junio-2011
Mensajes: 200
Antigüedad: 13 años, 5 meses
Puntos: 17
Respuesta: Proyecto VB Studio 2010 para Excel

'Crear una referencia a Microsoft Excel 12.0
'El numero 12.0 hace referencia a MS Office 2007.
'El numero 11.0 haria referencia a MS Office 2003.
'esta parte de codigo es para hablar al Office 2007
Imports Microsoft.Office.Interop
'esta parte de codigo es para hablar al Office 2003
'Imports Microsoft.Vbe.Interop

Dim m_Excel As New Excel.Application
m_Excel.Cursor = Excel.XlMousePointer.xlWait
m_Excel.Visible = True
Dim objLibroExcel As Excel.Workbook = m_Excel.Workbooks.Add
Dim objHojaExcel As Excel.Worksheet = objLibroExcel.Worksheets(1)


Este es un ejemplo que tengo hecho con VB08, no cabia mucho la sintaxis. es lo mismo solo cambia el 1 por 2.
si falla por aquí ando estaré pendiente para ayudarte.

Saludos!!!
  #5 (permalink)  
Antiguo 14/08/2013, 10:26
 
Fecha de Ingreso: octubre-2012
Ubicación: Piedras Negras
Mensajes: 8
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Proyecto VB Studio 2010 para Excel

Hola alan_69niupi,

Creo que estoy un poco aunque diría mucho, hehehe... perdido.

Se supone que el proyecto lo estoy construyendo sobre excel, de hecho dentro del visual studio tengo mi libro de excel abierto y puedo modificarlo sin problemas directamente sobre el libro.

He revisado las referencias del proyecto y si tengo cargadas las de Microsoft.Office.Interop.Excel de la versión 14 que es la que estoy usando, aun así hice la importación tal como me sugeriste.

El codigo quedó así:
Código vb:
Ver original
  1. Imports Microsoft.Office.Interop.Excel
  2.     Public Function loadData(ByVal datos)
  3.         Dim xlApp = New Excel.Application
  4.         Dim xlBook = New Excel.Workbook
  5.         Dim INCData As New Excel.Worksheet
  6.         xlBook = xlApp.ActiveWorkbook
  7.         INCData = xlBook.Worksheets(2)
  8.         If datos = "INC" Then
  9.             xlFila = 2
  10.             xlColumna = 1
  11.             With INCData
  12.                 '.Activate()
  13.                .Range(.Range("A2"), .Range("S2").End(Excel.XlDirection.xlDown)).Clear()
  14.                 numReg = UBound(Rs.GetRows(), 2) + 1
  15.                 Rs.MoveFirst()
  16.                 While Not Rs.EOF
  17.                     xlColumna = 1
  18.                     For i = 0 To Rs.Fields.Count - 1
  19.                         .Cells(xlFila, xlColumna) = Rs(i).Value
  20.                         xlColumna = xlColumna + 1
  21.                     Next i
  22.                     xlFila = xlFila + 1
  23.                     Rs.MoveNext()
  24.                 End While
  25.             End With
  26.         Else
  27.             'ACCIONES CUANDO SON WO
  28.        End If
  29.     End Function

Cuando no declaro como new el workbook me dice que no está declarado y que tengo que hacerlo, pero si lo declaro, entonces me manda el mensaje de error del COM que describí anteriormente.


Excepción de HRESULT: 0x800A03EC

Saludos,
Erick.
  #6 (permalink)  
Antiguo 14/08/2013, 12:45
Avatar de alan_69niupi  
Fecha de Ingreso: junio-2011
Mensajes: 200
Antigüedad: 13 años, 5 meses
Puntos: 17
Respuesta: Proyecto VB Studio 2010 para Excel

Dim xlApp = New Excel.Application
Dim xlBook = New Excel.Workbook


fijate aqui que tienes puesto "=" en lugar de AS

ese es un detalle, un gran detalle

Saludos!!!
  #7 (permalink)  
Antiguo 14/08/2013, 12:48
 
Fecha de Ingreso: octubre-2012
Ubicación: Piedras Negras
Mensajes: 8
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Proyecto VB Studio 2010 para Excel

Después de mucho buscar, encontré la solución no se si sea la mas práctica pero me funciona.

Fuente: [URL="http://visualstudiomagazine.com/articles/2011/06/20/wcovb_automate-excel/wcovb_listing-2.aspx"]http://visualstudiomagazine.com/articles/2011/06/20/wcovb_automate-excel/wcovb_listing-2.aspx[/URL]

Así quedó mi código:

Código vb:
Ver original
  1. Public Function loadData(ByVal datos)
  2.         Dim xlApp As Excel.Application = New Excel.Application
  3.         xlApp.ScreenUpdating = False
  4.         Dim INCData As Excel.Worksheet = CType(Globals.ThisWorkbook.Sheets(2), Excel.Worksheet)
  5.         If datos = "INC" Then
  6.             xlFila = 2
  7.             xlColumna = 1
  8.             With INCData
  9.                 .Activate()
  10.                 .Range(.Range("A2"), .Range("S2").End(Excel.XlDirection.xlDown)).Clear()
  11.                 numReg = UBound(Rs.GetRows(), 2) + 1
  12.                 Rs.MoveFirst()
  13.                 While Not Rs.EOF
  14.                     xlColumna = 1
  15.                     For i = 0 To Rs.Fields.Count - 1
  16.                         .Cells(xlFila, xlColumna) = Rs(i).Value
  17.                         xlColumna = xlColumna + 1
  18.                     Next i
  19.                     xlFila = xlFila + 1
  20.                     Rs.MoveNext()
  21.                 End While
  22.             End With
  23.         Else
  24.             'ACCIONES CUANDO SON WO
  25.        End If
  26.     End Function

Pero... Ahora no me funciona el screenupdate = false no quiero que se vea todo el cambio de hojas y cálculos que se van a hacer.

¿Alguna idea?

Saludos,
Erick.
  #8 (permalink)  
Antiguo 14/08/2013, 12:51
 
Fecha de Ingreso: octubre-2012
Ubicación: Piedras Negras
Mensajes: 8
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Proyecto VB Studio 2010 para Excel

¿Cómo ves? alan_69niupi, será la mejor manera de hacerlo??

Saludos,
  #9 (permalink)  
Antiguo 14/08/2013, 14:16
Avatar de alan_69niupi  
Fecha de Ingreso: junio-2011
Mensajes: 200
Antigüedad: 13 años, 5 meses
Puntos: 17
Respuesta: Proyecto VB Studio 2010 para Excel

xlApp.ScreenUpdating = False

al termino de todo tu proceso debes de cerrarlo por así decirlo

xlApp.ScreenUpdating = True


La mejor manera de hacer una aplicación es según para uso que le vamos a dar
por lo general si es para la escuela creo que con que funcione basta.
ahora si esta para algún trabajo hay que contemplar muchos punto, tiempo de respuesta, cantidad de usuarios, cantidad de peticiones. etc.


Saludos!!!!
  #10 (permalink)  
Antiguo 14/08/2013, 14:34
 
Fecha de Ingreso: octubre-2012
Ubicación: Piedras Negras
Mensajes: 8
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Proyecto VB Studio 2010 para Excel

Bueno, pues ni "cerrando" el screenupdate funcionó, pero de momento, eso no me preocupa, es el menor de mis males, hahahaha...

Mil y una gracias por tu ayuda alan_69niupi , seguro por aquí me veras dando lata muy seguido.

Voy a dar por concluido el tema.

Saludos,
Erick.

Etiquetas: excel, office, office2010, vb
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:42.