2013-09-16 5 views
2

Je ne suis même pas sûr de pouvoir le faire dans Excel, mais je suis raisonnablement confiant qu'avec suffisamment de recul dans le monde VBA, je pourrais y arriver. Mais, je suis passé à OpenOffice dans un avenir prévisible donc ma question:Automatiser le titre d'un graphique dans OpenOffice Calc

Dans OpenOffice 4.0 est-il possible de lier le titre d'un graphique à une cellule de feuille de calcul? Essentiellement, je veux un joli titre en gras sur un graphique qui change quand une cellule particulière sur la feuille de calcul est mise à jour. Cette cellule contrôle déjà quelles données sont tracées sur le graphique.

Répondre

0

Oui c'est possible, et avec les macros OpenOffice c'est assez facile. Étape par étape:

macros habilitantes

Aller à la Outils> Options Menu et cliquez sur la section Sécurité sous OpenOffice.org. Une fois là, cliquez sur le bouton Macro Security. Maintenant, sur l'onglet niveau de sécurité, assurez-vous que vos paramètres vous permettront d'exécuter des macros.

Mes paramètres sont sur bas parce que je suis l'auteur de toutes les macros que je cours, si vous n'êtes pas sûr que ce sera votre cas, vous pouvez utiliser un réglage plus élevé.

Note: Attention, si vous êtes malchanceux ou que vous vivez dans les années 90, une macro maléfique peut causer de sérieux dommages!


Création d'une nouvelle macro

Maintenant que vous pouvez les exécuter, vous devez créer une nouvelle macro. OpenOffice accepte un large éventail de langues, y compris Python, mais puisque vous avez mentionné VBA dans votre question, je vais utiliser la version d'OO ici. Allez dans Outils> Macros> Organiser les macros> OpenOffice.org Basic, et une fois là, ajoutez un nouveau module sous l'arborescence de votre fichier. Donnez-lui un nom significatif.

New module


La réelle macro

Une fois que vous créez un nouveau module, l'écran de l'éditeur s'affiche, écrivez ce code ci-dessous:

' Set the title of the first Chart to the contents of C1 
Sub SetTitle 
    ' Get active sheet 
    oSheet = ThisComponent.CurrentController.ActiveSheet 

    ' Get the cell containing the chart title, in this case C1 
    oCell = oSheet.getCellRangeByName("C1") 
    oCharts = oSheet.getCharts() 

    ' Get the chart with index 0, which is the first chart created 
    ' to get the second you would use 1, the third 2 and so on... 
    oChart = oCharts.getByIndex(0) 


    oChartDoc = oChart.getEmbeddedObject() 

    'Change title 
    oChartDoc.getTitle().String = oCell.getString() 
End Sub 

Pour le tester, Il suffit de créer un graphique, de mettre quelque chose comme un titre sur la cellule C1 et d'exécuter la macro. Vous pouvez exécuter la macro de plusieurs façons, à des fins de test, utilisez simplement le bouton Exécuter de la même fenêtre que celle utilisée pour créer le module.Ceci est le résultat attendu:

Expected results


Pour augmenter encore davantage la macro

La macro avoir quelques problèmes comme il est en ce moment, comme:

  • Devoir réexécutez la macro chaque fois que vous voulez que le titre soit mis à jour.

Ceci est facilement résolu. Il y a plusieurs façons d'automatiser l'exécution de la macro, celle que je connais le mieux consiste à le faire tourner sur une boucle en conjonction avec un délai de, disons, 5 secondes et le faire démarrer dès que le fichier se charge.

Sub Main 
    Do While True 
     SetTitle() 
     Wait(5000) 
    Loop 
End Sub 

Et à partir de maintenant, vous devriez appeler le sous principal au lieu du SetTitle.

Pour exécuter le macro au démarrage aller à Outils> Personnaliser sur les événements onglet et sélectionnez Ouvrir le document dans la liste puis cliquez sur le bouton Macro . Dans la boîte de dialogue pour sélectionner la macro, sélectionnez Main. Maintenant, fermez le document, rouvrez-le, et voilà!

  • Avoir à adresser le diagramme par son index.

Vous pouvez utiliser le nom du graphique à la place (à droite Cliquez sur le graphique> Nom) comme ceci:

oChart = oCharts.getByName("Chart Name") 

Pour en savoir plus

Questions connexes