2016-07-18 2 views
1

Je crée un fichier powerpoint et j'y ajoute des diapositives par programme via Access-VBA et cela fonctionne très bien jusqu'à maintenant. Mais maintenant, le client veut que le ppt soit invisible ou minimisé pendant la génération seulement. Juste après l'activation de l'objet ppt, je l'ai réduit, mais aussi, pendant 'Slides.Add', il réapparaît, donc j'ai besoin de le réduire à nouveau. Le problème est que cela provoque le déplacement du curseur vers ppt au lieu du document sur lequel il travaille. Donc, y a-t-il un moyen, je pourrais le garder complètement réduit ou faire fonctionner cette génération en arrière-plan et ne l'ouvrir qu'une fois terminé? Le code J'utilise est:Comment ajouter des diapositives dans Powerpoint par Access VBA en le minimisant seulement

Dim shpGraph As Object, Shpcnt As Integer, FndGraph As Boolean 
Dim lRowCnt, lColCnt, lValue As Long, CGFF_FldCnt As Integer 
Dim OPwrPnt As Object, OpwrPresent As Object, OpwrSlide As Object 
Set OPwrPnt = CreateObject("Powerpoint.application") 
Set OpwrPresent = OPwrPnt.Presentations.Add(WithWindow:=msoFalse) 
Set OpwrSlide = OpwrPresent.Slides.Add(slideCounter, PpSlideLayout.ppLayoutTitle) 
OPwrPnt.WindowState = ppWindowMinimized 
slideCounter = slideCounter + 1 
lheight = OPwrPnt.ActivePresentation.PageSetup.SlideHeight/2 
lwidth = OPwrPnt.ActivePresentation.PageSetup.SlideWidth/1 
LLeft = 0 
lTop = OPwrPnt.ActivePresentation.PageSetup.SlideHeight/4 
Set shpGraph = OpwrPresent.Shapes.AddOLEObject(Left:=LLeft, _ 
       Top:=lTop, Width:=lwidth, Height:=lheight, _ 
       ClassName:="MSGraph.Chart", Link:=0).OLEFormat.Object 

J'ai écrit le code pour minimiser le WindowState juste avant et après la fonction Add, mais il apparaît juste pour une fraction de seconde, se déplaçant d'où le focus du curseur de tout document qu'ils travaillent au ppt, dont ils ne veulent pas. Alors, comment puis-je le garder complètement minimisé?

+0

La meilleure recommandation serait de pré-remplir le PowerPoint, ce qui peut être difficile si vous n'êtes pas au courant combien de diapositives seront nécessaires, mais si vous êtes, alors il suffit d'ajouter le corre ct nombre de diapositives, minimiser le document, puis itérer à travers les diapositives par index dans une boucle – RGA

+0

@RGA Merci pour la réponse, mais c'est ce que je fais déjà, cet extrait de code est juste sa version réduite. Mais ils veulent ça juste après avoir cliqué sur le bouton Générer, la génération de ppt devrait se produire en arrière-plan et ne devrait pas surgir à tout moment avant de le terminer. –

Répondre

1

Vous pouvez ouvrir l'objet powerpoint sans fenêtre (en supposant que vous ne jamais utiliser Select ou des Active... références

Set oPPTPres = oPPTApp.Presentations.add(WithWindow:=msoFalse) 

puis, l'ajout de diapositives à cette présentation doit être menée complètement invisiblement. Après cela, je crois que vous il suffit de sauvegarder, fermer et rouvrir la présentation (avec la propriété WithWindow définie sur true) pour l'afficher

+0

Merci, pourriez-vous s'il vous plaît me donner un extrait de code simple de ce que vous voulez dire. Ce serait très utile. –

+0

@HemantSisodia un extrait de quoi? – RGA

+0

ok lemme jouez avec votre suggestion d'abord. –