Access

Guardar un gráfico de acceso en el disco

Uno breve hoy, pero pensé en demostrar lo fácil que es exportar/guardar un cuadro/gráfico desde un formulario o informe de Microsoft Access al disco en una variedad de formatos.


Hace un tiempo, cuando surgió la necesidad de hacer esto, ¡me sorprendió lo fácil que era lograrlo! Originalmente pensé que iba a tener que entrar en las API y todo eso, pero resulta que podemos hacerlo en solo un par de líneas de código.

Entonces la idea básica sería hacer algo como:

Private Sub CmdSaveChart_Click()
    Dim oChart                As Object
    Const sFileName           As String = "C:\Temp\Chart.png"
    Const sFilterName         As String = "PNG"

    Set oChart = Me.Graph0
    oChart.Export sFileName, sFilterName
    Set oChart = Nothing
End Sub

Como es habitual, luego modifiqué el código para convertirlo en un procedimiento flexible y reutilizable, agregué manejo de errores… y terminamos con:

'---------------------------------------------------------------------------------------
' Procedure : SaveChart
' Author    : Daniel Pineault, CARDA Consultants Inc.
' Website   : 
' Purpose   : Save the specified chart/graph to disk
' Copyright : The following is release as Attribution-ShareAlike 4.0 International
'             (CC BY-SA 4.0) - 
' Req'd Refs: None required
' References:
'
' Input Variables:
' ~~~~~~~~~~~~~~~~
' 
'
' Usage:
' ~~~~~~
' Call SaveChart(Me.Graph0, "C:\Temp\DataSamplingRatio.png")
' Call SaveChart(Me.Graph0, "C:\Temp\PercentageRatioForAgainst.gif")
' Call SaveChart(Me.Graph0, "C:\Temp\NumberOfUsersPerMonth.jpg")
'
' Revision History:
' Rev       Date(yyyy-mm-dd)        Description
' **************************************************************************************
' 1         2021-10-29
'---------------------------------------------------------------------------------------
Public Sub SaveChart(oChart As Access.ObjectFrame, _
                     sFileName As String)
On Error GoTo Error_Handler
    Dim sFilterName As String
    
    sFilterName = UCase(Right(sFileName, Len(sFileName) - InStrRev(sFileName, ".")))
    oChart.Export sFileName, sFilterName
    
Error_Handler_Exit:
    On Error Resume Next
    Set oChart = Nothing
    Exit Sub
 
Error_Handler:
    MsgBox "The following error has occurred" & vbCrLf & vbCrLf & _
           "Error Source: SaveChart" & vbCrLf & _
           "Error Number: " & Err.Number & vbCrLf & _
           "Error Description: " & Err.Description & _
           Switch(Erl = 0, "", Erl <> 0, vbCrLf & "Line No: " & Erl) _
           , vbOKOnly + vbCritical, "An Error has Occurred!"
    Resume Error_Handler_Exit
End Sub

Eso se puede llamar simplemente haciendo:

Call SaveChart(Me.Graph0, "C:\Temp\DataSamplingRatio.png")

Y ahí lo tiene, una forma súper sencilla de guardar un cuadro/gráfico en un archivo.

Este tipo de funcionalidad también se puede agregar a la cinta para permitir a los usuarios exportar cualquier gráfico que se muestra en la pantalla…

En cuanto a los FilterNames permitidos, los formatos de imagen admitidos por este método de exportación se definen en el registro de su PC. Normalmente, estará seguro utilizando los formatos comunes, como:

  • BMP
  • GIF
  • JPEG
  • PNG

Pero no dudes en ir investigando y buscar qué está definido en tu sistema revisando las siguientes claves:

  • HKEY_LOCAL_MACHINE\Software\Microsoft\Herramientas compartidas\Filtros gráficos\Exportar
  • HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Shared Tools\Filtros gráficos\Exportar

Recursos sobre el tema

¿Acceder a la documentación de soporte? Me decepcionó, incluso hoy, cuando escribí esta publicación, que no parece haber ninguna documentación de Access sobre este método y que, en su lugar, tenemos que confiar en la documentación de Excel. Como podrás comprobar por ti mismo, incluso es bastante escaso.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba