elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Re: EXCEPCION, No se como resolverla, problema con EXCEL Y VB.NET[SOLUCIONADO]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Re: EXCEPCION, No se como resolverla, problema con EXCEL Y VB.NET[SOLUCIONADO]  (Leído 4,402 veces)
Yaldabaot

Desconectado Desconectado

Mensajes: 186


Ver Perfil
Re: EXCEPCION, No se como resolverla, problema con EXCEL Y VB.NET[SOLUCIONADO]
« en: 21 Noviembre 2013, 17:39 pm »

Hola,

Estoy realizando un limpiador de Excel, y tengo un problema de índices y desbordamientos.

Lo que quiero hacer es eliminar las hojas de un excel, dejando la primer hoja con sus datos, resulta que sólo puedo hacerlo individualmente de esta manera:

 CType(xlWorkBook.Sheets(i), Excel.Worksheet).Delete()

Pero cuando intento hacerlo con un ciclo salta esta excepción:

Invalid index. (Exception from HRESULT: 0x8002000B (DISP_E_BADINDEX))

Estoy utilizando VS 2010, Excel 2007, y este es el código que utilizo para eliminar las hojas. He realizado gran cantidad de intentos. Sinceramente no comprendo el porque del error.

Código
  1.  
  2. Dim contador As Integer = 0
  3.  
  4.        'Obtiene la cantidad de hojas a borrar
  5.        For Each sheet As Excel.Worksheet In xlWorkBook.Worksheets
  6.  
  7.            contador = contador + 1
  8.        Next
  9.  
  10.        'Contador
  11.        MsgBox(contador)
  12.  
  13.  
  14.  
  15.        For k = 0 To contador Step 1
  16.  
  17.            ' CType(xlApp.ActiveWorkbook.Sheets(i), Excel.Worksheet).Delete()
  18.            'xlWorkBook.Sheets(i).delete()
  19.  
  20.            If k = 0 Then
  21.  
  22.                ' k = k + 1
  23.            Else
  24.  
  25.                CType(xlWorkBook.Sheets(k), Excel.Worksheet).Delete()
  26.  
  27.                'xlWorkBook.Sheets(k).delete()
  28.                'k = k + 1
  29.                MsgBox(k)
  30.            End If
  31.        Next
  32.  
  33.  


No se si es porque se manejen los índices diferente en EXCEL y en VS, agradecería sus consejos.

Con respecto al for he probado varias formas de incrementos y nada tampoco, lo curioso es que se empieza a desbordar después de una cierta cantidad, con cantidades pequeñas funciona bien.

Agradezco de antemano la ayuda.



« Última modificación: 21 Noviembre 2013, 23:01 pm por Yaldabaot » En línea

Nunca me contestan -_-
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.866



Ver Perfil
Re: EXCEPCION, No se como resolverla, problema con EXCEL Y VB.NET
« Respuesta #1 en: 21 Noviembre 2013, 19:06 pm »

1. la información que das está bien pero... ¿en que linea exáctamente se da la excepción?, al usar el método delete?, o es por un índice fuera de rango?.

2. ¿Que necesidad hay de usar dos ciclos pudiendo usar uno?, ya tienes una colección de objetos, usa un for each en lugar de un for range.

3. has intentado debugearlo?

Yo no manejo estas cosas de Excel pero creo que lo primero de todo deberías empezar por usar un solo búcle, y luego ya, localizar e intentar reparar el error, prueba algo así:

Código
  1. 'Obtiene la cantidad de hojas a borrar
  2. 'dim cantidad as integer = xlWorkBook.Worksheets.Count ?
  3.  
  4. For Each sheet As Excel.Worksheet In xlWorkBook.Worksheets
  5.  try
  6.    sheet.delete()
  7.  catch ex as exception
  8.    msgbox(ex.message & ex.stacktrace)
  9.  end try
  10. Next sheet


« Última modificación: 21 Noviembre 2013, 19:11 pm por EleKtro H@cker » En línea



Yaldabaot

Desconectado Desconectado

Mensajes: 186


