書式なしで貼り付ける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