您根本不需要使用 Excel!在报告中使用 MS Access Charts 和一些 VBA 代码将它们直接放入 Powerpoint。这里已经有一个例子
一个“陷阱”是如果您在组中生成图表,即您使用组内的图表设计报告 - 因此当您运行报告时,您将创建大量图表。
获取这些图表中的每一个并将它们放入 Powerpoint 有点棘手,但这里有一些代码可以处理它。这适用于 Access 2003
'Loop through all the controls in this report and pickout all the graphs
For Each c In pReport.Controls
    'Graphs initially appear to be in an Object Frame
    If TypeOf c Is ObjectFrame Then
        'Check the Class of the object to make sure its a Chart
        If Left$(c.Class, 13) = "MSGraph.Chart" Then
            'Check if this graph must be cloned (required if the graph is in a group in the MS Access report)
            If Not IsGraphToBeCloned(pReport.Name, c.ControlName) Then
                InsertGraphToPptSlide c, "", pReport.Name
            Else
                InsertGraphGroupToPpt pReport.Name, c
            End If
        End If
    End If
Next
这将找到报告中的所有图表,如果图表在一个组中,那么我们调用 InsertGraphGroupToPPt 函数。
这里的诀窍是我们知道我们多次拥有相同的基本图 - 但填充了不同的数据。因此,在 Powerpoint 中,您需要将基础图粘贴到 powerpoint 幻灯片中 n 次 - 其中 n 是组数,然后更新图查询属性
例如
Function UpdateGraphInPowerpoint(sql As String, OrigGraph As ObjectFrame, Groups As dao.Recordset, GroupName As String, ReportName As String) As Boolean
    //Copyright Innova Associates Ltd, 2009
    On Error GoTo ERR_CGFF
    On Error GoTo ERR_CGFF
    Dim oDataSheet As DataSheet
    Dim Graph As Graph.Chart
    Dim lRowCnt, lColCnt, lValue As Long, CGFF_FldCnt As Integer
    Dim CGFF_Rs As dao.Recordset
    Dim CGFF_field As dao.Field
    Dim CGFF_PwrPntloaded As Boolean
    Dim lheight, lwidth, LLeft, lTop As Single
    Dim slidenum As Integer
    Dim GraphSQL As String
    Dim lGrpPos As Long
    'Loop thru groups
    Do While Not Groups.EOF
        'We want content to be added to the end of the presentation - so find out how many slides we already have
        slidenum = gPwrPntPres.Slides.Count
        OrigGraph.Action = acOLECopy            'Copy to clipboard
        slidenum = slidenum + 1                 'Increment the Ppt slide number
        gPwrPntPres.Slides.Add slidenum, ppLayoutTitleOnly   'Add a Ppt slide
        'On Error Resume Next    'Ignore errors related to Graph caption
        gPwrPntPres.Slides(slidenum).Shapes(1).TextFrame.TextRange.Text = ReportName & vbCrLf & "(" & Groups.Fields(0).Value & ")" 'Set slide title to match graph title
        gPwrPntPres.Slides(slidenum).Shapes(1).TextFrame.TextRange.Font.Size = 16
        gPwrPntPres.Slides(slidenum).Shapes.Paste  'Paste graph into ppt from clipboard
        Set Graph = gPwrPntPres.Slides(slidenum).Shapes(2).OLEFormat.Object
        Set oDataSheet = Graph.Application.DataSheet    ' Set the reference to the datasheet collection.
        oDataSheet.Cells.Clear                          ' Clear the datasheet.
        GraphSQL = Replace(sql, "<%WHERE%>", " where " & GroupName & " = '" & Groups.Fields(0).Value & "'")
        Set CGFF_Rs = ExecQuery(GraphSQL)
        CGFF_FldCnt = 1
        ' Loop through the fields collection and get the field names.
        For Each CGFF_field In CGFF_Rs.Fields
            oDataSheet.Cells(1, CGFF_FldCnt).Value = CGFF_Rs.Fields(CGFF_FldCnt - 1).Name
           CGFF_FldCnt = CGFF_FldCnt + 1
        Next CGFF_field
        lRowCnt = 2
        ' Loop through the recordset.
        Do While Not CGFF_Rs.EOF
            CGFF_FldCnt = 1
            ' Put the values for the fields in the datasheet.
            For Each CGFF_field In CGFF_Rs.Fields
               oDataSheet.Cells(lRowCnt, CGFF_FldCnt).Value = IIf(IsNull(CGFF_field.Value), "", CGFF_field.Value)
               CGFF_FldCnt = CGFF_FldCnt + 1
            Next CGFF_field
            lRowCnt = lRowCnt + 1
            CGFF_Rs.MoveNext
        Loop
        ' Update the graph.
        Graph.Application.Update
        DoEvents
        CGFF_Rs.Close
        DoEvents
        Groups.MoveNext
    Loop
    UpdateGraphInPowerpoint = True
    Exit Function
End Function