gpt4 book ai didi

vba - 使用 VBA 动态创建书签

转载 作者:行者123 更新时间:2023-12-02 11:40:48 24 4
gpt4 key购买 nike

我正在尝试根据动态分配数组的长度将书签从 Excel 动态添加到 Word 文件中。然后我想将每个书签上的文本更改为数组中相应的值。

我这样做而不是仅仅使用静态书签的原因是程序在运行之前不知道数组将有多长或将包含哪些数据。我的思考过程是拥有一个第一次迭代将使用的“锚定”书签,然后根据需要在原始/上一个书签之后添加书签。

我下面的内容使用了 prevRange.End 但它会出错,因为这不是一个范围,但我觉得它可以让我明白我想要做什么。

我会使用 Bookmarks.InsertAfter,除非我尝试在 Word 中创建项目符号列表,这会扰乱格式并颠倒列表的顺序。

我更愿意找到一种动态执行此操作的方法,而不是使用大量书签进行强力方法,然后删除不需要的书签。

wrdRange、prevRange 和 wrdDoc 在程序的其他位置定义。

Dim Count As Integer
Dim CountM As Integer
Count = 1

Do While Clar(Count) <> "" 'Clar() is a dynamically allocated 1D array containing text
CountM = Count - 1
PrevBmarkName = "Clar" & CountM
BmarkName = "Clar" & Count 'Only bookmark in Word document to start with is Clar1
BmarkText = Clar(Count)

If Count <> 1 Then
Set prevRange = wrdDoc.Bookmarks(PrevBmarkName).Range
wrdDoc.Bookmarks.Add Name:="BmarkName", Range:=prevRange.End 'Faults here because prevRange.end isn't a range
Set wrdRange = wrdDoc.Bookmarks(BmarkName).Range
If Clar(Count + 1) = "" Then 'Used for the end of the list so there isn't a floating bullet point
wrdRange.Text = BmarkText
wrdDoc.Bookmarks.Add Name:=BmarkName, Range:=wrdRange
Else
wrdRange.Text = BmarkText & vbNewLine
wrdDoc.Bookmarks.Add Name:=BmarkName, Range:=wrdRange
End If
Else 'Functions normally through the first iteration, replaces Clar1 with clar(1) text
Set wrdRange = wrdDoc.Bookmarks(BmarkName).Range
wrdRange.Text = BmarkText & vbNewLine
wrdDoc.Bookmarks.Add Name:=BmarkName, Range:=wrdRange
End If

Count = Count + 1
CountM = CountM + 1
Loop

最佳答案

您应该能够使用 SetRange 方法,如下所示:

    Set prevRange = wrdDoc.Bookmarks(PrevBmarkName).Range
Set newRange = prevRange 'Have to set the range to something initially
newRange.SetRange prevRange.End, prevRange.End
ActiveDocument.Bookmarks.Add "BmarkName", newRange

关于vba - 使用 VBA 动态创建书签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30517310/

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