忍者ブログ

書式なしで貼り付けるwordマクロの改良

2023年06月29日
前回、Wordで行コピーとテキストペーストについて書いた。

今回は、今後の改善点として挙げた箇条書きをコピーすると項番までコピーされて困る件の対策について。


その場では思いつかなかったけど、コピーのタイミングじゃなくて貼り付けのタイミングで対策すれば良いことに気づいた。


箇条書きをコピーすると、「項番+タブ+テキスト」という形になる。なので、貼り付けるときにタブより後ろだけ貼り付ければ良い。

コピペだとダメっぽいので、クリップポードから文字を取得して、選択箇所にテキストを挿入することにした。



クリップポードからデータを取得するのは、過去にエクセルマクロで関数を作ったのでソースを流用。

Dim strCB As String: strCB = クリップボードの値を取得()


クリップポードにタブ文字を含むかで場合分け。

Dim tPos As String: tPos = InStr(strCB, Chr(9))
    If tPos > 0 Then


含む場合はタブ位置以降の文字を挿入

Selection.TypeText Text:=Mid(strCB, tPos + 1, Len(strCB))

以下、ソース。行コピーや行切り取りも再掲載。

Option Explicit


 


Sub ◆値ペースト()
    Dim strCB As String: strCB = 
クリップボードの値を取得()
    Dim tPos As String: tPos = InStr(strCB, Chr(9))
    If tPos > 0 Then
        Selection.TypeText Text:=Mid(strCB, tPos + 1, Len(strCB))
    Else
        Selection.PasteSpecial Link:=False, DataType:=wdPasteText, Placement:= _
        wdInLine, DisplayAsIcon:=False
    End If
    
End Sub



Function 
クリップボードの値を取得() As String
'
クリップボードから文字列を取得
'https://www.ka-net.org/blog/?p=7537
  With CreateObject("Forms.TextBox.1")
    .MultiLine = True
    If .CanPaste = True Then .Paste
    
クリップボードの値を取得 = .Text
  End With
End Function



Sub 
◆段落コピー()
    If Selection.Paragraphs.Count > 1 Then
        Call 
選択範囲を段落に拡張する
        Selection.Copy
    Else
        Selection.Paragraphs(1).Range.Copy
    End If
End Sub


 


Sub ◆段落切り取り()
    If Selection.Paragraphs.Count > 1 Then
        Call 
選択範囲を段落に拡張する
        Selection.Cut
    Else
        Selection.Paragraphs(1).Range.Cut
    End If
End Sub



PR
Comment
  Vodafone絵文字 i-mode絵文字 Ezweb絵文字