2017-10-10 8 views
0

Je suis en train de développer un script pour mettre en forme un modèle Outlook et l'envoyer en cliquant sur un bouton. L'objectif principal est d'utiliser l'interligne simple et 0pt sur l'espacement avant/après, et de convertir tous les contrôles de contenu (tels que les zones de liste déroulantes) sur mon modèle en texte/chaîne.Convertir la valeur du contrôle de contenu en chaîne à l'aide de VBA

Sub FormatAndSend() 
    Dim CurrentMessage As Outlook.MailItem 

    If TypeName(Application.ActiveWindow) = "Inspector" Then 
     Set CurrentMessage = Application.ActiveWindow.CurrentItem 

     If CurrentMessage.To = "" Then 
      If CurrentMessage.CC = "" Then 
       If CurrentMessage.BCC = "" Then Exit Sub 
      End If 
     End If 

     CurrentMessage.HTMLBody = Replace(CurrentMessage.HTMLBody, vbCr, vbCrLf) 
     'Workaround to Remove Line Spacing (not working) 
     '& 
     'Convert Content Control selected values to String ... 

     CurrentMessage.Send 

     Set CurrentMessage = Nothing 
    End If 
End Sub 

Existe-t-il un moyen plus simple de formater le modèle existant? J'ai déjà essayé plusieurs choses, telles que le remplacement avec des caractères ASCII, des éléments HTML, des mots-clés, ...

De même, est-il possible de convertir les valeurs sélectionnées de contrôle de contenu en texte normal?

+0

Ok, alors comment envisagez-vous de "convertir" une liste déroulante "en texte"? Que voulez-vous dire exactement par là, et quel code avez-vous écrit, et en particulier où et comment cela ne fonctionne-t-il pas comme il se doit? –

+0

Je veux dire, convertir la valeur sélectionnée de la liste déroulante, donc quand quelqu'un envoie/répond le message, son contenu ne peut pas être changé – mafap

+0

Je ne suis pas familier avec le modèle d'objet Outlook, mais un coup d'oeil à la classe 'MailItem' montre qu'il n'y a pas de Il semblerait qu'il n'y ait aucune collection 'Controls', donc l'analyse de' HtmlBody' semble être votre meilleur choix. –

Répondre

0

J'ai réussi à résoudre mon problème en utilisant regex pour supprimer les éléments OOXML et en modifiant les propriétés CSS.

Dim regX As Object 
Set regX = CreateObject("VBScript.RegExp") 

regX.Global = True 
regX.MultiLine = True 
regX.IgnoreCase = False 
regX.Pattern = "<\/?w:[A-z].*?>" 

CurrentMessage.HTMLBody = regX.Replace(CurrentMessage.HTMLBody, "") 
CurrentMessage.HTMLBody = Replace(CurrentMessage.HTMLBody, "<p class=MsoNormal>", _ 
          & "<p class=MsoNormal style='margin:0;line-height:0;'>") 
Set regX = Nothing