Word (VBA)

Word VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : 指定なし)
Wordの書式を完全に削除するマクロについて
投稿日時: 22/12/15 15:10:24
投稿者: satoniwa

ワードで作成した文章をホームページビルダー(以下、HBという)に貼り付けたいと思っています。
 
この時、そのまま貼り付けすると、ワードの書式が残り、HB上には無駄な行などが表示されます。
これを避けるため、ワードの文章をコピペしてメモ帳に貼り付け、メモ帳を再度コピペしてHBに貼り付けると、無駄な個所がなくなります。
このメモ帳に貼り付ける行為が削除できないかと考えています。
 
ワードのマクロで書式削除の方法はないかと、ネットで探すと以下の記述がありました。
 
Sub アクティブな文書の書式をクリアする()
 ActiveDocument.Select
 Selection.ClearFormatting
End Sub
 
これを実行してみると、少し改善されますが、完全ではありません。
メモ帳に貼り付けると同じ効果が得られるマクロ記述があれば、お教えいただけませんでしょうか。
 
一度ワードを介してHBに記入する理由は、ワードのもつディクテーション機能で文章を作成したいと考えているためです。
 
以上よろしくお願いいたします。
 
 
 
 
 
 

回答
投稿日時: 22/12/15 15:41:21
投稿者: taitani
投稿者のウェブサイトに移動

以下ページに記載の通り、回避策は 2つのようですね。
https://support.justsystems.com/faq/1032/app/servlet/qadoc?QID=047533
 

/// 引用開始 ///
Q:外部からコピーし貼りつけした文章に、書式などを設定しても有効にならない
ライン
A:FAQ改善アンケートにご協力ください
外部からコピーし貼り付けした文章は、タグの違いなどからホームページ・ビルダーで確実に回避できる保証はありません。

Microsoft Word や Microsoft Excel 等、他のソフトウェア製品から文字をコピー/貼り付けしたり、外部のホームページ内の文字などコピーし貼り付けした場合、タグやその他の情報もコピーされることがあり、状態によっては文字の書体や位置揃えや他の書式を設定しても有効にならない場合があります。

回避策の一例としては、以下の方法があります。

・貼り付けた文字全体を選択し、メニューバーから「書式」→「フォント属性の解除」を実行した上で再度設定を行う
・一度メモ帳に貼りつけて内部のタグなどの情報を除去してからホームページ・ビルダーに貼り付けてみる
※上記の回避策を実施しても、タグや属性の状態によっては全く回避できない場合もあります。

/// 引用終了 ///

 
1つ目の「・貼り付けた文字全体を選択し、メニューバーから「書式」→「フォント属性の解除」を実行した上で再度設定を行う」の方が工数が軽減される感じでしょうか。

投稿日時: 22/12/15 16:44:31
投稿者: satoniwa

taitaniさん
 
ご回答ありがとうございます。
「書式」→「フォント属性の解除」を試してみましたが、まったく変化はありませんでした。
今後ともよろしくお願いいたします。
 
satoniwa

回答
投稿日時: 22/12/15 17:09:30
投稿者: sk

引用:
Sub アクティブな文書の書式をクリアする()
 ActiveDocument.Select
 Selection.ClearFormatting
End Sub

Selection オブジェクトの ClearFormatting メソッドは
選択範囲の文字列および段落の書式を削除する
標準の書式に戻す命令です。
 
引用:
これを実行してみると、少し改善されますが、完全ではありません。

その状態で[コピー]コマンドや Ctrl + C キーなどの操作によって
クリップボードにコピーされるのは、あくまで
「標準の書式が適用されたリッチテキスト」です。
 
つまり、通常のコピー操作では何をどうしようが
何らかの書式情報が一緒にコピーされます。
 
その後クリップボード上のデータを貼り付けた結果が
どのような形で変換、出力されるかは
貼り付け先のアプリケーション側の仕様次第であり、
Word 側でどうこう出来る話ではありません。
 
例えば Word ドキュメント上の選択範囲から
プレーンテキストのみを抜き出して、そのデータを
クリップボードに直接送るようなコードを
実行するぐらいしかないでしょう。

投稿日時: 22/12/16 09:14:14
投稿者: satoniwa

skさん
 
投稿ありがとうございました。
通常では不可という事情理解いたしました。
こんご何か手はないか、も少し待ってみます。
 
ありがとうございました。

回答
投稿日時: 22/12/16 11:07:38
投稿者: sk

引用:
例えば Word ドキュメント上の選択範囲から
プレーンテキストのみを抜き出して、そのデータを
クリップボードに直接送るようなコードを
実行するぐらいしかないでしょう。

即効テクニック より:
https://www.moug.net/tech/exvba/0150091.html
 
上記記事で例示されている方法を応用するならば
以下のようなコードによって選択範囲のプレーンテキストを
クリップボードにコピーすることができます。
 
(標準モジュール)
---------------------------------------------------------------
Sub CopyPlaneTextToClipboard()
On Error GoTo Err_CopyPlaneTextToClipboard
 
    If Selection.Type <> wdSelectionNormal Then
        Exit Sub
    End If
     
    Dim strPlaneText As String
    strPlaneText = Selection.Text
     
    Dim objDataObject As MSForms.DataObject
    Set objDataObject = New MSForms.DataObject
 
    With objDataObject
        .SetText strPlaneText, 1
        .PutInClipboard
    End With
     
Exit_CopyPlaneTextToClipboard:
On Error Resume Next
     
    Set objDataObject = Nothing
 
    Exit Sub
 
Err_CopyPlaneTextToClipboard:
     
    MsgBox Err.Number & ": " & Err.Description, _
           vbCritical, _
           "実行時エラー (CopyPlaneTextToClipboard)"
     
    Resume Exit_CopyPlaneTextToClipboard
End Sub
---------------------------------------------------------------

投稿日時: 22/12/17 09:29:39
投稿者: satoniwa

skさま
 
ありがとうございます。
お教えいただいたコードをそのままコピーし、標準モジュールに貼り付けて実行しましたが、
8行目の
 objDataObject As MSForms.DataObject

「コンパイルエラー
ユーザー定義は定義されていません」
のエラーメッセージが表示され実行できませんでした。
 
よくわからないまま、エラーメッセージのヘルプを参照したり、他のメッセージをネットで探してして対応したりしてみましたが、今のところ解決に至っておりません。
 
解決の手段をお教えいただくと有難く思います。
よろしくお願いいたします。
 

投稿日時: 22/12/17 14:57:33
投稿者: satoniwa

sk 様
 
その後、ご提示いただいた資料などもう一度参考にして、対策を試みたところエラーメッセージの問題は解決しました。
お手数をかけました。
 
で、実行いたしましたところ、余分のものは一切消去されましたが、
 
実際に設定した「改行」(消したくない改行まで)も消去され、一つの単文になってしまします。
必要な「改行」は消さないようなコードの記述法は、あるのでしょうか。
 
面倒なお願いをいたします。
もし可能ならよろしくお願いいたします。
 

投稿日時: 22/12/18 15:49:08
投稿者: satoniwa

色々ご教示いただきありがとうございました。
終了とさせていただきます。