J'ai la macro VBA suivante qui sélectionne une table au point du curseur, met en forme la table et formate le texte.
Je veux éviter qu'elle ne plante (erreur d'exécution) lorsque le curseur n'est pas dans une table et place à la place un message comme "Sélectionnez d'abord la table".
Sub FormatTable(control As IRibbonControl) ' ' FormatTable Macro ' Selection.Tables(1).Select Selection.Tables(1).Style = "Prime Table 1" Selection.Style = ActiveDocument.Styles("Normal") End Sub
3 Réponses :
La meilleure méthode consiste à supprimer entièrement les éléments Selection
et .Select
car vous n'avez pas besoin de les utiliser pour interagir avec quoi que ce soit sur votre document. Cependant, comme je ne sais pas assez sur ce que vous faites, cela devrait répondre à vos besoins:
Sub FormatTable(control As IRibbonControl) ' ' FormatTable Macro ' On Error Resume Next ' allow code to progress even if an error occurs Selection.Tables(1).Select If Err.Number <> 0 Then Goto ErrHandler ' Detect an error and step out to handle it Selection.Tables(1).Style = "Prime Table 1" Selection.Style = ActiveDocument.Styles("Normal") On Error Goto 0 'switch off the On Error Resume Next as you really want to limit its use ErrHandler: MsgBox "Please Select a Table First" End Sub
Cela peut être fait en comptant le nombre de tables dans la sélection actuelle. S'il n'y en a pas, ce sera zéro. Dans l'exemple de code ci-dessous, s'il n'y a aucune table, un message s'affiche, mais cela peut bien sûr être supprimé.
Sub FormatTable(control As IRibbonControl) ' ' FormatTable Macro ' If Selection.Tables.Count > 0 Then Selection.Tables(1).Select Selection.Tables(1).Style = "Prime Table 1" Selection.Style = ActiveDocument.Styles("Normal") Else MsgBox "There's no table at the current selection." End If End Sub
Essayez :
Sub FormatTable(control As IRibbonControl) With Selection If .Information(wdWithInTable) = True Then .Tables(1).Style = "Prime Table 1" .Style = "Normal" Else MsgBox "There's no table at the current selection." End If End With End Sub