Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 如何在粘贴剪贴板字符串之前使用它?_Vba_Ms Word - Fatal编程技术网

Vba 如何在粘贴剪贴板字符串之前使用它?

Vba 如何在粘贴剪贴板字符串之前使用它?,vba,ms-word,Vba,Ms Word,我想写两个VBA代码 第一种方法是在引号文本周围添加括号,并删除换行符和段落分隔符 复制的文本始终有一个换行符,然后在靠近结尾处有一个段落换行符。 我想删除它,加上两个双倍行距,在文本的开头和换行符的前面加上括号,在末尾加一个句号,然后粘贴它 例如: 曼陀罗是适当的补救办法[断行][断段]马尔堡v。麦迪逊,《美国法典》第5卷第137、139页(1803年) 粘贴到: “曼陀罗是正确的治疗方法。”。麦迪逊,《美国法典》第5卷第137、139页(1803年) 我的第二个代码也会做同样的事情,

我想写两个VBA代码

第一种方法是在引号文本周围添加括号,并删除换行符和段落分隔符

  • 复制的文本始终有一个换行符,然后在靠近结尾处有一个段落换行符。
    我想删除它,加上两个双倍行距,在文本的开头和换行符的前面加上括号,在末尾加一个句号,然后粘贴它
  • 例如:
曼陀罗是适当的补救办法[断行][断段]马尔堡v。麦迪逊,《美国法典》第5卷第137、139页(1803年)

  • 粘贴到:
“曼陀罗是正确的治疗方法。”。麦迪逊,《美国法典》第5卷第137、139页(1803年)

我的第二个代码也会做同样的事情,但是翻转它并添加括号

  • 成品如下所示:
马尔堡诉。麦迪逊,5 U.S.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