Como elimino las columnas vacías en un msflexgrid

Estoy haciendo un programa que me importe una planilla excel a un msflexgrid sin embargo esta planilla me carga bien en el flexgrid pero tiene también hartas columnas vacías sin ningún contenido (es que el excel que se importa contiene columnas vacías que se ocupan para los datos), ¿allí surgue mi problema como puedo hacer para desde el mismo flexgrid hacer un commandbuton que me elimine las columnas vacías?
Estaba haciendo un ciclo for que me recorriera todas las filas y columnas y si encontraba una que no tuviera nada le diera al ancho de la columna un valor 0 pero me borra todas las columnas excepto la primera aquí les adjunto mi código obviamente tiene errores ya que soy principiante en la materia
Private Sub Command3_Click()
Dim a As Long
Dim b As Long
For b = 1 To MSFlexGrid1.Cols - 1
For a = 2 To MSFlexGrid1.Rows - 1
If MSFlexGrid1.TextMatrix(a, b) = "" Then
MSFlexGrid1.ColWidth(b) = 0
End If
Next a
Next b
End Sub
Y de paso preguntar también tengo una columna del excel que son códigos alfanuméricos pero al exportarlos al flexgrid me muestra solamente los códigos que son numéricos y donde debieran ir los códigos alfanuméricos me los deja vacío
ej: cod error: 5107 lo muestra en la flexgrid
cod error: 51d8 me muestra una celda vacía
adjunto también el código
Private Sub Command1_Click()
 With CommonDialog1
     .DialogTitle = " Seleccionar archivo Excel para cargar"
     .Filter = "Archivos XLS|*.xls"
     .ShowOpen
     If .FileName = "" Then Exit Sub
     ' Le envía el path del Libro de Excel a llenar en el Flex
     Call Cargar_Excel_FlexGrid(.FileName)
     Me.Caption = .FileName
     End With
End Sub
Sub Cargar_Excel_FlexGrid(path_XLS As String, _
                           Optional La_Hoja As String = "StyleSheet")
     On Local Error GoTo ErrSub
     With Data1
         .DatabaseName = path_XLS
         'Asigna el Recordsource al control data
         .RecordSource = La_Hoja & "$"
         MSFlexGrid1.Redraw = False
         .Refresh
         MSFlexGrid1.Redraw = True
     End With
 'Error
 Exit Sub
ErrSub:
 MsgBox Err.Description, vbCritical
End Sub
Si pudieran ayudarme en esto estaría también agradecido que mi flexgrid me leyera los datos alfanuméricos
1

1 Respuesta

0 pts.
Tu método tan mal no estaba, solo le hice unos cambios que mirando te vas a dar cuenta enseguida.
Este no mostrara las columnas que se encuentran completamente vacías es decir si existen 30 registros y en una columna solo existe 1 si se mostrara ya que tenemos algo
que mostrar.
Dim a As Long
Dim b As Long
Dim C As Long
C = 0
For b = 1 To MSFlexGrid1.Cols - 1
      For a = 2 To MSFlexGrid1.Rows - 1
             If MSFlexGrid1.TextMatrix(a, b) = "" Then
                C = C + 1
             End If
      Next a
      If C = (MSFlexGrid1.Rows - 1) Then
         MSFlexGrid1.ColWidth(b) = 0
      End If
Next b
Con respecto a los valores alfanuméricos, probé y si se ven sin ningún problema.
Cualquier duda me dices.
Bye.
Gracias por tu ayuda, me quedo claro tu código si lo entendí es así que cada vez que vaya encontrando un celda vacía la sume a c a los largo de la columna, si el total de celdas vacías (C) es igual al total de filas de la columna entonces esa columna es = a cero, pero tengo un problema, modofique mi código como me sugeriste pero esta vez no pasa nada, no me hace nada en la grilla, no estoy seguro pero quizás no resulte por la siguiente teoría que tengo.
En la propiedad de el msflexgrid en fixed cols lo deje = 0 y el fixed rows=1, lo que pasa es que al cargar los datos a lo largo de la primera fila me aparecen los campos de las columnas y en las columnas vacías me salen f4, f5,... fX, cachai entonces quizás al hacerlo en tu código no me elimine la columna completa porque encuentra ese FX y el numero de celdas vacías ya no es igual al numero de filas, eso es y con respecto a los datos alfanuméricos no me los lee definitivamente no se si tendré que configurar algo en el msflexgrid o en alguna parte bueno eso seria espero tu respuesta experto y gracias por todo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas