在Excel 2007中,Excel Shape.TextFrame.Characters.Insert是否被破坏?

我已经得到了这段代码,我一直在使用Excel 2003,它模仿微软网站上提供的解决scheme。 如何添加超过255个字符到形状的文本框架:

For i = 0 To Int(Len(myTxt) / 255) .Characters(.Characters.Count + 1).Insert Mid(myTxt, (i * 255) + 1, 255) Next i 

这只是在Excel 2007下不起作用。有两个问题。

  1. 插入不能插入在字段的末尾,它插入在现有的字符。 所以.Characters(.Character.Count).Insert将工作,即使它不是我想要做的。
  2. 它的操作是覆盖,而不是插入。 无论我申请插入它覆盖现有的字符。 所以(.Character.Count)处的Insert将删除最后一个字符。

现在我已经build立了逻辑,根据您使用的Excel版本的不同进行操作。 但是我找不到与这个问题有关的任何事情。 这是一个已知的错误? 有没有办法解决这个问题?

(在相关说明中,我无法设置.Characters(x,y).Font.Underline = True。)

编辑在我特别的例子中,上面的代码包含了类似于With myWorksheet.Shapes(1)形状是一个文本框。 它里面已经有文本了,我需要附加myTxt (一个长度超过255个字符的string )。 这个代码在Excel 2003上没有任何问题。我已经看到这个问题在其他地方引用,但从堆栈溢出寻找它的正式声明…

我同意,你的代码在2003年工作,但在2007年失败。然而,令我惊讶的是,它是有效的。 尝试在.Characters集合中引用“one more”字符应该会引发一个错误 – 如果你把上面的行分开了,就像我想在第一点中指出的那样,你会发现它是特殊的.Characters(.Characters.Count + 1) 。 这不是失败的方法,它是不存在的成员,这对我来说似乎是正确的。

这是2003年和2007年所需的代码。

 Public Sub Loop_InsertTest() Dim MyWks As Excel.Worksheet Dim MyTxt As Shape Dim MyFrme As TextFrame Dim i As Long Const StartText As String = "This is a very, very, very, very, very, very, very, very, very, very, very, " _ & "very, very, very, very, very, very, very, very, very, very, very, very, very, very, very, " _ & "very, very, very, very, very, very, very, very, very, very, long piece of text." Const MaxIterations As Long = 1000 Debug.Print Len(StartText) Set MyWks = ThisWorkbook.Worksheets(1) Set MyTxt = MyWks.Shapes.AddTextbox(msoTextOrientationHorizontal, 10, 10, 1000, 1000) Set MyFrme = MyTxt.TextFrame 'Debug.Print TypeName(MyTxt), MyTxt.Name' MyFrme.Characters.Text = StartText MyFrme.AutoSize = True For i = 1 To MaxIterations Insert_ThisText MyFrme, " Now it's even longer." Next i End Sub Private Sub Insert_ThisText(pFrme As TextFrame, _ pstrText As String) Dim strRight As String Dim i As Long With pFrme For i = 0 To Int(Len(pstrText) / 254) strRight = .Characters(.Characters.Count).Text .Characters(.Characters.Count).Insert strRight & Mid(pstrText, (i * 254) + 1, 254) 'Debug.Print Len(pstrText), .Characters.Count' Next i End With End Sub