2017-04-22 7 views
0

Je codage d'une fonction VBA pour fusionner deux cellules, puis sélectionnez le texte de la cellule 2 avec gras mise en formeVBA fusionner des cellules et ** texte ** Gras de deuxième cellule

La fusion va bien
La appel à sub va bien
mais le format de texte n'est pas appliqué

Je crois qu'il pourrait être causé par la sous exécution avant que la cellule est remplie avec la chaîne - mais c'est pur devinettes - c'est mon premier script VBA

Function boldIt(navn As String, ekstra As String) 

Dim ln1 As Integer 
Dim ln2 As Integer 
Dim st1 As String 

ln1 = Len(navn) 
ln2 = Len(navn) + Len(ekstra) 

If (ln1 = ln2) Then 
    boldIt = navn 
Else 
    boldIt = navn & " - " & ekstra 
    boldTxt ln1, ln2 
End If 

End Function 

Public Sub boldTxt(startPos As Integer, charCount As Integer) 
    With ActiveCell.Characters(Start:=startPos, Length:=charCount).Font 
     .FontStyle = "Bold" 
    End With 
End Sub 
+1

Cela ne peut pas fonctionner. La mise en forme sélective ne peut fonctionner que sur une chaîne de texte stockée dans une cellule. Avant la fin de la fonction, il n'y a pas de chaîne de texte dans la cellule. Après la fin, il existe une formule dans la cellule (qui renvoie une chaîne de texte), ** NOT ** une chaîne de texte brut. –

Répondre

0

Cette boucle sous à travers les colonnes, prend les cordes des deux cellules, combine les chaînes et les ajouter à la cellule cible, alors que la mise en gras le texte de la deuxième cellule

Merci à @Jeeped pour les pointeurs!

Sub boldIt() 
Dim pos_bold As Integer 
Dim celltxt As String 

For i = 2 To 200000 
    ' first cell will always be populated - if not - exit 
    If (Range("Plan!E" & i).Value = "") Then Exit For 

    ' if second cell is empty - take only first cell as normal txt 
    If (Range("Plan!F" & i).Value = "") Then 
     Range("Kalender!F" & i).Value = Range("Plan!E" & i).Value 
    Else 
     ' calculate start of bold text 
     pos_bold = Len(Range("Plan!E" & i).Value) + 1 

     ' create the string 
     celltxt = Range("Plan!E" & i).Value & " - " & Range("Plan!F" & i).Value 
     ' add string to field and add bold to last part 
     With Worksheets("Kalender").Range("F" & i) 
      .Value = celltxt 
      .Characters(pos_bold).Font.Bold = True 
     End With 
    End If 
Next i 
End Sub 
1

Je pense que je voudrais simplement exécuter deux sous-marins; la fonction ne retourne rien.

Option Explicit 

Sub boldIt() 
    Dim secondOne As String 
    With Selection 
     secondOne = .Cells(2).Value2 
     Application.DisplayAlerts = False 
     .Merge 
     Application.DisplayAlerts = True 
     .Cells(1) = .Cells(1).Value2 & secondOne 
     boldTxt .Cells(1), Len(.Cells(1).Value2) - Len(secondOne) + 1, Len(secondOne) 
    End With 
End Sub 

Public Sub boldTxt(rng As Range, startPos As Integer, charCount As Integer) 
    With rng.Characters(Start:=startPos, Length:=charCount).Font 
     .FontStyle = "Bold" 
    End With 
End Sub 
+0

La fonction fonctionne bien et le champ est rempli comme il se doit - seulement il ne met pas en gras le texte (essayé versions multiples sans le Sub). –

+0

Je ne crois pas que vous compreniez * la fonction ne retourne rien *. Les fonctions sont censées renvoyer une valeur; il ne sert à rien d'utiliser une fonction à la place d'un sub s'il effectue simplement des actions sans rien retourner. Avec ça au milieu, j'ai utilisé deux sous-marins. – Jeeped

+0

Ce que vous faites fonctionne :-) Cependant, je voudrais garder les cellules d'origine et ajouter les données à une nouvelle cellule - en boucle à travers toute la colonne –