« 2008年10月 | トップページ | 2008年12月 »

2008年11月の5件の記事

2008年11月23日 (日)

文末、文頭へのカーソル移動

以前、「ピリオド・句点までの文字を選択」を書いたときに、文末や文頭を選ぶために、検索用コードをもちいて句点(。)やピリオド(.)を見つける作業をしました。

ところが、最近見つけたのはワードのVBAが標準で持っている機能をつかった、文頭や文末の見つけ方です。

こういう標準の機能を知っていると、プログラムが簡潔になりますね。
まだ、知らないことだらけです。

□まず、カーソル位置の文章を選択するコードです。
Selection.Expand Unit:=wdSentence

これを実行すると、英文であれば、カーソル位置の文章の文頭の文字から、次の文章の文頭前までが選択されます。

よって、ダブルスペースで文章を書いているときには、文章丸ごとと、ピリオドのあとのスペース二つも選択されます。

英文では、文中にあるピリオドが、数値の直後にある場合には、数字の小数点とみなされるのか、そのピリオドが文章の末尾であるとは認識されないみたいです。

日本語の文章では、文章の末尾を句点(。)や改行で認識しているらしいです。

句点のあとにスペースがあると、そのスペースまでを一文としてみなします。

多少変則的な解釈が必要になるかもしれませんが、下記のコードで、文末と文頭とにカーソルを移動することが出来ます。

'○文頭へカーソル移動
Selection.Expand Unit:=wdSentence
Selection.Collapse Direction:=wdCollapseStart

'○文末へカーソル移動
Selection.Expand Unit:=wdSentence
Selection.Collapse Direction:=wdCollapseEnd

| | コメント (0) | トラックバック (0)

2008年11月14日 (金)

"文書は保存されましたが、音声認識データを保存する十分な空き領域がないため、データは失われました"表示の対処マクロ

Word2003を使っていると、たびたび遭遇する上記のエラーメッセージ。

対処方法は、マイクロソフトのサポートサイトに記載されています。

「方法2」で全てのファイルについて表示が出ないようにしたいのですが、セーフモードの起動があったりと少し手間に感じます。

そこで、簡単なマクロを作りましたので、この表示がわずらわしいなと思っている方、お使いください。

●作用
既存のファイルを開くときに、「自動的に言語データを埋め込まないように設定」します。
新しいファイルを開くときには、設定が実行されませんので、ご了承ください。

●プログラム
AutoOpen というコマンドを使ってみました。これは、既存のファイル(文書)を開くときに自動的にマクロを実行するという命令です。

Normalテンプレートに保存しておけばいいと思います。

Sub AutoOpen()

If ActiveDocument.EmbedLinguisticData = True Then
    ActiveDocument.EmbedLinguisticData = False
End If

End Sub

| | コメント (0) | トラックバック (0)

2008年11月10日 (月)

テキスト貼り付け(右クリックとボタン) 修正しました。

先日書いた記事「テキスト貼り付け(右クリックとボタン)」に掲載したマクロにミスがありましたので、修正します。

「テキスト貼り付け」のボタンとして作ったのですが、後日使用したところ、作った当時の作動が確認できませんでした。理由はわかりません。

マクロの記録で、Selection.PasteAndFormat (wdPasteDefault)
というコードを記録したため、これを使っていました。

結局、うまくいかないので変更したところ、正解はこれのようです。
Selection.PasteAndFormat (wdFormatPlainText)

マクロの記録は気をつけないといけませんね。しかし、マクロを作った日には、思ったように作動していたというのも、奇妙なものです。

大変失礼いたしました。
掲載したテンプレートも修正しました。

| | コメント (0) | トラックバック (0)

2008年11月 8日 (土)

タブの削除

タブを削除するためのマクロプログラムです。

●用途
インターネットのhtmlからテキストををコピーすると、ときどきタブの情報までコピーしてしまうことがあります。

たとえば、5文字ごとにタブが設定されているとか、細かく入っていることがあります。

さらに面倒なことに、ワードのレイアウト表示をしているときに、文書上部に表示される「ルーラー」の枠を超えてさらに右側にタブが入っていることもありました。

