12
votes

VBA Excel - Word Wrap

Je crée un petit morceau de code VBA avec une formule spécifique, mais il dispose d'un couple de relevés si , dont l'un est originaire d'une chaîne de double ligne (avec VBNewline < / code>) La question est que je ne peux pas voir le texte.

alors je voulais le work le work, mais chaque fois que je définis le ActiveCell.wraptext = true , rien ne se passe.

J'ai vérifié avec une boîte de message. Je définis le wraptext sur true, je retourne la valeur de la propriété avec la messageriebonnette pour confirmer, et c'est toujours faux.

On m'a dit d'utiliser ActiveCell.rows.Autofit aussi, mais autofit ne fait rien si le texte n'est pas emballé.

Une idée de ce que je pourrais faire mal ici?


1 commentaires

Veuillez: moins d'argot et de mots de remplissage, des échantillons de code plus bien formatés. Cette question est assez difficile à lire et à comprendre, comme. Whassup wit dat?


6 Réponses :


17
votes

Essayez:

Sub WrapandFit()

    ActiveCell.WrapText = True
    ActiveCell.EntireRow.AutoFit

End Sub


2 commentaires

Je m'excuse, essayait seulement d'être poli depuis que l'anglais n'est pas ma langue principale. Quoi qu'il en soit, le problème se poursuit, si je place ce code dans une macro, cela fonctionne, dans la fonction qu'il ne le fait pas. (Également désolé, mais je ne suis pas très familier avec le débordement de la pile pour le moment ... pense que j'ai placé la chose anglaise commentaire au mauvais endroit.)


Si la feuille de calcul ne contient pas de données intensives, vous pouvez modifier la cellule ad a - sur votre classeur. Chaque fois qu'une cellule est modifiée, il peut appeler le code de macro pour mettre à jour la hauteur ActiveCell. Notez que si cette feuille de calcul est de quelque manière que ce soit, cela va être très lent!



3
votes

UDFS (procédures utilisant la fonction mot-clé) uniquement les valeurs de retour. Ils ne peuvent pas changer d'autres parties du modèle d'objet Excel, comme le formatage des cellules. Seules les sous-programmes (procédures qui utilisent le mot-clé SUB) peuvent faire cela.

Vous devez avoir vos cellules correctement formatées correctement avant de saisir votre UDF. Ou vous pouvez utiliser un événement de changement de feuille de calcul sous pour les formater après le fait.


0 commentaires

1
votes

Désactiver / sur Word Wrand pour une ligne de feuille entière peut être effectué par code VB ci-dessous: Si la première ligne est définie true, Excel hérite de cette propriété pour une feuille entière, sauf si vous ne l'éteigniez pas spécifiquement à l'aide d'un autre code.

MyWorkSheet.Rows(8).WrapText = False


0 commentaires

1
votes

Je soupçonne que vous essayez d'envelopper du texte dans des cellules fusionnées. Si oui, vous ne pouvez pas simplement appeler: xxx pré>

à la place, vous devez simuler les opérations d'emballage. J'ai trouvé le code de http: // blog .ContexTures.com / Archives / 2012/06/07 / AutoFIT-Fusion-Cell-Row-Hauteur / m'a aidé l'année dernière. P>

Private Sub Worksheet_Change(ByVal Target As Range)
Dim MergeWidth As Single
Dim cM As Range
Dim AutoFitRng As Range
Dim CWidth As Double
Dim NewRowHt As Double
Dim str01 As String
str01 = "OrderNote"

  If Not Intersect(Target, Range(str01)) Is Nothing Then
    Application.ScreenUpdating = False
    On Error Resume Next
    Set AutoFitRng = Range(Range(str01).MergeArea.Address)

    With AutoFitRng
      .MergeCells = False
      CWidth = .Cells(1).ColumnWidth
      MergeWidth = 0
      For Each cM In AutoFitRng
          cM.WrapText = True
          MergeWidth = cM.ColumnWidth + MergeWidth
      Next
      'small adjustment to temporary width
      MergeWidth = MergeWidth + AutoFitRng.Cells.Count * 0.66
      .Cells(1).ColumnWidth = MergeWidth
      .EntireRow.AutoFit
      NewRowHt = .RowHeight
      .Cells(1).ColumnWidth = CWidth
      .MergeCells = True
      .RowHeight = NewRowHt
    End With
    Application.ScreenUpdating = True
  End If

End Sub


1 commentaires

J'ai eu cette question avec la hauteur de la ligne et je ne me suis pas réalisée qu'il était dû aux cellules fusionnées. Cela a résolu mon problème!



6
votes

Pour moi, le code ci-dessous a fonctionné. (SEULEMENT défini pour modifier la ligne d'en-tête (changement))

ActiveSheet.Range("A1:R1").Select
With Selection
    .WrapText = True
End With


0 commentaires

0
votes

Cela peut ne pas être exactement ce que l'OP avait à l'esprit, mais je me suis dit que je partage mon VBA Retour à la ligne strong> fonction depuis que je ne pouvais pas trouver quoi que ce soit sur le web pour faire ce que je voulais.

Cet insert de fonction CR kbd> strong> + LF kbd> 's dans la chaîne afin de l'envelopper, de sorte que le mot est une pellicule maintenue si le texte est copié dans une autre application, à base de texte ou autre . P>

Function wrapText(strIn As String, Optional maxLen As Long = 110) As String
    Dim p As Long: wrapText = strIn
    Do
        p = InStrRev(wrapText, " ", p + maxLen) - 1
        wrapText = Left(wrapText,p) & vbCrLf & Right(wrapText, Len(wrapText)-p-1)
        Debug.Print Mid(Replace(wrapText, vbCrLf, "||"), p - 20)
        'Stop
    Loop While p + maxLen < Len(wrapText)
End Function


0 commentaires