Ver Perfil
Re: EXCEPCION, No se como resolverla, problema con EXCEL Y VB.NET
« Respuesta #2 en: 21 Noviembre 2013, 19:45 pm »

Hola,

Agradezco que te hayas tomado el tiempo para leerme y responderme

Esta es la declaración de la variable

Código
  1.  
  2.  Dim contador As Integer = 0
  3.  

Acá dónde se "cae" el código
Código
  1. CType(xlWorkBook.Sheets(k), Excel.Worksheet).Delete()
  2.  

¿Para qué dos bucles? Bien, los utilizo para dos cosas:

1- Sacar la cantidad de hojas del libro(Bucle 1 o el primero que miras)
2- Realizar el delete.


El índice lo utilizo para que elimine todas las hojas a partir de la hoja 1, es por eso que necesito ponerle un índice.

Disculpa por la falta de esos detalles.

Intentaré lo que me dices, y te daré detalles!.

GRACIAS :D



« Última modificación: 21 Noviembre 2013, 19:52 pm por Yaldabaot » En línea

Nunca me contestan -_-
Yaldabaot

Desconectado Desconectado

Mensajes: 186


Ver Perfil
Re: EXCEPCION, No se como resolverla, problema con EXCEL Y VB.NET
« Respuesta #3 en: 21 Noviembre 2013, 20:15 pm »

Ok, si me sirvió pero, ¿Existe alguna manera de empezar en el segundo elemento en un for each?, el código funciona, y funciona tan bien que me salta una excepción porque me volé todas las hojas.


GRACIAS
En línea

Nunca me contestan -_-
Yaldabaot

Desconectado Desconectado

Mensajes: 186


Ver Perfil
Re: EXCEPCION, No se como resolverla, problema con EXCEL Y VB.NET[SOLUCIONADO]
« Respuesta #4 en: 21 Noviembre 2013, 23:01 pm »

Gracias al fragmento que me pusiste ya logré como descifrarlo y pude resolverlo

Adjunto el código por si acaso alguien lo ocupa

GRACIAS!!


Código
  1.  
  2. Dim i As Integer = 0
  3.  
  4.        For Each sheet As Excel.Worksheet In xlWorkBook.Worksheets
  5.            Try
  6.  
  7.                'Verifica si está en la primera hoja para no borrarla.!
  8.                If i = 0 Or i = 1 Then
  9.  
  10.                    i = i + 1
  11.  
  12.                Else
  13.  
  14.                    'Sino simplemente la elimina.
  15.                    sheet.Delete()
  16.                    i = i + 1
  17.  
  18.                End If
  19.  
  20.            Catch ex As Exception
  21.                MsgBox(ex.Message & ex.StackTrace)
  22.            End Try
  23.        Next sheet
  24.  
  25.        'Elimina hoja sobrante
  26.        xlWorkBook.Sheets(2).delete()
  27.  
  28.  



En línea

Nunca me contestan -_-
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.866



Ver Perfil
Re: EXCEPCION, No se como resolverla, problema con EXCEL Y VB.NET
« Respuesta #5 en: 22 Noviembre 2013, 06:58 am »

Hola

No hagas triple post, debes respetar las normas del foro, usa el botón modificar la próxima vez.

¿Existe alguna manera de empezar en el segundo elemento en un for each?

Puedes utilizar LINQ:

Código
  1.    Dim arr As String() = {"1", "2", "3", "4", "5"}
  2.  
  3.    For Each str As String In arr.Skip(1)
  4.        MsgBox(str) ' Empieza por "2"
  5.    Next

http://msdn.microsoft.com/en-us/library/bb358985%28v=vs.110%29.aspx

saludos
En línea



Yaldabaot

Desconectado Desconectado

Mensajes: 186


Ver Perfil
Re: EXCEPCION, No se como resolverla, problema con EXCEL Y VB.NET[SOLUCIONADO]
« Respuesta #6 en: 22 Noviembre 2013, 15:49 pm »

Genial!, gracias por el dato!.

Disculpas por lo del triple post, saludos.
En línea

Nunca me contestan -_-
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines