2009-05-17 3 views
3

Эй, ребята! Мне интересно, есть ли там кто-нибудь, кто может мне помочь в этом ...PowerPoint Automation от MS Access .... запросы к диаграмме?

У меня есть db доступа, который я использую для отслеживания показателей, в которых я работаю, и «числа хруста» для данных, которые я использую для создания ppt-представлений , Я обычно делаю около 40 ppt в месяц, и они составляют 98% карт.

Прямо сейчас я запускаю запросы по одному (с использованием операторов SQL), беру полученные данные и копирую и вставляю их в шаблон excel (просто я сделал макет таблицы в этом «шаблоне», чтобы график уже построены и отформатированы), а затем скопируйте диаграмму как изображение в шаблон ppt.

Итак, есть много ручной работы, и это было бы не так плохо, только у меня есть тон, который они могут сделать через месяц.

SO ..... как я могу в первую очередь запускать несколько запросов в Access с VBA на одном наборе данных/таблицы (я должен делать продажи по кварталам, по месяцам, по регионам, по штату, по сайту. .. и все это агрегат Top5, следовательно, причины для диаграмм), а затем отправить полученные данные в специальную рабочую книгу excel, а определить, что входит в диапазон ячеек ???

Если я получу все данные в excel и у вас есть диаграммы, готовые к работе, то есть ли какой-нибудь VBA, который возьмет диаграммы от excel (activeeworksheet) и вставляет их в powerpoint в виде изображений в квадратном представлении?

Могу ли я сделать то же самое с подходом Access to PowerPoint и вырезать все вместе?

Я новичок в лучшем случае! ЛЮБОЕ и ВСЕ помощь, советы, советы очень ценятся!

+0

Было бы полезно, если вы рассказал нам, какие конкретные версии Excel, Access и т. д. вы используете. 2003? 2007? Таким образом, мы можем предоставить конкретные примеры кода VBA. – JonnyBoats

+0

, который будет сервером Windows xp ... так что я угадываю его MSoffice 200-2003 ?? 2003 Я думаю – 2009-07-19 13:35:26

+0

действительно полезный вопрос! У меня также были некоторые макросы для автоматизации публикации партий таблиц и диаграмм из Excel в PowerPoint. Я делаю это, используя скопирующий диапазон ячеек в буфер обмена, а затем вставляю специальные команды изображения. теперь я попробую другую идею - я поместил все эти диаграммы для доступа к отчету, а затем сгенерировал слайды Powerpoint из доступа. –

ответ

1

Поскольку вы новичок, возможно, вам нужно разбить задачу на части и автоматизировать детали по одному. Каждый шаг обеспечит преимущества (то есть экономию времени), и вы сможете учиться, когда идете.

Трудно сделать конкретные рекомендации, основанные на отсутствии конкретной информации (какая версия и т. Д.). Это было сказано, возможно, хорошим первым шагом было бы привязать таблицы Excel к запросам доступа, чтобы электронные таблицы могли автоматически обновлять каждый месяц, и вам не придется вырезать и вставлять данные из Access в Excel. Вы можете полностью выполнить эту привязку в Excel.

Если вы используете Excel 2007, нажмите «Данные» на ленте, а затем нажмите «От доступа».

0

Что вы спрашиваете, много работы:

Via VBA вы должны открыть Excel (манипуляция Excel Application из Access), обновить свои диаграммы (манипуляции Range, изменение данных), если у вас есть права, то я бы предложил, чтобы ваши сводные диаграммы подключались к данным Access и не вставлялись в книгу, тем не менее я был в достаточных ситуациях, когда это было невозможно. Затем вам нужно будет открыть презентацию PowerPoint и скопировать ее из Excel в PowerPoint. Я сделал все это и знаю, сколько работы он может сэкономить, создав макрос (через VBA), чтобы сделать это. Это много кода.

4

Вам не нужно использовать Excel вообще! Используйте MS Access Charts в отчете и некоторый код VBA, чтобы напрямую поместить их в Powerpoint. Уже есть пример here

Один «полученный» - это если вы создаете графики в группе, то есть вы разрабатываете отчет с графом внутри группы, поэтому при запуске отчета вы получите множество графиков.

Немного сложно получить каждый из этих графиков и отбросить их в 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 слайды п раз - где п равно числу групп, а затем обновляет свойства графов Query

например

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