2013-06-20 2 views
0

J'ai une macro PowerPoint qui prend des photos et les ajoute à un diaporama ouvert. Lorsque je tente de lancer la macro après avoir cliqué sur la liste des diapositives sur la gauche de l'écran (ce qui provoque une barre Horizonal clignote solide sous la dernière diapositive), je reçois l'erreur:Forme membre inconnu: demande non valide. Pour sélectionner une forme, sa vue doit être active

Runtime error '-2147188160 (80042240)': 
Shape unknown member: invalid request. To select a shape, its view must be active 

je me suis dit que c'était parce que je n'ai pas un objet valide sélectionné alors j'ai ajouté une déclaration de débogage pour déterminer ce que la sélection était:

If ActiveWindow.Selection.Type = 0 Then 
    MsgBox "0" 
End If 
If ActiveWindow.Selection.Type = 1 Then 
    MsgBox "1" 
End If 
If ActiveWindow.Selection.Type = 2 Then 
    MsgBox "2" 
End If 
If ActiveWindow.Selection.Type = 3 Then 
    MsgBox "3" 
End If 

la première image pour obtenir ajoutée provoque une 1 à afficher et l'image est ajoutée correctement mais les affichages d'erreur et les arrêts de macros. De façon gênante, quand j'essaie de l'exécuter en mode débogage, cela fonctionne à chaque fois. Je ne peux que supposer que je suis en quelque sorte en train de régler manuellement le problème par accident quand je le débogue.

L'affirmation selon laquelle la cause du problème:

ActiveWindow.Selection.SlideRange.Shapes.AddPicture(//file information//).Select 

//the line after 
ActiveWindow.Selection.ShapeRange.ZOrder msoSendToBack 
+0

pourriez-vous fournir plus de votre code? Pourquoi avez-vous besoin de sélectionner la forme après l'avoir ajoutée - est-ce nécessaire? –

+0

@KazJaw En savoir plus. La plupart de mon code est "fluff". Je ne suis honnêtement pas sûr si j'ai besoin de le sélectionner. Je ne l'ai pas écrit à l'origine et je sais très peu de choses sur VBA. Je suis certainement prêt à le réécrire d'une manière différente si cela va résoudre le problème – Daniel

Répondre

1

Je pense que je sais ce qui se passe ici. Si vous/l'utilisateur avez cliqué sur la vignette de la diapositive dans le volet vignettes, la sélection active peut être la diapositive plutôt que l'image ajoutée.

Vous pouvez contourner cela en faisant quelque chose comme ceci:

Dim oSh as Shape 

Set oSh = ActiveWindow.Selection.SlideRange.Shapes.AddPicture(//file information//) 
oSh.ZOrder msoSendToBack 

Juste une des nombreuses raisons d'utiliser des références d'objet (Osh dans ce cas) plutôt que de travailler avec une sélection. ;-)

1

En supposant que vous voulez ajouter vos images quand un diaporama est fonctionnel vous pouvez le faire de cette façon aussi:

Dim fileName, filename1, filename2 
fileName = "c:\PROJEKT\....\Hydrangeas.jpg" 'your path +file name here 
fileName1 = ... 'add other file path 
fileName2 = ... 'add other file path 

With ActivePresentation.SlideShowWindow.View.Slide.Shapes 
    .AddPicture fileName, True, True, 10, 10, 100, 100 
    .AddPicture fileName1, True, True, 30, 30, 100, 100 
    .AddPicture fileName2, True, True, 50, 50, 100, 100 
    '...etc. 
End With 

espérons qu'il aide ...

0
Use ActiveWindow.View.GotoSlide oSlide.SlideIndex 

Pour activer la vue avant de sélectionner la forme sur la diapositive.

Plus d'informations peuvent être trouvées here