Vba 如何在粘贴剪贴板字符串之前使用它?
我想写两个VBA代码 第一种方法是在引号文本周围添加括号,并删除换行符和段落分隔符Vba 如何在粘贴剪贴板字符串之前使用它?,vba,ms-word,Vba,Ms Word,我想写两个VBA代码 第一种方法是在引号文本周围添加括号,并删除换行符和段落分隔符 复制的文本始终有一个换行符,然后在靠近结尾处有一个段落换行符。 我想删除它,加上两个双倍行距,在文本的开头和换行符的前面加上括号,在末尾加一个句号,然后粘贴它 例如: 曼陀罗是适当的补救办法[断行][断段]马尔堡v。麦迪逊,《美国法典》第5卷第137、139页(1803年) 粘贴到: “曼陀罗是正确的治疗方法。”。麦迪逊,《美国法典》第5卷第137、139页(1803年) 我的第二个代码也会做同样的事情,
- 复制的文本始终有一个换行符,然后在靠近结尾处有一个段落换行符。
我想删除它,加上两个双倍行距,在文本的开头和换行符的前面加上括号,在末尾加一个句号,然后粘贴它 - 例如:
- 粘贴到:
- 成品如下所示:
子测试()
Application.ScreenUpdating=False
变暗Rng As范围
设置Rng=Selection.range
Rng.PasteAndFormat(wdFormatSurroundingFormattingWithEmphasis)
带Rng
.Chr前插入(147)
.MoveStartUntil Chr(11),wdForward
.End=.Start+2
.Text=Chr(148)和“
以
Selection.MoveStartUntil“),wdForward
Application.ScreenUpdating=True
端接头
对于演示,我尝试了
Rng.PasteAndFormat(wdFormatSurroundingFormattingWithEmphasis)
试试:
以及:
格式保留需要不同的方法。例如:
Sub DemoStraight()
Application.ScreenUpdating = False
Dim Rng As Range
Set Rng = Selection.Range
With Rng
.Paste
.InsertBefore Chr(34)
.MoveStartUntil Chr(11), wdForward
.End = .Start + 2
.Text = Chr(34) & ". "
End With
Application.ScreenUpdating = True
End Sub
以及:
非常感谢。这是如此接近我所需要的。唯一的问题是它将句号放在引号内,而不是放在整个短语的末尾。当我试图修改代码,将“.”放在末尾时,我会将它从替换文本部分中带出来,并在它出于某种原因放在前面之后添加它。当我试图用粘贴合并格式替换.paste时,它也会引起问题。«唯一的问题是它将句点放在引号内,而不是放在整个短语的末尾。»这就是您描述所需结果的方式。我已经编辑了代码。需要一种完全不同的方法来保留原始格式。请参阅修订后的答案。我使用合并格式将代码更改为粘贴,它适用于第一个代码,但不适用于第二个代码。我对其进行了修改,使光标指向粘贴文本的末尾,就像正常粘贴一样。我很接近,但不太有效。原始问题中的代码。
Sub DemoFlipped()
Application.ScreenUpdating = False
Dim Rng As Range, StrTmp As String
Set Rng = Selection.Range
With Rng
.Paste
StrTmp = Replace(.Text, Chr(11), "")
.Text = Split(StrTmp, vbCr)(1) & " (" & Chr(34) & Split(StrTmp, vbCr)(0) & Chr(34) & ".)"
End With
Application.ScreenUpdating = True
End Sub
Sub DemoStraight()
Application.ScreenUpdating = False
Dim Rng As Range
Set Rng = Selection.Range
With Rng
.Paste
.InsertBefore Chr(34)
.MoveStartUntil Chr(11), wdForward
.End = .Start + 2
.Text = Chr(34) & ". "
End With
Application.ScreenUpdating = True
End Sub
Sub DemoFlipped()
Application.ScreenUpdating = False
Dim RngA As Range, RngB As Range, StrTmp As String
Set RngA = Selection.Range
With RngA
.Paste
Do While .Characters.Last Like "[ " & Chr(11) & vbCr & "]"
.End = .End - 1
Loop
.InsertBefore " (" & Chr(34)
Set RngB = .Duplicate
With RngB
.MoveStartUntil Chr(11), wdForward
.End = .Start + 2
.Text = Chr(34) & ".) "
.Collapse wdCollapseEnd
.End = RngA.End
End With
.Collapse wdCollapseStart
.FormattedText = RngB.FormattedText
RngB.Text = vbNullString
End With
Application.ScreenUpdating = True
End Sub