Una mano con visual

Amigo tengo unas dudillas a ver si me hechas una mano y me iluminas...
Este es el caso un Dpto me entrega unos archivos en excel que contienen datos estadísticos en bruto... ¿y yo a partir de ellos debo sacar el comportamiento que ha venido teniendo para generar las estadísticas antes mencionadas el caso es que quiero automatixar todo esto con una aplicación en visual basic pero tengo una duda debo hacerlo trabajando directamente con el archivo excel o utilixar accesses o sql? ¿Y de hacerlo trabajar con flexgrid? Puedo generar el gráfico a partir de este flexgrid cuando cargue los datos en el, ¿o puedo aplicar a este flexgrid fórmulas como lo hago en excel y que solo me muestre el resultado en el? Quisiera que me ayudaras a tomar una buena decisión no soy muy experto en vb pero me he tomado este reto...

1 respuesta

Respuesta
1
Si son varios datos y son consistentes ( es decir siempre te va a llegar la misma estructura) yo los derivaría a Access que va a permirir más juego para las extracciones.
Luego en Acces prepararia las 'n' querys para utilizar como base para los primeros analisis
Y luego probablemente lo más sencillo sea explotar esos datos ( ya masticaditos un poco) en Excel o en algún sistema de reporting de terceros.
Tienes alguna idea sobre el nº de gráficos o análisis que tienes que hacer y su complejidad lo digo por poder afinar más.
Bueno te dejo el cod en si ya como lo tengo de avanxado...
La cosa es que hay una columna del MSFLEXGRID que me debería arrojar porcentajes y me los muestra en bruto es decir si es 82% me muestra 0.82567 y así otra cosa puedo generar el gráfico a partir de el mismo MSFLEXGRID y mm no he querido usar access quiero algo que pueda ser algo así como portable sin necesidad de hacer maniobras ya ksi lo tengo hecho.. falta que me genere el gráfico a partir del grid... y he creado un botón para generar el reporte funciona de maravilla pero se como iimportar el flex grid a una tabla pero SOLO con el reporte este que cree usando marcadoles mm ni idea echame una mano amigo a ver dime lo que necesites aquí t dejo el código fuente... ah otra cosa cuando aplico el mismo código a donde los datos y la tabla para el flex son dif me sale sub indice fuera del rango la otra tabla es más pequeña 3 columnas 6 filas...
###########################################################
Option Explicit
' \\ Declaraciones ( Apis )
' ------------------------------------------------------------------------------------------
Private Declare Function SetErrorMode Lib "kernel32" (ByVal wMode As Long) As Long
Private Declare Sub InitCommonControls Lib "Comctl32" ()
' -- Variables para acceder a la hoja excel
Private obj_Excel       As Object
Private obj_Workbook    As Object
Private obj_Worksheet   As Object
Private Sub Form_Initialize()
    Call SetErrorMode(2)
    Call InitCommonControls
End Sub
'***************************************************************************'
'*                                Inicio                                   *'
'***************************************************************************'
Private Sub Form_Load()
    Call SetErrorMode(2)
    Call InitCommonControls
     If Excel_FlexGrid(App.Path & "\data\Libro.xls", MSFlexGrid1, 20, 5, "Sheet1") Then
        Call HighLight_Cells(MSFlexGrid1, CDbl("20"), 1)
    End If
    ' -- Configurar el Grid
    With MSFlexGrid1
        .Cols = 3
        .FixedCols = 0
        .FormatString = "Administrativa|Total| Procentaje % "
        .ColWidth(0) = 2000
        .ColWidth(1) = 1500
        .ColWidth(2) = 2000
    End With
End Sub
'***************************************************************************'
'*                                Fin                                      *'
'***************************************************************************'
Private Sub Form_Unload(Cancel As Integer)
    Call Descargar
End Sub
'***************************************************************************'
'*    Función para leer los datos del Excel y cargarlos en el Flex         *'
'***************************************************************************'
Private Function Excel_FlexGrid(sPath As String, FlexGrid As Object, Filas As Integer, Columnas As Integer, Optional sSheetName As String = vbNullString) As Boolean
    Dim i As Long
    Dim n As Long
    On Error GoTo error_sub
    ' -- Comproba si existe l archivo
    If Len(Dir(sPath)) = 0 Then
       MsgBox "No se ha encontrado el archivo: " & sPath, vbCritical
       Exit Function
    End If
    FlexGrid.Redraw = False
    Me.MousePointer = vbHourglass
    ' -- crea rnueva instancia de Excel
    Set obj_Excel = CreateObject("Excel.Application")
    'obj_Excel.Visible = True
    ' -- Abrir el libro
    Set obj_Workbook = obj_Excel.Workbooks.Open(sPath)
    ' -- referencia la Hoja, por defecto la hoja activa
    If sSheetName = vbNullString Then
        Set obj_Worksheet = obj_Workbook.ActiveSheet
    Else
        Set obj_Worksheet = obj_Workbook.Sheets(sSheetName)
    End If
    ' -- Setear Grid
    With MSFlexGrid1
        ' -- Especificar  la cantidad de filas y columnas
        '.Cols = Columnas
        .Rows = Filas
        ' -- Recorrer las filas del FlexGrid para agregar los datos
        For i = 1 To .Rows - 1
            ' -- Establecer la fila activa
            .Row = i
            ' -- Recorrer las columnas del FlexGrid
            For n = 0 To .Cols - 1
                ' -- Establecer columna activa
                .Col = n
                ' -- Asignar a la celda del Flex el contenido de la celda del excel
                .Text = obj_Worksheet.Cells(i + 1, n + 1).Value
            Next
        Next
    End With
    ' -- Cerrar libro
    obj_Workbook.Close
    ' -- Cerrar Excel
    obj_Excel.quite
    ' -- Descargar objetos para liberar recursos
    Call Descargar
    Excel_FlexGrid = True
    FlexGrid.Redraw = True
