Mise en forme du texte dans messagebox excel Vba
Je suis nouveau sur Excel VBA et ont écrit le code Vba pour faire une boucle dans les cellules et d'obtenir leurs valeurs.Après cela, effectuer un traitement et si elle correspond à certains critères de les ajouter à une liste avec saut de ligne.
Faites cela jusqu'à ce que toutes les lignes sont faites. Cela fonctionne parfaitement bien et le résultat final est que l'image ci-dessous:
La chose est que je veux la mise en forme à l'air propre , donc est-il possible que l'écart entre le texte est le même sur toutes les lignes de sorte qu'il a l'air soigné.
La façon dont j'ai ajouter les lignes :
Dim tmpLine
tmpLine = line & " " & dateVal
mainMessage = mainMessage & tmpLine & vbNewLine
Pas sûr si c'est la meilleure façon, mais c'est ce que je sais...
OriginalL'auteur confusedMind | 2013-08-29
Vous devez vous connecter pour publier un commentaire.
Je l'ai obtenu, peut-être que ça va résoudre votre problème:
Voici le résultat:
OriginalL'auteur simpLE MAn
J'ai mis en place une solution aussi complète que possible, et a passé un effort considérable pour elle. Lors du transfert de clsFmsgBox, frmFmsgBox, et modFmsgBox de FmsgBox.xlsm Classeur le code ci-dessous conduit à ce type de boîte de message peut être géré avec un niveau comparable, peu d'effort. Le Classeur ci-dessus fournit des exemples de code.
Le message est affiché dans un UserForm avec créé dynamiquement des étiquettes pour chaque formatage de chaîne de texte et de créer dynamiquement (jusqu'à 6) boutons de commande. La clé de la mise en forme des messages sont les propriétés de format .b("xxx") pour le gras .j'("xxx") pour l'italique et ainsi de suite, qui peuvent tous être imbriquées comme .b(.j'("xxx")) pour obtenir une italique,le texte en gras par exemple.
Alternativement, au lieu d'un concatenaed chaîne le texte du message peut être fourni avec RTF/HTML comme les balises de formatage de laquelle l'ouverture/fermeture de la Balise de caractères par défaut {}, mais peut aussi bien être changé en <>. À titre d'exemple: "{b}gras{/b) {i}italique{/i}." s'affiche: gras italique.
OriginalL'auteur Walter Rauschenberger
En œuvre de la chaîne.Format() - un peu overkill pour juste un msgbox, mais la réutilisabilité est assez infinies:
La Mise En Œuvre De La Chaîne.Format() en VB6
Quelque chose comme
msg = StringFormat("{0}\n{1,-10}{2:cMM/DD/YYYY}", msg, line, dateVal)
devrait fonctionner.Ou, mettre l'accent sur cette partie de la mise en œuvre:
Où
PADDING_CHAR
serait une "" les espaces et lesalignmentSpecifier
la quantité de remplissage dont vous avez besoin.En d'autres termes, le pad
line
à 20 caractères, puis ajouter la date:..fonctionne pour moi:
Mise à JOUR
Il semble que le problème n'est pas sur la chaîne de message lui-même, mais à cause de la police utilisée dans
MsgBox
: ce qui a fonctionné pour moi, travaillé parce que j'ai utilisé le immédiate volet pour obtenir des résultats rapides, et c'est affiché avec une police à chasse fixe (où tous les caractères ont la même largeur).Je vous suggère de créer un formulaire rapide avec une largeur fixe
Label
qui utilise une police "Courier New" ou "Consolas"... ou juste l'affichage de la date en face de la longueur variable de la partie.je ne suis pas sûr de son travail à la dernière ligne ....ou j'ai peut-être pas faire de rite, mais il donne le même résultat
yup fait que , même résultat.
Tiens, je vais ouvrir VBA & get it right 🙂
Je pense que mieux mettre une Date en face de la ligne !
OriginalL'auteur Mathieu Guindon
Je vous conseille d'utiliser un "userform". Titre de votre projet VBA dans l'éditeur VBA, cliquez droit et sélectionnez "insérer /userform" (ou utiliser le menu "insertion /objet userform")
À partir de là, vous verrez un certain nombre de contrôles ActiveX dans une "boîte à outils" (ou cliquez sur "affichage/boîte à outils") qui peuvent vous aider à construire ce que vous êtes après: on dirait que vous êtes après une "zone de liste", vous devriez le trouver dans la boîte à outils (passez la souris sur les éléments et les "listbox" apparaît dans une info-bulle)
Avec votre zone de liste sélectionné, vous pouvez définir le nombre de colonnes, plus la largeur des colonnes dans la fenêtre de propriétés (cliquez sur "afficher/propriétés de la fenêtre" si vous ne pouvez pas le voir)
Voir comment vous allez, beaucoup de bonnes infos sur le web sur VBA userform et zones de liste ou heureux de répondre à plus de questions.
Acclamations, Si
[MODIFIER] Viens de penser à quelque code que j'ai qui devrait vous obtenir a commencé (à partir d'un petit outil que j'ai écrit pour activer Office 2010 références à Office 2003 références): dans mon code principal module je viens de l':
Cette charge mon userform (appelé ufWorkbooks) dans la ligne ufWorkbooks.Spectacle. L'exécution passe à qui se font à ce point: lors de l'exécution de revient, une variable de la forme est vérifié pour voir si la résiliation a été poussé, alors vous pouvez voir que j'ai une fonction sur chaque élément de ma liste sur le formulaire appelé "lbWorkbooks". Le code dans mon userform ressemble à ceci:
Ici vous pouvez le voir, je suis à l'aide de différents "événements" pour déclencher certains morceaux de code. En bas, vous pouvez voir mon "FillWorkbooks" sous est d'abord de compensation de ma listbox (qui ive nommé lbWorkbooks) et puis je suis ajoutant des éléments. C'est bon pour une colonne de listes déroulantes. Dans votre cas, vous pourriez utiliser .AddItem ensuite .Liste(0, 1) = "whatever" (ligne 0 dans la zone de liste, colonne 1). Je ne me souviens pas si AddItem va ajouter une ligne vide au dessus pour vous de référence .Liste(0... ou si vous aurez besoin d'ajouter un compteur .AddItem ensuite .Liste(je...
Alternativement, vous pouvez utiliser la zone de liste.ListFillRange pour utiliser une plage de cellules dans votre feuille de calcul en tant que source de données pour votre listbox.
pas de soucis. RetailCoder la réponse semble bon: je voudrais encore vous recommandons userform pour quelque chose de plus compliqué, cependant, laissez-les outils natifs de faire le travail pour vous 😉
Comme il s'avère, si j'avais ces exigences exactes et nécessaires pour faire de ces choses line-up, j'aimerais créer mon propre msgbox/userform. Je voudrais utiliser une étiquette cependant, avec une police à chasse fixe pour assurez-vous que "1", "0" et "" (espace) ont la même largeur de sorte que la chose être alignés.
En Plus d'un moyen d'intégrer la dynamique de l'ASCII art 🙂
OriginalL'auteur Simon