将文本变为斜体后,使 Word 的光标类型(或更多文本插入)变为非斜体

发布于 2024-07-09 13:35:05 字数 993 浏览 4 评论 0原文

当我执行以下代码时:

Dim italicSaveRange As Word.Range
Dim savedItalic As Variant
Dim someRange As Word.Range

Set italicSaveRange = someRange.Duplicate
italicSaveRange.Collapse (WdCollapseEnd)
savedItalic = italicSaveRange.Italic
someRange.Italic = True
italicSaveRange.Italic = savedItalic

我预计在光标处输入的任何文本或插入到 someRange a la: 中的任何文本

someRange.InsertAfter "Lorem ipsum..."

都不会是斜体的(当然,假设之前在此位置的格式不是斜体的。 ) 但它是。 帮助。


根据您的建议,我现在有以下内容,该内容似乎有效。 这可能是一个脆弱的解决方案,具体取决于同时移动的内容(例如,尝试在 Word 中键入一些斜体文本,按 ctrl-i 准备使用非斜体,但然后将光标向左移动到斜体,然后向右移动再次出现;光标正在插入斜体文本...),但出于我的目的,我在其他地方添加文本(但在代码的不同级别,以便我无法访问要在此级别插入的文本),这可能会起作用。 谢谢。

Set italicSaveRange = someRange.Duplicate
italicSaveRange.Collapse (WdCollapseEnd)
savedItalic = italicSaveRange.Italic
someRange.Italic = True
italicSaveRange.InsertAfter SP
italicSaveRange.Characters(1).Italic = savedItalic
italicSaveRange.Characters(1).Delete

When I perform the following code:

Dim italicSaveRange As Word.Range
Dim savedItalic As Variant
Dim someRange As Word.Range

Set italicSaveRange = someRange.Duplicate
italicSaveRange.Collapse (WdCollapseEnd)
savedItalic = italicSaveRange.Italic
someRange.Italic = True
italicSaveRange.Italic = savedItalic

I expected that any text entered at the cursor or inserted into someRange a la:

someRange.InsertAfter "Lorem ipsum..."

would not be italic (assuming that the formatting was not italic at this position previously, of course.) But it is. Help.


Based on your suggestion I now have the following, which appears to be working. It may be a fragile solution, depending on what gets moved around in the meantime (e.g., try typing some italic text into Word, ctrl-i to prepare to use non-italic, but then move the cursor left into the italics and then right out again; the cursor is inserting italic text...), but for my purposes where I am adding text elsewhere (but at a different level of the code so that I cannot access the text to insert at this level) this will probably work. Thank you.

Set italicSaveRange = someRange.Duplicate
italicSaveRange.Collapse (WdCollapseEnd)
savedItalic = italicSaveRange.Italic
someRange.Italic = True
italicSaveRange.InsertAfter SP
italicSaveRange.Characters(1).Italic = savedItalic
italicSaveRange.Characters(1).Delete

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

墨洒年华 2024-07-16 13:35:05

当您将文本插入 Word Range 对象时,该文本将始终(据我所知)继承先前文本运行的格式。

要解决此问题,您应该在插入文本后应用格式,即

Dim italicSaveRange As Word.Range
Dim savedItalic As Variant
Dim someRange As Word.Range

Set italicSaveRange = someRange.Duplicate
italicSaveRange.Collapse (WdCollapseEnd)
savedItalic = italicSaveRange.Italic
someRange.Italic = True
italicSaveRange.Text = "Lorem ipsum..."
italicSaveRange.Italic = savedItalic

如果您必须稍后插入文本,您可能需要插入一些稍后替换的虚拟文本。

When you insert text into a Word Range object, this text will always (afaik) inherit the formatting of the previous text run.

To work around you should apply the formatting after you inserted the text, i.e.

Dim italicSaveRange As Word.Range
Dim savedItalic As Variant
Dim someRange As Word.Range

Set italicSaveRange = someRange.Duplicate
italicSaveRange.Collapse (WdCollapseEnd)
savedItalic = italicSaveRange.Italic
someRange.Italic = True
italicSaveRange.Text = "Lorem ipsum..."
italicSaveRange.Italic = savedItalic

If you must insert the text later you could need to insert some dummy text which you replace later.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文