' -- Errores
Exit Function
error_sub:
    MsgBox Err.Description
    Call Descargar
    Me.MousePointer = vbDefault
    FlexGrid.Redraw = True
End Function
Private Sub HighLight_Cells(Grid As Object, cdblMinValue As Double, iCurrentCol As Integer)
    Dim iRow As Integer
    With Grid
        .Redraw = False
        For iRow = 1 To Grid.Rows - 1
            ' -- Establecer Columna y fila activa
            .Col = iCurrentCol
            .Row = iRow
        Next
        .Redraw = True
    End With
End Sub
'***************************************************************************'
'*                   Función para descargar los objetos                    *'
'***************************************************************************'
Private Sub Descargar()
    On Local Error Resume Next
    Set obj_Workbook = Nothing
    Set obj_Excel = Nothing
    Set obj_Worksheet = Nothing
End Sub
Private Sub Command1_Click()
'***************************************************************************'
'*                  Generando Reporte en Word                              *'
'***************************************************************************'
    Dim Documento As New Word.Application
    Dim cOrigen As String, cDestino As String
    ' Se copia la plantilla a un nuevo documento...
    cOrigen = App.Path & "\Plantilla.doc"
    cDestino = App.Path & "\Reporte.doc"
    If Dir(cDestino) <> "" Then Kill cDestino
    FileCopy cOrigen, cDestino
    With Documento
        ' Abre un documento que puede tener extensión .doc, .dot o .rtf
        .Application.Documents.Open cDestino
        ' Relleno los marcadores que contenga la plantilla
        ' Hereda las propiedades definidas en el Marcador
        ' Negrita, Itálica, tipo y tamaño de la letra...
        .Documents.Item(1).Bookmarks.Item("NomDir").Range.Text = Text3.Text    'Nombre de quien lo creo
        .Documents.Item(1).Bookmarks.Item("Marcador1").Range.Text = Text2.Text 'Titulo
        .Documents.Item(1).Bookmarks.Item("Marcador2").Range.Text = Text1.Text 'Contenido
        ' Final del documento
        .Application.Selection.EndKey wdStory
        ' salto de línea
        .Application.Selection.TypeParagraph
        ' introducción de texto
        .Application.Selection.TypeText "Ejemplo de prueba"
        ' varios saltos de línea
        ' ______________________
        .Application.Selection.TypeParagraph
        .Application.Selection.TypeParagraph
        .Application.Selection.TypeParagraph
 ' crear una tabla
        .Documents.Item(1).Tables.Add Documento.Application.Selection.Range, 3, 5
        ' relleno de las celdas de la tabla
        .Documents.Item(1).Tables(1).Cell(1, 1).Range.Text = "Celda 1"
        ' finalmente mostramos el documento
        .Application.Visible = True
    End With
    Set Documento = Nothing
    End Sub
'***************************************************************************'
'*                                Fin                                      *'
'***************************************************************************'
'Volver al menu inicial
Private Sub Command2_Click()
Unload Me
portada.Show
End Sub
' Se resablecen los Texbox a su estado original...
Private Sub Command3_Click()
Text1.Text = ""
Text2.Text = "Titulo Principal..."
End Sub
Perdona, pero ¿por qué haces todo eso?
Si tienes los datos en excel, ¿por qué los pasas a VB para analizarlos si es mucho más fácil hacerlo en Excel?
Es que no comprendo la ventaja ni el motivo de usar vb.
VB es cómodo para lo que es: Mantenimientos, pantallas de datos, sistemas de gestión, etc...
Pero para numeros, estadisticas y demas. Excel es el rey ( quitando claro los sistemas DW profesionales).
Por otro lado y por mucho que quieras un informe de análisis estadístico nunca es 100% automatizable, siempre hay que revisarlo, añadir comentarios, etc..

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas