Grafieken uit Excel in Wordrapportage (bij bookmarks) zetten

  • Onderwerp starter Onderwerp starter RiaP
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

RiaP

Gebruiker
Lid geworden
7 jan 2012
Berichten
10
Ik heb een rapportage in Wordwaarin ik een aantal bookmarks heb staan. Op de plaats van iedere bookmark wil ik een grafiek uit Excel zetten.
De eerste grafiek plaatsen gaat goed, maar daarna gaat het mis.
Ik heb verzonnen dat ik na eerste keer plakken het klembord leeg moet maken en dan de volgende grafiek moet "ophalen" maar dat lukt me niet.
Iedere keer wordt de eerste grafiek ingevoegd.
Ik heb bestandjes bijgevoegd om e.e.a. te verduidelijken (niet de orginelen daar staat vertrouwelijke informatie in).

Code:
Sub GrafiekenInlezen()

Dim oExcel As Excel.Application
Dim oWB As Excel.Workbook
Dim oSheet As Excel.Worksheet

Set oExcel = New Excel.Application
Set oWB = oExcel.Workbooks.Open("D:\Documenten\Werk\Gegevens koeken.xlsx")

Set oSheet = oWB.Sheets("Blad1")

oSheet.ChartObjects("Grafiek 1").Activate
ActiveChart.ChartArea.Copy

ActiveDocument.Bookmarks("bmkStroopwafel").Select
Selection.Paste

oExcel.CutCopyMode = False

[COLOR="#00FF00"]Set oSheet = oWB.Sheets("Blad2")

oSheet.ChartObjects("Grafiek 2").Activate
ActiveChart.ChartArea.Copy
ActiveDocument.Bookmarks("bmkKoek").Select
Selection.Paste[/COLOR]


End Sub
 

Bijlagen

Lijkt me handiger de koppelingen naar de grafieken vast in het bestand te zetten:

{ LINK Excel.Sheet.12 "G:\\OF\\0_Gegevens koeken.xlsx" "Blad1![0_Gegevens koeken.xlsx]Blad1 Grafiek 1" \a \p }

{ LINK Excel.Sheet.12 "G:\\OF\\0_Gegevens koeken.xlsx" "Blad2![0_Gegevens koeken.xlsx]Blad2 Grafiek 2" \a \p }

{ LINK Excel.Sheet.12 "G:\\OF\\0_Gegevens koeken.xlsx" "Blad3![0_Gegevens koeken.xlsx]Blad3 Grafiek 3" \a \p }
 
Dag RiaP !

De grafieken vast linken met koppelingen lijkt mij inderdaad beter, gezien de grafieken in het Word-document dan automatisch aangepast worden als de brongegevens veranderen.

Maar misschien wil jij ze, voor jouw toepassing, toch eenmalig kopiëren en omdat ik geen ervaring heb met Word-macro's vond ik het wel leuk om eens op reis te gaan in de wereld van de Word-objecten. Ik ben tot de hiernavolgende code gekomen. Om die code te kunnen vereenvoudigen heb ik wel de namen van de sheets in het Excel-bestand gewijzigd, zodat de sheet-namen identiek zijn aan de overeenstemmende bookmark-namen. Dus "Blad1" wordt "bmkStroopwafel", "Blad2" wordt "bmkKoek" en "Blad3" wordt "bmkSprits".
Wel even vermelden dat de macro naar behoren werkt met Office 2003.

Code:
Sub GrafiekenInlezen()

Dim oExcel As Excel.Application
Dim oWB As Excel.Workbook
Dim oSheet As Excel.Worksheet
Dim MyArray() As Variant, i  As Integer

Set oExcel = New Excel.Application

Set oWB = oExcel.Workbooks.Open("D:\Documenten\Werk\Gegevens koeken.xlsx", ReadOnly:=True)

MyArray = Array("bmkKoek", "bmkSprits", "bmkStroopwafel")
For i = 0 To UBound(MyArray)
    Set oSheet = oWB.Sheets(MyArray(i))
    oSheet.ChartObjects(1).Chart.ChartArea.Copy 'Er is slechts 1 chart per sheet
    ThisDocument.Bookmarks(MyArray(i)).Range.Paste
Next

oWB.Close SaveChanges:=False

'Hier is veel discussie over, maar je weet toch nooit.
Set oExcel = Nothing

End Sub

Grtz,
MDN111.
 
Kan dan ook zo:

Code:
Sub GrafiekenInlezen()
    with getobject("D:\Documenten\Werk\Gegevens koeken.xlsx")

      for each it in  Array("bmkKoek", "bmkSprits", "bmkStroopwafel")
         .Sheets(it).ChartObjects(1).Chart.ChartArea.Copy
        ThisDocument.Bookmarks(it).Range.Paste
      Next
      .close 0
    end with
