2009-05-17 5 views
3

ねえ、みんな!私はこれで私を助けることができる人がいるかどうか疑問に思っています...PowerPointオートメーションからMS Access ....グラフにクエリ?

私は私が働いているメトリクスと、私がpptプレゼンテーションを構築するために使うデータのための "番号危機" 。私は通常、毎月約40ptをやらなければならず、98%のチャートです。

今は、SQL文を使用して一度に1つずつクエリを実行し、その結果のデータをコピーして貼り付けてExcelテンプレートに貼り付けます(単純にこの「テンプレート」のモックテーブルを作成してすでにビルドされてフォーマットされている)、図をpptテンプレートにコピーします。

手作業がたくさんありますが、それほど難しいことではありません。私は1か月以内にこれらの音色を持っています。

そうですね、まず、同じデータセット/テーブルでVBAを使用したAccessで複数のクエリを実行できますか(四半期ごと、月ごと、地域ごと、州ごと、サイトごとに売上を行う必要があります)。 ..これらのすべてがTop5集約、したがってチャートの理由)、そして結果を特定のExcelワークブックに送信し、何がセル範囲に入るのかを定義します。

Excelにすべてのデータを取得してチャートを準備しておけば、エクセル(アクティブワークシート)からチャートを取得し、クワッドビューレイアウトで画像としてパワーポイントに貼り付けるVBAがありますか?

私はAccess to PowerPointのアプローチで同じことを実行して、すべてを巧みに処理できますか?

私は最高の初心者です!すべてとすべてのヘルプ、ヒント、アドバイスを大歓迎です!

+0

を、nはグループの数で、その後、グラフのクエリのプロパティを更新これは参考になりますあなたが使用しているExcel、Accessなどの特定のバージョンを教えてくれました。 2003? 2007年?そのようにして、VBAコードの具体例を提供することができます。 – JonnyBoats

+0

それはWindowsサーバーxpになるでしょう...私はそのMSoffice 200-2003を推測していますか? 2003私は –

+0

本当に便利な質問だと思う!私はExcelからPowerPointへのテーブルやチャートの公開を自動化するマクロもいくつか持っていました。私はクリップボードにセルの範囲をcopiingし、次に特別なコマンドを貼り付けることでこれを行います。今私は別のアイデアを試してみましょう - 私はすべてのこれらのグラフにアクセスするレポートを作成し、アクセスからパワーポイントのスライドを生成します。 –

答えて

1

あなたは初心者であるため、タスクを分割して一度に1つずつ自動化する必要があります。各ステップは利益(つまり時間の節約)をもたらし、あなたが行くにつれて学ぶことができます。

特定の情報(バージョンなど)の不足に基づいて特定の推奨事項を作成することは困難です。つまり、Excelのテーブルをアクセスクエリにリンクして、毎月のスプレッドシートの自動更新が可能になり、AccessからExcelへのデータをカットアンドペーストする必要がなくなります。これをExcel内で完全にリンクすることができます。

Excel 2007を使用している場合は、リボンの[データ]をクリックし、[アクセスから]をクリックします。あなたが持っている場合は、あなたのチャート(レンジ操作、データ更新)を更新し、エクセル(AccessからExcelのApplication操作)を開く必要があるだろう

経由VBA:

0

何を求めていることは多くの仕事でありますあなたのピボットチャートをAccessデータに接続してブックに貼り付けないことをお勧めしますが、それでも可能ではない十分な状況に陥っています。次に、PowerPointプレゼンテーションを開き、ExcelからPowerPointにコピーする必要があります。私はこれらのすべてをやって、これを行うためにマクロを(VBA経由で)作成することでどれくらいの労力を節約できるかを知っています。それは多くのコードです。

4

Excelをまったく使用する必要はありません。 MS Access ChartsをレポートやいくつかのVBAコードで使用して、Powerpointに直接入れることができます。すでに例がありますhere

グループにグラフを生成すると、つまりグループ内のグラフでレポートを設計すると、1つの「つかみ」があります。レポートを実行すると、多数のグラフが作成されます。

これらのグラフをそれぞれ保持して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のスライドをn回に基本グラフを貼り付けているあなたは何をする必要があるかPowerPointで - あなたの場合は例えば

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 
関連する問題