我已经使用了Excel 2003这段代码,它模仿了微软网站上的解决方案。如何在形状的文本框架中添加超过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)
处的插入将删除最终字符。现在我已经内置了逻辑,可以根据您使用的Excel版本进行不同的操作。但我找不到与此问题有关的任何内容。这是一个已知的bug吗?有没有办法解决这个问题?
(在相关的说明中,我也无法设置.Characters(x,y).Font.Underline
= True。)
编辑在我的特定示例中,上面的代码包含类似With myWorksheet.Shapes(1)
的内容,其中形状是文本框。它内部已有文字,我需要将myTxt
(长度超过255个字符的string
)附加到其中。这段代码在Excel 2003上没有问题。我在其他地方看到过这个问题,但是从Stack Overflow中寻找一个正式的声明......
答案 0 :(得分:3)
我同意,您的代码在2003年有效,但在2007年失败。但令我惊讶的是,它完全有效。试图在.Characters
集合中引用“再一个”字符会抛出错误 - 如果你在上面划分你的行,我认为你在第1点指出,你会发现它具体是.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