2017-10-11 48 views
0

我想知道是否有方法来指定单元格中的哪些文本为粗体而不知道字符的开始或长度。我需要做的是在单个单元格内的单独连续行上输入多个字符串(某些用户输入)的文本,同时使预定的字符串(每隔一行)变为粗体。在向单个单元格添加多个字符串时指定某些字符串为粗体

我正在使用chr(10)将多个文本框中的自由文本编译到不同行的同一单元格中。例如:

CmpTxt = myTxt1 & Chr(10) & userTxtBox1.value 
CmpTxt = CmpTxt & Chr(10) & myTxt2 & Chr(10) & userTxtBox2.value 

activesheet.range("A1").value = CmpTxt 

如果每个myTxt被加粗,随后在同一小区,A1其下的用户的文本。

My first line of text posed as a question 
Users' corresponding answer 
My second line of text posed as a question 
Users' second corresponding answer 

在这里,我可以用.characters使myTxt1大胆的,但因为我不知道第二行/用户文本有多长,我不知道在哪里,以便开始大胆第三行是myTxt2

有没有办法预先将myTxt的字体添加到字符串?如果不是,有办法到a)识别单元格中的每行文本,就好像单元格内的行或b)找到myTxt或文字开始的特定字符串,这些字符串的长度和在将文本添加到A1之后,只将这些设置为粗体?

+0

拆分成Chr(10)上的变体数组,然后循环遍历数组,从lbound(arr)+1到ubound(arr)第2步。 – Jeeped

回答

1

这里是一个简单地利用Chr(10)的字符,以确定其中的溶液开始和结束的粗体:

Sub HighLightIt() 
    Dim rng As Range 
    Set rng = ActiveSheet.Range("A1") 
    Dim p1 As Long 
    Dim p2 As Long 
    Do 
     'point to the end of the question 
     p2 = InStr(p1 + 1, rng.Value, vbLf) 
     If p2 = 0 Then 
      Exit Do 
     End If 
     With rng.Characters(Start:=p1 + 1, Length:=p2 - p1).Font 
      .Bold = True 
     End With 
     'point to the end of the user input 
     p1 = InStr(p2 + 1, rng.Value, vbLf) 
     If p1 = 0 Then 
      Exit Do 
     End If 
    Loop 
End Sub 

这将如果任何问题失败,或任何问题的答案,包括换行。您可能不希望问题或答案允许换行,因此在将问题和答案存储到合并单元格时,您可能会考虑使用Replace(userTxtBox1.value, vbLf, "|")(或类似)。

相关问题