End Sub
 
Laatst bewerkt:
erg mooi, maar
Code:
with getobject("D:\Documenten\Werk\Gegevens koeken.xlsx"[COLOR="#FF0000"][B])[/B][/COLOR]
 
oef een array

Ik was al "bang" dat de oplossing lag bij een array daarbij wordt onbarmhartig zichtbaar dat ik niet zo'n gevorderde vba-er ben.
Ik snap wel wat er gebeurt als ik naar de code kijk.

Koppeling brief - grafieken is in mijn geval niet handig de oplossing van MDN111 snap ik het best.

Ik wordt alleen geconfronteerd met de mededeling Fout -2147417851 (80010105) tijdens de uitvoering: Methode Copy van object ChartArea is mislukt.
Ik ben inmiddels wel op mijn werk aangeland, daar werk ik met Office 2013, zou het daardoor komen?

Nog een opmerking voor "meelezers" - vergeet niet in Word in je VBA venster via Extra, Verwijzingen, de Microsoft Exel Object Library aan te vinken.
 
Koppeling brief - grafieken is in mijn geval niet handig

Kun je dat toelichten ?
de code van een koppeling kun je nl. ook met een eenvoudige macro (zonder Excel te openen of ernaar te verwijzen) wijzigen.
 
Hoi SNB
Ik heb mijn vraag proberen te vereenvoudigen. De achtergrond is:
Het Excelbestand met gegevens komt uit SPSS (een statistisch computerprogramma). Er word in Word een rapportage gedaan waarin de grafieken worden ingevoegd.
Rapportage is een sjabloon, daar kan ik de bookmarks vast inzetten.
Er zijn per jaar ongeveer 50 organisaties waarvoor een rapportage moet worden gemaakt. In mijn voorbeeld gaat het om 3 grafieken in het "echt" om 8.
Gebruiker voor wie ik de oplossing probeer te vinden, kan ik wel aan het verstand peuteren dat bladen met grafiek even hernoemd moeten worden (of misschien kan zij ook inlezen in een sjabloon die de bladen al met goede naam heeft) en dat in de code evt. een pad moet worden aangepast.
 
In plaats van die bladwijzers kun je beter in het document de velden met de koppeling naar de grafieken zetten.

Bij het openen van het bestand kan dan gevraagd worden hoe het nieuwe bestand heet.
Dan vervangt de macro het oude Excelbestand door het nieuwe excelbestand, ververst de koppelingen en klaar ben je.
 
snb
Ja dat is het!
dan wel de vraag hoe zou die macro er uit kunnen zien?
 
Code:
Private Sub Document_open()
    With Application.FileDialog(3)
        .Filters.Add "Excel files", "*.xlsx", 1

        If .Show Then FileCopy .SelectedItems(1), "G:\OF\GGD_Gouda_gekoppelde_gegevens.xlsx"
    End With

    activedocument.fields.update
End Sub
 
Als een zonnetje!!
Enorm bedankt (ook namens mijn collega)
 
Vergelijk voor de lol ook nog eens met je oorspronkelijke aanpak/macro
 
Oplossing MDN111 werk nu wel

SNB ik moet bekennen de oplossing met koppelingen en macro is vergeleken met oorpronkelijke idee veel meer "recht door zee".
Ik heb te moeilijk gedacht.

Ik ook nog eens de oplossing van MDN111 geprobeerd waarbij ik de bladen niet hernoemd heb (gewoon Blad1, Blad2 etc gelaten) maar de naam van de bookmarks aangepast: ook Blad1, Blad2 (en dan niet netjes bmkBlad1). Wat schetst mijn verbazing nu werkt het wel!
 
Verbazing lijkt me onterecht. VBA maakt onderscheid tussen een werkblad.name en een werkblad.codename
 
Dag RiaP !

Omdat je gekozen had voor de oplossing van snb (die heeft gewoonlijk wel de mooiste code ;) ) heb ik niet meer gereageerd, maar ik heb wel jullie discussie gevolgd en ook verder (tevergeefs) gezocht naar een mogelijke oorzaak van de eerder genoemde foutmelding. Nu denk ik dat het duidelijk is. De macro blijkt te werken als de sheet-namen dezelfde zijn als de bookmark-namen. Ik ben dus ook niet verbaasd.

Grtz,
MDN111.
 
Moraal van het verhaal. Door het stellen van één vraag een hoop geleerd. Nogmaals dank. Jullie gaan me vaker zien :d
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan