Estoy haciendo una automatización en VB.NET 2010 en Excel, la cuál consiste en un limpiado de un archivo. Me pidieron unas modificaciones en el programa entonces tuve que cambiarlo bastante pero al final de cuentas el funcionamiento en sí del programa lo hace bien, excepto en un pequeño gran detalle el cuál es que no elimina las filas que yo quiero que elimine, estas para ser eliminadas simplemente tienen que ser un campo vacío, simplemente es eso pero no entiendo porque el programa no lo hace.
Les dejo acá el fragmento del método
Código
'Variables a utilizar Dim str_cod As String = String.Empty Dim str_xxx As String = String.Empty Dim str_sku As String = String.Empty Dim xlWorkSheet As Excel.Worksheet = Nothing ' Hojas Dim i As Integer = 0 'Contador del ciclo Dim xcell As New Object xlWorkSheet = xlworkbook.Sheets("Hoja2") 'Hoja que estoy utilizando Dim xlrange_col2 As Range = Nothing 'Progress Bar que utilizo pg_proceso_inventario.Minimum = 1 pg_proceso_inventario.Maximum = filas 'Este es el rango que recorro de la hoja de excel xlrange_col2 = xlWorkSheet.Range("B2:" + "B" + filas) 'Rango filas i = 2 ' Debe empezar en 2 porque este posee un encabezado 'Esto es un checkbox consiste en que si quiero quitar o dejar todos. ignorar esto If chkDejarTodos.Checked = False Then 'Ciclo que empiezo a recorrer el rango For Each xcell In xlrange_col2 pg_proceso_inventario.Value = pg_proceso_inventario.Value + 1 lbl_indice_numero.Text = i.ToString 'limpiamos las variables str_cod = Nothing 'Código1 str_xxx = Nothing 'Código XXX str_sku = Nothing 'Código SKU str_cod = Convert.ToString(xlWorkSheet.Cells(i, 1).Value) 'Código1 str_xxx = Convert.ToString(xlWorkSheet.Cells(i, 2).Value) 'Código XXX str_sku = Convert.ToString(xlWorkSheet.Cells(i, 3).Value) 'Código SKU 'Si el checkbox de familia no está activado procedemos a eliminar todo aquel 'que no empiece por 77 y está vacío If chk_Familia.Checked = False Then If str_cod.StartsWith("77") Then i = i + 1 'Acá es el maldito problema, no lo elimina de ninguna forma ElseIf (no_vacio(str_xxx) = False) Then ' xlWorkSheet.Rows(i).delete() With xlWorkSheet .Rows.Item(i).delete() End With 'xlWorkSheet.Cells(i, 2).Value = "DEBO ELIMINARME" i = i + 1 Else i = i + 1 End If Else 'Si el checkbox está activado If str_cod.StartsWith(str_familia) Then i = i + 1 Else xlWorkSheet.Rows(i).Delete() i = i + 1 End If End If Next End If pg_proceso_inventario.Value = pg_proceso_inventario.Minimum xlworkbook.Save() lbl_Cant_Produc.Text = devolver_filas(xlapp, xlWorkSheet) release_object(xlrange_col2) release_object(xlWorkSheet)
Bien les voy a explicar en prosa un poco más el código, consiste en recorrer ese rango desde B2 hasta la cantidad de filas que posee el archivo, cuando el encuentra un código que empieza por 77 el lo ignora si este ya no empieza por 77 entonces verifica que el código 2 (o sea la fila B del rango que estamos recorriendo) sea vacío y si no lo es lo elimina se supone porque en realidad no lo hace....
Bien este es el método que averigua si hay algo
Código
Public Function no_vacio(ByVal str As String) As Boolean If str.Length > 0 Then Return True End If Return False End Function
Inicialmente utilizaba el String.nulloblank o String.nullwhitespace pero el resultado es el mismo y la verdad ya no se que estoy haciendo mal.
Muchas gracias por leerme.