gpt4 book ai didi

Excel Vba 转 Word : How to write a pagenumber into a textframe?

转载 作者:行者123 更新时间:2023-12-04 20:31:14 25 4
gpt4 key购买 nike

我正在编写一个 Excel VBA 宏,它将文本复制到 Word for Windows 文件中,并且
稍后为其添加格式。

它使用包含 Logo 的 .dotx 模板。左下角是一个带有序列号的文本框。序列号的文本被写入
垂直(从底部向上)。

通过反复试验,我设法将一个序列号写入文本框
使用:

serialnumber = "abc1x"
wdoc.Sections(1).Headers(wdHeaderFooterEvenPages).Shapes(2).TextFrame.TextRange.text 
= serialnumber

所以我找到了正确的对象来写入。
现在我在每一页上都得到相同的序列号。

我的目标是在页面上获得越来越多的序列号:
序列号具有以下形状:
  • 在第 1 页:       abc1x
  • 第 2 页:        abc2x
  • 第 3 页:        abc3x
  • ...
  • 第 10 页:     abc10x

  • 它是由 2 个字符串包围的页码。

    在另一个项目中,我做了类似的事情。
    我用以下脚本写了“第 1 页,共 10 页”等:
        Dim uRange As Object
        Dim uneven As Object

        Set uneven = wdoc.Sections(1).Footers(wdHeaderFooterPrimary)
        Set uRange = wdoc.Sections(1).Footers(wdHeaderFooterPrimary).Range
        uRange.Delete

        uneven.Range.InsertAfter "Page "
        uRange.SetRange Start:=uneven.Range.End + 1, End:=uneven.Range.End + 1
        wdoc.Sections(1).Footers(wdHeaderFooterPrimary).Range.Fields.Add 
    Range:=uRange, Type:=wdFieldEmpty, text:= _
        "PAGE  \* Arabic ", PreserveFormatting:=True

        uRange.SetRange Start:=uneven.Range.End + 1, End:=uneven.Range.End + 1
        uneven.Range.InsertAfter " of "
        uRange.SetRange Start:=uneven.Range.End + 1, End:=uneven.Range.End + 1

        wdoc.Sections(1).Footers(wdHeaderFooterPrimary).Range.Fields.Add 
    Range:=uRange, Type:=wdFieldEmpty, text:= _
         "NUMPAGES  \* Arabic ", PreserveFormatting:=True

    如何在 TextBox 的 Page 字段周围插入文本?

    (旁注:范围和范围文本对象有什么区别?)

    评论:
    我将不得不将解决方案分别应用于均匀和不均匀的页面。
    这不构成问题。
    使事情变得更加困难:
    我有义务保留文本字段,因为它来自
    企业形象的人。

    最佳答案

    有很多方法可以解决这个问题。所有都涉及“折叠”目标Range在插入下一件事(文本或域代码)之前。

    前段时间,我编写了一组通用函数,这样我就可以轻松地插入文本和域代码的任意组合,而不必为每个组合“调整”。

    首先定义Range目的。如果您可能想要保留任何内容,请将其折叠。手续InsertNewTextInsertNewField拿下目标Range和要插入的文本,分别是要插入的字段的字段代码。 Range 的崩溃在这些过程中完成并传递回调用过程以进行下一步。

    Sub InsertTextAndFields()
    Dim rngContent As Word.Range

    Set rngContent = wdoc.Sections(1).Headers( _
    wdHeaderFooterEvenPages).Shapes(2).TextFrame.TextRange
    rngContent.Collapse wdCollapseEnd

    Set rngContent = InsertNewText(rngContent, "abc")
    Set rngContent = InsertAField(rngContent, "Page")
    Set rngContent = InsertNewText(rngContent, "x")

    End Sub

    Function InsertNewText(rng As word.Range, newText As String) As word.Range
    rng.Text = newText
    rng.Collapse wdCollapseEnd
    Set InsertNewText = rng
    End Function

    Function InsertAField(rng As word.Range, _
    fieldText As String) As word.Range

    Dim fld As word.Field
    Dim rngField As word.Range

    Set fld = rng.Document.Fields.Add(Range:=rng, _
    Text:=fieldText, PreserveFormatting:=False)

    Set rngField = fld.result
    rngField.Collapse wdCollapseEnd
    rngField.MoveStart wdCharacter, 1
    Set InsertAField = rngField
    End Function

    关于Excel Vba 转 Word : How to write a pagenumber into a textframe?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50334181/

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