使用Characters.Font格式化大于255的字符

时间:2013-09-19 10:50:43

标签: excel vba excel-vba

我最近发布了一个关于如何从输入框格式化文本的第一部分并将其附加到单元格中的现有文本的问题。

例如,如果我有一个单元格...这个

23/08/2013:你好,今天你好吗

24/08/2013:客户今天感觉很好

然后双击单元格,我得到一个输入框以输入注释。我接受评论..在VBA代码中添加今天的日期,然后使用此附加并将其格式化为现有代码

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

所以基本上这需要注释...在评论中添加日期,然后添加一个新行,然后将其附加到现有字符并将日期格式化为粗体。

这一切都正常,直到我超过255个字符,这是帮助我在最后一个解决方案中警告的海报,但我认为它试图插入一个评论> 255而不是整个单元格长度。

我如何解决这个问题...因为我可以在单元格中添加多个注释

问米克

1 个答案:

答案 0 :(得分:0)

在SO here上讨论了类似的问题。根据该线程,问题是InputBox方法最多只允许255个字符。我自己也证实了这一点。

该线程还建议使用userform。这是最好的选择,特别是考虑在单行输入框中输入超过255个字符可能会让人感到沮丧。例如,您将如何查看已键入的内容?

我可以想到一些不那么光鲜的选择:

让用户直接在另一个单元格中输入注释 - 例如,选择(and I hate using select!)不同的单元格,并让用户在其中放置他们想要的任何注释。然后运行代码将该单元格的值附加到目标单元格。

更疯狂的是调用外部程序,例如记事本(or the Mac counterpart),保存并导入该信息以附加到目标单元格。

所有这些选项都只是InputBox限制的解决方法。也许有一些更有经验的人会想到更好的选择?


<强>更新
此外,使用.Characters添加超过255个字符的任何内容似乎都存在问题。我怀疑这是因为.Characters方法(不是属性)设置为处理textframe,而不是单元格值。文本框架实际上是一个与形状一起使用的对象。有趣的是你在一个范围内使用它来编辑它的价值 - 很酷的技巧,由another question you've asked提供。

解决方案是替换单元格值。然后,您可以.Characters作为对象使用format portions of the cell value,因为我认为您已经尝试过your other question