• 締切済み

エクセル向けのマクロをワードで使いたい

エクセル向けに書かれたマクロ(質問番号180093の解答番号2、上付き下付き変換ソフト)をワード(2003)で使おうとして、ワードの標準モジュールに貼り付けたのですが、実行させるとApplication.Substitute等でerrorが出てしまいます。 このマクロはエクセル(2003)では確かに動きます。 ワードのVB参照設定でMicrosoft Excel5.0 オブジェクトライブラリにチェックを入れてみたのですがダメでした。 どのようにしたらちゃんと走るのでしょうか。マクロについてはほとんど経験がありません。どなたか教えて頂ければ助かります。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

VBAで (1)エクセルで(エクセルの世界から)エクセルのセルの値に対して (2)ワードからエクセルのシートのセルの値に対して (3)ワードからワードの文書の文字に対して (4)エクセルからワードの文書に対して の場合がありえる。 (ほかにVB.NETからエクセル、ワードに対してもある) >VB参照設定でMicrosoft Excel5.0 オブジェクトライブラリにチェックを入れてみたのですが は(2)の場合にすることなので、(3)には必要ない。 ワードはエクセルとオブジェクトが違うから、ワードVBAとして勉強しなおさないとダメと思う。エクセルと似ている言葉( プロパティ、メソッドなど)はあっても、勉強して、同じ表現だということを確認して使うべきもの。 この質問の場合はエクセルのVBAの回答をそのままワードに当てはめる考えのようだが、とんでもない。 ワードVBAは市販解説書籍も皆無に近く、WEBに散発的なものが多く、少数やや体系的なものが在るだけで勉強は難しい。 Googleででも照会やヘルプを使って勉強のこと。 またワードにもマクロの記録があるので活用のこと。 前質問回答(nishi6さん最近名前を見ないが)で私が注目したのは 上付き文字 だが、質問者が主にしたいのは 文字の全角半角変換(StrConv)なのか? 上付き文字なら マクロの記録では With Selection.Font .Superscript = True End With ただし文書の中に(上付き文字にするべき)対象を探し、連続して、思うオブジェクトを捕まえるマクロがむつかしい。 やりたいケースの実例を挙げておけば、回答があるかも。

dominica35
質問者

お礼

早速のご回答有難う御座います。 質問番号180093のURL(http://oshiete1.goo.ne.jp/qa180093.html)を書き忘れ失礼しました。 目的とするところは (1)ワードからワードの文書の文字に対して (2)”^”と” ”で挟まれている全角文字を上付きに変換、 (3)”_”と” ”で挟まれている全角文字を下付きに変換することです。 そして、全角→上付/下付変換による文字の空きを詰めることです。 上記URLのマクロに記載のステートメントはほとんどWordで通用しますが Application.Substitute/For Each In Selection /Characters(m,n) はダメだったので、若干の変更を含めてWord向けに書き換え現在快調に動いています。

回答No.2

どのような条件で上付きと下付きを変換したいかで、マクロの書き方も 変わると思います。 こちら↓は化学式に利用するなら、参考になると思います。 http://oshiete1.goo.ne.jp/qa4860574.html 簡単なものなら、アドインとしてこちら↓を利用する方法もあります。 http://www.geocities.jp/kuma_pooh1958/KumaPooh1958/word008.htm こちら↓は、標準テンプレートに登録することで利用できるものです。 http://www.vector.co.jp/soft/win95/writing/se171971.html どちらも化学式などを選択状態にして利用するものですね。

dominica35
質問者

お礼

早速のご回答有難う御座います。 一般的な上付き、下付き変換を必要としていたので、質問番号180093 (http://oshiete1.goo.ne.jp/qa180093.html)の解答にあったマクロが必要でした。 そこで、 Application.Substituteはreplaceで代替し、 For Each rg In Selectionは、For Each rg In ActiveDocument.Sentencesで置き換え rg.Characters(m,n).Font.Superscript = TrueではCharacters(j)として、jをForループで変化させるなどWord向けに書き換えOKとなりました。 教えて頂いたサイトは大いに参考になりました。

noname#99913
noname#99913
回答No.1

「Substitute」はエクセルの関数で、ワードにはありません。普通エクセルのマクロがそのままワードで走ることはありません。ワードの機能を使ったものに書きなおす必要があります。

dominica35
質問者

お礼

早々のご回答有難う御座います。 仰るようにWordには"Substitute"は無いことを教えて頂いたので、replaceを使って事前に全文について"^"を"@"で置換しました。 With ActiveDocument.Content.Find .ClearFormatting .Text="^" With.Replacement .ClearFormatting .Text="@" End With .Execute replace:=wdReplaceAll End With @の方が使いやすいためです。 その他についても一部書き直し、満足の行く結果が得られました。 なお、質問番号180093は http://oshiete1.goo.ne.jp/qa180093.html にあります。質問番号だけでは検索困難で大変失礼しました。

関連するQ&A