gpt4 book ai didi

vba - Excel Shape.TextFrame.Characters.Insert 在 Excel 2007 上是否损坏?

转载 作者:行者123 更新时间:2023-12-03 03:06:06 28 4
gpt4 key购买 nike

我得到了这段代码,我一直在使用 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 下不起作用。有两个问题。

  1. 插入无法在字段末尾插入,它已在现有字符处插入。因此 .Characters(.Character.Count).Insert 会起作用,即使这不是我想要做的。
  2. 它的操作方式是覆盖,而不是插入。无论我在何处应用“插入”,它都会覆盖现有字符。因此,在 (.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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com