1
votes

Code VBA pour sélectionner la table au curseur ce qui évite un crash quand il n'y a pas de table au curseur

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


0 commentaires

3 Réponses :


0
votes

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


0 commentaires

1
votes

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


0 commentaires

0
votes

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


0 commentaires