« Word Macros and Visual Basic for Applications FAQ (ワードマクロの英語解説サイト) | トップページ | コマンドバーの名前を取得するマクロの解説 »

2009年8月 1日 (土)

欲しいコードを、適当にあたりをつけて探す例

ほしい機能を具体的にイメージできたときに、それを実現するためのコードをどうやって探しているのでしょうか?

いい方法があったら教えていただきたいです。

今回は、おそらくワードマクロを勉強しはじめてある程度するとぶつかる壁(ヘルプに書かれていないと思われる機能を、どうやってコードにすればいいのか?)の最近の体験談を書こうと思います。

先日のブログにも書きましたが、「テーブル」の「表の文字列」にカーソルがある場合に表示される右クリックメニュー(ショートカットメニュー)に、グーグル検索用のメニューを追加するためのコードを探しました。

このときには、「適当にあたりをつけて探す」を繰り返しました。

まず最初に当たったのは、ワードマクロのヘルプ機能でしたが、ここでは見つかりませんでした。(もし見つけた方がいらっしゃったら、キーワードを教えてください

「適当にあたりをつけて探す」は、当てずっぽうに「下手な鉄砲」を打ち続けることではないと思います。

これはやるだけ時間の無駄です。

僕がやった推測は、日本語の項目名から英語の項目名を予測して、対応するコードを探す、という方法でした。

VBAは英語に対応した表記になっているので、なんとなく推測ができるわけです。検索だと、find(見つける命令)とかfound(見つかった判定)とかありますし。

今回の場合は、「表の文字列」なので、「string in table」とか 「strings in table」など思い浮かぶわけです。

で、いきなり結論ですが、何が正解だったかというと「table text」だったんですね。

どうやって気がついたか?というと、手元にあるワードマクロの洋書にたまたま「英語の右クリックメニュー」の写真が表示されていたのです。

これと、日本語の右クリックメニューと対比をしてあることに気がつきました。

日本語のメニューで「文字列」と「テキスト」と表示されているところが、英語のメニューではどちらも「text」になっていることがあると分かったんです。

また、メニューの一覧を見た感じ、前置詞は入らないことが多いみたいだ、、、と気がつきました。

こういうヒントを見つけて、「table text」にたどり着きました。

偶然といえば偶然ですが、こういう「適当さ加減」です。

今回はたまたまうまくいった例を紹介しましたが、こういうたまたまの頻度を多くするための工夫が必要だと思います。

この類の調べ物で時間がかかると、VBAの独学が苦痛になりますからね。

適度に絞り込んだ(あたりをつけた)上でいろいろな情報源で答えのヒントを探す、ということが重要かな、と思っています。

|

« Word Macros and Visual Basic for Applications FAQ (ワードマクロの英語解説サイト) | トップページ | コマンドバーの名前を取得するマクロの解説 »

日記・コラム・つぶやき」カテゴリの記事

コメント

初めまして。
いつも興味深く拝見させてもらっています。

当たりをつける助けになればと思いまして、
以下のコードを実行するとショートカットコマンドバーの英語の項目名を含むリストがワード文書に出力されますのでお試しください(関係ないものも出てきてしましますが)。
対応する日本語は自分で探さなければなりませんが、役に立つと思いますhappy01

例えば、「Table Text」は「Tables」の下あたりに出ると思います。

Sub GetCommandBarNames()
Dim cBar As CommandBar
Dim cBarName As String
Dim cBarIndex As Integer

For Each cBar In CommandBars
cBarName = cBar.Name
cBarIndex = cBar.Index
Selection.TypeText (cBarIndex & ":" & cBarName & vbCr)
Next cBar
End Sub

投稿: Konno | 2009年8月 4日 (火) 17時20分

対応する日本語もわかりましたので、先ほどのマクロを改良しました。


Sub GetCommandBarNames()
Dim cBar As CommandBar
Dim cBarNameJ As String
Dim cBarName As String
Dim cBarIndex As Integer

For Each cBar In CommandBars
cBarName = cBar.Name
cBarNameJ = cBar.NameLocal
cBarIndex = cBar.Index
Selection.TypeText (cBarIndex & vbTab & cBarName & vbTab & cBarNameJ & vbCr)
Next cBar
End Sub

投稿: Konno | 2009年8月 4日 (火) 18時14分

Konnoさん、

プログラムのご投稿をどうもありがとうございました。

さっそく試しましたところ、81番にTable Textが表示されました。

こんな短いプログラムで、まさしく欲しかった情報がそっくりそのまま得られました。

おかげさまで、今後はもう迷わずにすみそうです(笑)。

また、こんな感じの有益情報があれば、どうぞご教示ください。よろしくお願いします。

プログラムの書き方も参考にさせていただきます。どうもありがとうございました。

投稿: 管理人 | 2009年8月 5日 (水) 07時56分

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/519619/45799923

この記事へのトラックバック一覧です: 欲しいコードを、適当にあたりをつけて探す例:

« Word Macros and Visual Basic for Applications FAQ (ワードマクロの英語解説サイト) | トップページ | コマンドバーの名前を取得するマクロの解説 »