
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.