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

标签 vba excel excel-2007 excel-2003

我得到了这段代码,我一直在使用 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/

相关文章:

vba - . 未选择工作表时复制方法失败

vba - 计算特定工作表中的行数

vba - 将 Type 更改为 Class 会导致 ByRef 参数执行 ByVal

excel - 从 Excel VBA 在 Word 中编写项目符号列表

VBA中的Excel公式

excel - excel可以清理自由文本用户输入吗?

excel - 根据 Excel 2007 中的库存历史记录的已售产品总值(value)

xml - 如何将简单的重复数据从 excel 导出为 xml?

c# - 如何在 C# 程序中使用特定版本的 Excel

通过 VBA 发送到 Google 搜索时无法识别带有特殊字母的 Excel 单元格值