我得到了这段代码,我一直在使用 Excel 2003,它模仿了不久前 Microsoft 网站上给出的解决方案。如何向形状的文本框架添加超过 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 版本进行不同的操作。但我找不到与这个问题相关的任何内容。这是一个已知的错误吗?有没有办法解决这个问题?
(在相关说明中,我也无法设置 .Characters(x,y).Font.Underline
= True。)
编辑 在我的特定示例中,上面的代码包含类似 With myWorksheet.Shapes(1)
的内容,其中形状是文本框。它里面已经有文本,我需要向其中附加 myTxt
(长度超过 255 个字符的 string
)。这段代码在 Excel 2003 上运行没有问题。我在其他地方看到过这个问题,但正在从 Stack Overflow 寻找关于它的正式声明...
最佳答案
我同意,你的代码在 2003 年可以工作,但在 2007 年就失败了。但令我惊讶的是,它居然还能工作。尝试引用 .Characters
集合中的“one more”字符应该抛出一个错误 - 如果你打破了上面的行,正如我认为你指出的那样在第 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
关于vba - Excel Shape.TextFrame.Characters.Insert 在 Excel 2007 上是否损坏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5483735/