Formulation VBA sur des caractères de plus de 255 utilisant Characters.Font

J'ai récemment posté une question sur la façon de formater la première partie du text à partir d'une boîte de saisie et de l'append au text existant dans une cellule.

Par exemple, si j'ai une cellule avec … ceci

23/08/2013: Bonjour, comment allez-vous aujourd'hui?

24/08/2013: le client se sent bien aujourd'hui

et je double-click la cellule, je reçois une boîte de saisie pour entrer un commentaire. Je prends le commentaire … ajoutez la date d'aujourd'hui dans le code VBA, puis ajoutez-le et formatez-le au code existant à l'aide de ce

If Target.Column = NOTES_COL Then 'Add a note lngPos = Len(Target.Text) strNote = InputBox(Prompt:="Enter Note", _ Title:="Notes", Default:="") If (Len(Trim(strNote)) > 0) Then If Target.Value = "" Then Target.Font.Bold = False newVal = Date & ": " & strNote Else newVal = Chr(10) & Date & ": " & strNote End If Target.Characters(Start:=lngPos + 1).Text = newVal Target.Characters(Start:=lngPos + 1, Length:=11).Font.Bold = True End If End If 

Donc, fondamentalement, cela prend un commentaire … ajoute une date au commentaire et une nouvelle ligne, puis l'ajoute aux caractères existants et les formats de la date Bold.

Cela fonctionne bien jusqu'à ce que je dépasse 255 caractères, ce qui m'a averti de l'affiche qui m'a aidé dans la dernière solution, mais je pensais qu'il essayait d'insert un commentaire> 255 et pas la longueur totale de la cellule.

Comment puis-je contourner cela … car je peux append de nombreux commentaires dans une cellule

Mick

Un problème similaire a été discuté sur SO ici . Selon ce thread, le problème est que la méthode InputBox ne permet qu'un maximum de 255 caractères. Je l'ai vérifié moi-même.

Ce thread a également suggéré l'utilisation d'un formulaire d'user. C'est la meilleure option, surtout si vous envisagez d'entrer plus de 255 caractères dans une boîte de saisie d'une ligne, vous pouvez probablement créer une frustration. Comment allez-vous passer en revue ce que vous avez déjà tapé, par exemple?

Il y a quelques options less polies que je peux penser:

Demandez aux users d'entrer des commentaires directement dans une autre cellule – par exemple, select ( et je déteste utiliser select! ) Une cellule différente, et laissez l'user mettre les notes qu'il désire là-bas. Ensuite, exécutez le code pour append la valeur de cette cellule à votre cellule cible.

Quelque chose d'encore plus fou serait d'appeler un programme extérieur, tel que le bloc-notes ( ou la contrepartie Mac ), save et importer ces informations pour append à la cellule cible.

Toutes ces options ne sont que des work-around pour la limite InputBox . Peut-être y a-t-il de meilleures solutions pour lesquelles une personne plus expérimentée peut penser?


Mettre à jour
En outre, il semble qu'il y ait un problème à utiliser. Les .Characters à append à plus de 255 caractères. Je soupçonne que c'est parce que la méthode .Characters (non propriété) est configurée pour fonctionner sur une structure de text , pas une valeur de cellule. Un textframe est en fait un object qui fonctionne avec des forms. Il est intéressant que vous l'utilisiez ici sur une plage pour modifier sa valeur, une astuce géniale, grâce à une autre question que vous avez posée .

Une solution serait de replace la valeur de la cellule. Vous pouvez ensuite utiliser .Characters comme object, formater des parties de la valeur de la cellule , car je pense que vous avez déjà essayé de faire dans votre autre question .