2014-06-13 3 views

Répondre

0

Quelque chose comme ça devrait faire l'affaire. Faites-moi savoir si cela vous donne aucun problème (j'ai modifié certaines de mes fonctions existantes et je pourrais avoir une faute de frappe/etc

Note:. C'est pour Office 2010.

Const PPTReference as String = "C:\Program Files (x86)\Microsoft Office\Office14\POWERPOINT.EXE" 
Const PPTDescription as String = "Microsoft PowerPoint 14.0 Object Library" 

Private Sub Workbook_Open() 
    Call AddRefToPowerPointObjectLibrary 
End Sub 

Private Sub AddRefToPowerPointObjectLibrary() 
'Adds a programmatic refernce to Excel, if one does not already exist 

    If Not RefExists(PPTReference, PPTDescription) Then 
     Application.VBE.ActiveVBProject.References.AddFromFile PPTReference 

    Else: 
     'Already Installed 

    End If 

End Sub 

Function RefExists(refPath As String, refDescrip As String) As Boolean 
'Returns true/false if a specified reference exists, based on LIKE comparison 
' to reference.description. 
Dim ref As Variant 
Dim bExists As Boolean 

'Assume the reference doesn't exist 
bExists = False 

For Each ref In Application.VBE.ActiveVBProject.References 
    If ref.Description Like refDescrip Then 
     PPT_RefExists = True 
     Exit Function 
    End If 
Next 
PPT_RefExists = bExists 
End Function 

Mise à jour:

Ce code doit être exécuté avant d'appeler une procédure qui repose une liaison précoce au modèle d'objet PowerPoint.

Par exemple, vous ne peut pas faire:

Sub DontDoThis() 
    Dim pptApp as PowerPoint.Application 

    AddRefToPowerPointObjectLibrary 

    Set pptApp = New PowerPoint.Application 

    'more code... 

End Sub 

Il pourrait être plus fiable pour mettre le code ci-dessus dans le gestionnaire d'événements Workbook_Open, révisé ci-dessus.

+0

Hmmm pour une raison quelconque, mon autre module est toujours en train de se débarrasser des erreurs parce que j'ai écrit des trucs comme "Dim pptApp As PowerPoint.Application". Il ne me laissera pas appeler votre code avant d'appeler l'autre module (ie pour une raison quelconque il sera bloqué sur la déclaration d'objet avant d'exécuter l'additionneur de référence) – MyNameIsKhan

+0

Vous devriez appeler ce code * avant * vous appelez ** TOUT * * procédure qui repose sur une liaison anticipée à l'objet PowerPoint.Application. Vous pouvez essayer de le placer dans le gestionnaire d'événement 'Workbook_Open'. –

+0

Je me demande si tout changer pour relier tard serait mieux? Workbook_Open semble également être une bonne idée. – MyNameIsKhan

Questions connexes