こういうものは、タブ記号を触れないので、ルーラー上の記号をひとつひとつマウスで選択して削除するという手段がとれません。このようなタブを全て削除するときに使えます。

●工夫
下記のプログラムにも書かれていますが、繰り返し処理の終了の判定方法を工夫しました。

文書中の最終段落かどうかの判定を、これ以上カーソルを下に移動できるか否か?で判定します。

●作った背景と作り方
まず、タブを削除したかったので、「知りたい操作がすぐわかる標準Word2003全機能Bible」の索引から「タブ」の項目で調べました。

P363とP365にヒントが記載されていました。

メニューの書式>タブとリーダー から操作窓が表示されますが、この右下にある「すべてクリア(A)」のボタンを押してタブを削除できます。

こうすることで、短いインターバルで細かく入っているタブをひとつづつマウスで取り除く手間が省けます。

しかし、この場合、カーソルがおかれている段落のタブしか削除されません。

つまり、この「すべてクリア」のボタンでは、文書全体のタブを全て取り除くことはできなくて、段落ごとにタブを削除しないといけないということでした。

そこで、まず、この段落ごとのタブ削除を「マクロの記録」でコードを書き出して、それを全ての段落に対して繰り返し処理をするマクロをつくりました。

●プログラム
画面の更新をオフにしていいないので、カーソルが文書の一番先頭から下に動きながら、段落ごとのタブを削除するのが見えます。

Sub タブ削除()

Dim SS As Long 'カーソル位置の変数 integerではなくlongとした

'文書先頭へカーソルを移動
Selection.HomeKey Unit:=wdStory

'タブ削除の繰り返し処理
Do
    '現在のカーソル位置を変数に格納
    SS = Selection.Start
   
    '全てのタブ情報をデフォルトに戻す(マクロ自動記録による)
    Selection.ParagraphFormat.TabStops.ClearAll
    ActiveDocument.DefaultTabStop = MillimetersToPoints(14.8)

    '段落を下方向に移動
    Selection.MoveDown Unit:=wdParagraph, Count:=1
   
    '最終段落にきたことの確認
    '確認方法:移動したあとのカーソル位置と移動前に格納したSSとを比較
    '理由:最終段落の場合、移動指示してもカーソル位置は変わらない
    If Selection.Start = SS Then Exit Do
Loop
   
End Sub

| | コメント (2) | トラックバック (0)

2008年11月 2日 (日)

「マクロの呼出方法の選択と割付」の紹介

マクロの登録方法を紹介されているホームページがあります。

特許実務家・翻訳実務家の道具箱 という弁理士の畠山先生のホームページです。

このホームページには、特許翻訳に役に立つワードマクロが紹介されていたり、関連ページが紹介されていたりと非常にお得な内容になっています。ぜひご覧になってください。

その中でも、きわめて役に立つページがあります。それが、マクロの呼出方法の選択と割付というページです。

このページでは、作ったマクロをメニューバーのボタンに登録したり、マウスの右クリックに登録したりする方法が、なんと「動画」でわかりやすく説明されています。

畠山先生からリンクの許可をいただきました。また、この動画を作ったフリーウェアまでご紹介いただきました。畠山先生、ありがとうございます。

チュートリアル用動画作成のフリーソフト「Wink」

いままで、ボタンの作り方や右クリック登録方法を、なんとか上手に説明したいと思っていたのですが、僕が説明するまでもないですね。

動画はやっぱりわかりやすくていいですね。僕も、マクロを学び始めたときには、プロのプログラマの先生から画面で示して説明してもらったためにハードルが一気に下がったのを覚えています。

本で読むと数ページの説明が、目の前で先生が示してくれると、案外簡単な説明ですんなりと理解できます。

僕にとっては、パソコンの操作を目で見て理解するのはすごく効果的でした。

ぜひ、畠山先生の「マクロの呼出方法の選択と割付」のページをご活用ください。

あと、畠山先生の「地球温暖化防止協力ウエア」という考え方、新しくて素敵です。共感されるかた、ぜひ何かしらの第一歩を一緒に踏み出しましょう。

| | コメント (3) | トラックバック (0)

« 2008年10月 | トップページ | 2008年12月 »