Word 2007 VBA插入文本

时间:2009-11-16 02:24:55

标签: text ms-word word-vba

我想插入带有自定义格式的文本,然后将字体样式更改回代码运行之前的样式。

Dim myText As String
Dim oldFont As Object
'Save old font    
Set oldFont = Selection.Font 

'Insert text with custom font
myText = "CUSTOM STRING"
Selection.Font.Name = "Comic Sans MS"
Selection.Font.Size = 26
Selection.Font.Bold = True
Selection.TypeText (myText)

'Revert font back to original
Set Selection.Font = oldFont

任何人都可以解释一种方法来做我正在寻找的事情吗?

编辑:我应该更具体一点。如果我正在输入文本,我会在主页选项卡上显示我正在输入的某种格式(例如,Comic Sans Ms,Size 22,Bold)。当我使用代码插入文本时,这会更改我正在输入的格式,因此如果我继续键入它将是NEW字体类型,而不是Comic Sans MS。我试图这样做,如果我在通过VBA代码插入文本后继续输入,它将保留我原来的格式。

6 个答案:

答案 0 :(得分:4)

一个简单的解决方案是存储您要更改的所有属性,并在最后重置它们:

Dim myText As String
Dim oldFont As String
Dim oldSize As Integer
Dim oldBold As Boolean

'Save old font
oldFont = Selection.Font.Name
oldSize = Selection.Font.Size
oldBold = Selection.Font.Bold

'Insert text with custom font
myText = "CUSTOM STRING"
Selection.Font.Name = "Comic Sans MS"
Selection.Font.Size = 26
Selection.Font.Bold = True
Selection.TypeText (myText)

'Revert font back to original
Selection.Font.Name = oldFont
Selection.Font.Bold = oldBold
Selection.Font.Size = oldSize

答案 1 :(得分:2)

我在编写Word宏时发现有用的技巧只是复制我在使用Word GUI时所做的事情。当我想粘贴格式化文本但保留当前格式时,我键入一个空格,粘贴在空格前面的文本然后删除空格。由于空间具有我的原始格式,所以我将其取回。

所以,这样做是一个宏:

'Type a space
Selection.TypeText Text:=" "

'Move Cursor back one character
Selection.MoveLeft Unit:=wdCharacter, Count:=1

'Insert text with custom font
myText = "CUSTOM STRING"
Selection.Font.Name = "Comic Sans MS"
Selection.Font.Size = 26
Selection.Font.Bold = True
Selection.TypeText (myText)

'Move Cursor forward one character
Selection.MoveRight Unit:=wdCharacter, Count:=1

'Delete the space
Selection.TypeBackspace

这将保留您最初拥有的文本的任何属性。

答案 2 :(得分:0)

我无法确切地知道你在那里尝试做什么,但Selection.TypeText会将选择内容折叠到插入点,所以当你尝试“实际”时,你实际上没有选择任何字符。恢复字体“。您需要重新选择文本,或使用Range对象而不是选择来标识要受影响的文本。

您在该行收到错误的原因:

Set Selection.Font = oldFont

...是因为 - 异常且反常地 - 在分配给Set属性时不应使用Font关键字。该分配不是存储对Font对象的引用,而是仅应用指定字体的属性。

这是一个非常令人困惑的API设计,因为 需要在读取 Set时使用Font关键字而变得更加混乱属性,因为确实分配对Font对象的引用!

这就是为什么你的代码不起作用的另一个原因 - 你正在引用一个Font对象然后你修改它,你的引用指向同一个Font对象现在改变了。

您实际需要做的是创建一个新的Font对象来存储原始字体详细信息,如下所示:

Set oldFont = Selection.Font.Duplicate

答案 3 :(得分:0)

Selection.Font对象是只读的。

这意味着无法恢复一个作业中的所有设置。由于您只更改了一些属性,因此最简单的解决方案是保存每个单独的值,然后像stephan建议的那样将其恢复。

即。保存属性:

oldFontName = Selection.Font.Name
oldFontSize = Selection.Font.Size
oldFontBold = Selection.Font.Bold

你是否填充然后恢复属性:

Selection.Font.Name = oldFontName
Selection.Font.Size = oldFontSize
Selection.Font.Bold = oldFontBold

答案 4 :(得分:0)

看看,这段代码是否给你足够的提示。

CopyFormat通过从当前光标向左移动来获取现有格式 PasteFormat将其应用于角色&从那时起,原始格式(已复制)生效。

Selection.MoveLeft unit:=wdWord, Count:=1
Selection.EndKey Extend:=wdExtend

Selection.CopyFormat
Selection.MoveRight unit:=wdWord

'* New text and new formatting
Selection.Font.Bold = True
Selection.Font.Italic = True
Selection.Font.Size = 28
Selection.TypeText "hello world"

Selection.TypeText " "
Selection.MoveLeft unit:=wdCharacter, Count:=1
Selection.EndKey Extend:=wdExtend
Selection.PasteFormat


Selection.TypeText "original formatting here"

答案 5 :(得分:0)

Sub No_Format()
'
' No_Format Macro
'
'
    Selection.PasteSpecial Link:=False, DataType:=wdPasteText
End Sub

这将允许您粘贴文本并采用新的格式。