在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下不起作用。有两个问题。
- 插入不能插入在字段的末尾,它插入在现有的字符。 所以
.Characters(.Character.Count).Insert
将工作,即使它不是我想要做的。 - 它的操作是覆盖,而不是插入。 无论我申请插入它覆盖现有的字符。 所以
(.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