3

私は Word 2010 で作業しており、数式エディターをしばらく使用しています。

文書内の選択した内容を画像として保存するマクロを書きたいです。ドキュメントに書いた方程式を画像として抽出し、それらを無料の画像サイトにアップロードして公開するために使用したいと考えています。

しかし、方程式だけでなく、ドキュメントの大部分を抽出できればさらに便利です (ただし、方程式を抽出することで今のところは満足できます)。

Excel には、コンテンツを画像としてコピーするオプションが組み込まれており、それを好きな場所に貼り付けることができます。しかし、何らかの理由で、Word にはその機能がありません。

外部の非組み込み vba コードが含まれる場合でも、とにかくそれを行う方法を探しています。ただし、vba と統合する必要があるため、これらの画像で作業したり、他の処理を実行したりできます (たとえば、いくつかの画像サイトに自動的にアップロードするなど)。

この質問を投稿する前にいくつかの調査を行いましたが、問題に対する有効な解決策が見つかりませんでした。

あなたの助けをいただければ幸いです!

4

1 に答える 1

1

基本的には、VBAで項目を選択して「コピー」を実行し、クリップボード機能を使ってデータを取り出してファイルに保存する必要があります。残念ながら、私に属していないため、完全なコードを投稿することはできません。

シーケンスは次のとおりです。

  • OpenClipboard
  • GetClipboardData (戻り値はクリップボードの形式によって異なります。)
    • CF_ENHMETAFILE GDI MetaFile オブジェクトへのハンドルです。CopyMetaFile を使用してファイルに保存できます。この場合、GlobalLock を使用する必要はありません。
    • CF_TEXT は HGLOBAL です
    • CF_DIB BITMAPINFO を含む HGLOBLA です - ファイルにコピーできます
  • CopyEnhMetafileまたはGlobalSize、GlobalLock、CopyMemory、GlobalUnlock。
  • 閉じるクリップボード

    Private Declare Function Win32GetClipboardData Lib "Kernel32" Alias "GetClipboardData" (ByVal lClipboardFormat As Long) As Long

HGLOBAL を返す場合、GlobalSize、GlobalLock、CopyMemory を使用して BSTR またはByte()オブジェクトにコピーし、ADODB.Stream を使用してデータをファイルに保存できます。、次に GlobalUnlock でクリーンアップします。クリップボードに属していると思うので、GlobalFree を使用しないでください。

私が知っている多くの仕事のようです!しかし、一度完了すると、次のような単純な関数が得られます。

Sub SaveClipboardData(ByVal lFormat, ByVal sFileName)

そして、あなたは次のように言うことができます:

  • オブジェクトを選択
  • コピー
  • SaveClipboardData CF_ENHMETAFILE, "path\to\file.emf"

タダ!

BMP (CF_DIB) または EMF として非常に簡単に保存でき、ImageMagick はそれらを必要なものに変換できます。ベクトル形式である EMF を使用し、最高の解像度を得るために PNG に変換することをお勧めします。

これを行うコードを少なくとも 2 回作成しました。それほど難しくはありませんが、関数のシグネチャを正しく取得する必要があります。ヘルプについては、ここを参照してください。

于 2012-05-13T19:15:20.957 に答える