J'explète du texte entre les parens dans la barre de titre de la fenêtre active. Cette partie fonctionne bien (grâce à une aide que j'ai reçue ici auparavant!). Maintenant, je veux créer deux macros distinctes - une qui ne renvoie que le prénom et l'autre qui ne renvoie que le nom de famille.
Ma barre de titre de la fenêtre active ressemble à ceci comme ceci: p>
du texte à gauche (henderson, tom) du texte à droite (Il n'y a pas d'espace après la virgule) p>
Le nom de famille Macro fonctionne parfaitement. Il ressemble à ceci: p>
Sub a1FirstName() 'Extract first name of patient from title bar (between parens) Dim strPatientName As String Dim OpenPosition As Integer '(open paren marker) Dim closeposition As Integer '(close paren marker) OpenPosition = InStr(ActiveDocument.ActiveWindow.Caption, "(") closeposition = InStr(ActiveDocument.ActiveWindow.Caption, ")") strPatientName = Mid(ActiveDocument.ActiveWindow.Caption, _ OpenPosition + 1, closeposition - OpenPosition - 1) Dim c As Long c = InStr(strPatientName, ",") strPatientName = Right(strPatientName, c - 1) Selection.TypeText strPatientName End Sub
3 Réponses :
Modifier, il semble que je ne comprenais pas bien la première fois. Tentative 2:
Vous voulez tout supprimer à droite de la virgule. P>
Debug.Print Mid(Mystring, InStr(Mystring, "," + 1))
Soyez prudent dans votre dernier exemple, car s'il n'y a pas de virgule dans la chaîne, elle renvoie la chaîne totale au lieu d'un vide (ce qui serait plus sain d'esprit).
Vous pouvez utiliser split () code> pour créer un tableau hors des parties séparées par la virgule du texte, puis accédez à la première ou à la deuxième partie:
Très complet. Vous pouvez également vous échapper avec l'utilisation de Split code> exclusivement au lieu de
Instr code> et
moyen code>. C'est un peu moins tolérant à un manquant
) code> ou
( code> cependant.
On dirait que tout le monde se trouve sur code strong> donne l'idée principale. Vous pouvez utiliser Le code ci-dessus présente un divisé code> pour obtenir la première / seconde partie du nom. Vous pouvez également utiliser
divisé code> pour vous débarrasser des parenthèses. Cela fonctionne si vous savez que vous voulez seulement (et toujours) avoir un seul
( code> et
) code>.
Split code> pour avoir la partie de la chaîne code> code> qui n'inclut pas le
( code> ou
) code> et ensuite à nouveau d'obtenir de chaque côté du
, code>. p>
deux divisée code> et un
Option de trois divisées code>. La principale différence est que la variété fractionnée utilise le même code pour supposer les parenthèses et le seul changement est le côté du
, code> à saisir. Les deux options de division profitent du fait que la division sur une virgule supprime une parenthèses gratuitement. Les indices il y a un peu plus compliqué. P> p>
J'utiliserais STIT pour la virgule, mais simplement enlever les supports que j'utiliserais remplacer: nom_last = remplacer (remplacer (STR, ") (1)", "") "," ) et nom_first = remplacer (remplacer (STRAT (STR, ") (0),") "", "") "," ("") Votre option 3 divisées vous donnera des problèmes s'il n'ya pas de support
@Dandonoghue, je suis d'accord avec un seul personnage à enlever, Split est un peu surpeuplé. Remplacer est plus évident ce que vous essayez de faire. J'ai déjà utilisé ce modèle avant de décaper moins trivial et cela fonctionne bien. Dans ce cas, il battrait Remplacer s'il y avait un autre texte en dehors des supports. Si cela n'est pas probable, remplacer serait un bon moyen d'y aller.
@Dandonoghue, remplacer a également l'avantage d'échouer bien si rien n'est trouvé. Certainement bien pour la référence future. Merci.
Vous avez raison, cela revient aux données principales, plutôt que de remplacer, nous pourrions même utiliser le milieu combiné avec la len de la chaîne moins 2 si nous sommes garantis qu'il y a toujours un support de départ et de fin et rien d'autre, la méthode Split Donnez une capacité peu plus dynamique si le jeu d'enregistrement le nécessite.