2013-06-19 4 views
0

Ok, donc nous avons quelques sections uniques dans un modèle macro-activé pour Word 2007 et pour chaque section, nous avons 2 entrées qui sont standard pour le formulaire, et il y a environ 20 entrées optionnelles qui sont toutes gérées par AutoText. La mise en forme est identique entre le modèle et les entrées d'insertion automatique et je veux numéroter automatiquement les entrées lorsqu'elles sont ajoutées (soit par l'utilisateur en tapant la phrase clé Insertion automatique ou en appuyant sur un bouton sur le ruban pour l'insérer). Existe-t-il un moyen facile de faire cela? Voici le bloc de code où l'un de ces (numérotées) entrées est géré et ce que j'ai essayé de mettre en œuvre un système de numérotation d'autres suggestions sur d'autres forums (n'a pas pu trouver quelque chose d'utile ici):Existe-t-il une manière «élégante» d'adopter la numérotation automatique dans une macro Word 2007 (VBA)?

Case "cboFF" 
         SetMargins 0, 1, 1 
         Selection.ParagraphFormat.Space1 
         Selection.Text = "FINDINGS OF FACT" & vbLf 
         Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter 
         Selection.Font.Bold = True 
         Selection.Font.Underline = wdUnderlineSingle 
         Selection.Collapse (wdCollapseEnd) 
         Selection.Text = vbLf 
         Selection.ParagraphFormat.SpaceAfter = 6 
         Selection.Collapse (wdCollapseEnd) 
         Selection.ParagraphFormat.Alignment = wdAlignParagraphJustify 
         Selection.Font.Underline = wdUnderlineNone 
         Selection.Font.Bold = False 
         SetMargins 0, 1, 1 
         'With ListGalleries(wdNumberGallery).ListTemplates(1).ListLevels(1) 
         '.NumberFormat = "%1." 
         '.TrailingCharacter = wdTrailingTab 
         '.NumberStyle = wdListNumberStyleNone 
         '.NumberPosition = InchesToPoints(0.5) 
         '.Alignment = wdListLevelAlignLeft 
         '.TextPosition = InchesToPoints(0.5) 
         '.ResetOnHigher = 0 
         '.StartAt = 1 
         'AutoNumberOnFOF 
         Selection.Text = "On " & strDateFOF & ", an industrial appeals judge certified that the parties agreed to include the Jurisdictional History in the Board record solely for jurisdictional purposes." & vbLf 
         Selection.ParagraphFormat.SpaceAfter = 6 
         Selection.Collapse (wdCollapseEnd) 
         Select Case strCaseCategory 
          Case "IND", "IND SELF-I" 
           If frmIIOD.optII.Value = True Then 
            Selection.Text = "II-FF" 
            Selection.Range.InsertAutoText 
            Selection.Collapse (wdCollapseEnd) 
            Selection.Text = vbLf 
            Selection.ParagraphFormat.SpaceAfter = 6 
            Selection.Collapse (wdCollapseEnd) 
            GoToEnd 
           End If 
           If frmIIOD.optOD.Value = True Then 
            Selection.Text = "OD-FF" 
            Selection.Range.InsertAutoText 
            Selection.Collapse (wdCollapseEnd) 
            Selection.Text = vbLf 
            Selection.ParagraphFormat.SpaceAfter = 6 
            Selection.Collapse (wdCollapseEnd) 
            GoToEnd 
           End If 
           If frmIIOD.optNotNeeded.Value = True Then 
            Selection.Text = vbLf 
            Selection.ParagraphFormat.SpaceAfter = 6 
            Selection.Collapse (wdCollapseEnd) 
           End If 
          Case Else 
           'Do Nothing 
         End Select 

Tous les commentaires constructifs seront très appréciés pour aider à résoudre ce problème. Je suis encore très novice en programmation et la majeure partie de mon expérience réside en C# et en Java.

Éditer: La structure du document est essentiellement un ensemble de listes détaillées contenant un texte juridique mis à jour par un utilisateur lorsque le processus d'appel passe par différentes étapes. Dans chacune des deux dernières sections, les listes détaillées doivent suivre un schéma de numérotation spécifique (num à .5 ", texte à 1", onglet à droite à 1 ") qui n'est pas natif de Word 2007. Un en-tête en gras s'affiche pour chaque L'insertion automatique sera ajoutée au besoin par l'utilisateur, le reste du document extrait les informations de notre base de données et contient les termes légaux nécessaires pour le document Pour commencer la numérotation pour chaque section individuellement, je pourrais terminer ceci:

+0

pouvez-vous joindre un lien vers votre document pour une meilleure compréhension de la structure du document? –

Répondre

0

J'ai effectivement trouvé ma propre solution au problème Le problème était d'essayer d'insérer une insertion automatique sur la (2ème) ligne de numérotation, car il lit toute la ligne et pense qu'il s'agit d'une insertion automatique.Plutôt que de lire seulement ii-ff ou od-ff, il lisait 1. ii-ff, ce qui n'est pas valide Insertion automatique (par nom).

    Case "cboFF" 
         SetMargins 0, 1, 1 
         Selection.ParagraphFormat.Space1 
         Selection.Text = "FINDINGS OF FACT" & vbLf 
         Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter 
         Selection.Font.Bold = True 
         Selection.Font.Underline = wdUnderlineSingle 
         Selection.Collapse (wdCollapseEnd) 
         Selection.Text = vbLf 
         Selection.ParagraphFormat.SpaceAfter = 6 
         Selection.Collapse (wdCollapseEnd) 
         Selection.ParagraphFormat.Alignment = wdAlignParagraphJustify 
         Selection.Font.Underline = wdUnderlineNone 
         Selection.Font.Bold = False 
         SetMargins -0.5, 1, 1 
         'AutoNumberOn 
         Selection.Text = "1." & vbTab & "On " & strDateFOF & strEntry1 & vbLf 
         Selection.ParagraphFormat.SpaceAfter = 6 
         Selection.Collapse (wdCollapseEnd) 
         Select Case strCaseCategory 
          Case "IND", "IND SELF-I" 
           If frmIIOD.optII.Value = True Then 
            Selection.Text = "2." & vbTab & strIIEntry & vbLf 
            Selection.ParagraphFormat.SpaceAfter = 6 
            Selection.Collapse (wdCollapseEnd) 
            Selection.Text = "3." & vbTab & "" & vbLf 
            Selection.Collapse (wdCollapseEnd) 
           End If 
           If frmIIOD.optOD.Value = True Then 
            Selection.Text = "2." & vbTab & strODEntry & vbLf 
            Selection.Text = "3." & vbTab & "" & vbLf 
            Selection.Collapse (wdCollapseEnd) 
           End If 
           If frmIIOD.optNotNeeded.Value = True Then 
            Selection.Text = "2." & vbTab & "" & vbLf 
            Selection.ParagraphFormat.SpaceAfter = 6 
            Selection.Collapse (wdCollapseEnd) 
           End If 
          Case Else 
           'Do Nothing 
         End Select 

Cela permet d'insérer des entrées d'insertion automatique sur les lignes vides et continuer le système de numérotation pré-formaté qui n'est pas natif de Word 2007. Maintenant, je dois juste trouver la meilleure façon de higlight mots spécifiques dans la sélection insérée. Ne devrait pas être trop mauvais:

'set array of text entries (6) 
    'begin loop 
    'find and highlight entry(i) 
    'end loop 
Questions connexes