- ベストアンサー
VBScripts→Word2010TextBoxの問題について
- VBScriptでWord2010のテキストボックスの問題について調査中です。
- Word2010のテキストボックスは特殊な図形形式になっているため、VBScriptで正しく抽出できません。
- VBScriptでShapeのTypeの値を調べる方法を教えていただきたいです。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
VBScriptは、いろいろなことができますが、その機能がすべてVBScriptに組み込まれているわけではあれません。 決められた方法で、アプリケーション等を操作する方法を公開しておくと、VBScript等がその方法を使って操作できるようになっているだけです。 WordのShapeオブジェクトのTypeとか、前回の質問のSaveAsとかは、Wordがほかのプログラムから操作できるように公開しているもので、VBScriptはそれを利用しているだけです。(このような仕組みを、オブジェクトモデルといっています。) そのため、VBScriptは変わらなくても、Wordのバージョンが上がれば、新しい機能をVBScriptから操作できたりします(逆に、今回のように今までと操作方法が変わってしまって、うまく動作しなくなることもあります)。 なので、VBScriptでSaveAsの情報を調べても、出てこないわけです。どんな命令があって、その命令にどんな値をわたすとどのように動作するかといったことは、VBScriptが決めているのではなく、オブジェクトモデル(今回であればWord)が決めているので、そのオブジェクトモデルの決まりを調べる必要があります。 基本はWordの決まりに従うことになるので、VBScriptでの方法とか、VBAでの方法とかにこだわらない方がいいと思いますよ。VBAでどう記述するかを見れば、ドキュメントモデルとしての操作方法はわかるはずなので、あとはそれをVBScriptで実現するだけです。VBAでの記述例が圧倒的に多いので、大抵の人はVBAでの記述をVBScriptに変換しているので、それができるようになった方がプログラミングの幅が広がるはずです。 テキストボックスが何として扱われているかですが、テキストボックス1つだけのファイルを作成して、そのファイルをVBScriptで調べてみてはどうでしょうか。ActiveDocumentのShapesコレクションに1つだけオブジェクトがあるでしょうから、それのTypeが何かを表示させるなりすれば、わかるように思います。
その他の回答 (4)
- 0909union
- ベストアンサー率39% (325/818)
>・・力がないから、お伺いしているのです。 私を含め、そのような事を指摘する場合、本人に(質問者)、その努力がうかがえないと そのような発言をします。単純に単語一個で検索すれば分かるような事を、わざわざここで投稿する。 やっている事の、その行動がわからない。病的にしかみえないのです。 > 私の考えとしましては、回答者は、その人の力(程度・能力)に合わせて回答すべきではないでしょうか 何を甘えているのでしょうか? 私はあなたの親でもなければ、友達でもない。まして、投稿してお金をもらってもいない。 何をどう投稿するのかは、あなたにも自由があるのと同じで、 回答者にも自由があります。 「努力がみられない」といいましたが、 >、「VBAではこうだからこうだろう」というのは と言う発言です。その箇所を見ていないので、創造でしかありませんが、 Wordオブジェクト又はOfficeオブジェクト、モデルを提示して、そのプロパティーの・・なんて説明したかと思います。 No1,2,3に記載しましたが、ちゃんと勉強して知識を深めていけば、VBAを提示したのではなく、 オブジェクトモデルのメンバー を提示したことがわかるはずです。VBAではないのです。 VBSはオブジェクト指向のスクリプトプログラム言語で、COMインターフェースを提供するモジュールを操作できるのが、もっとも良いところです。 通常この手のスクリプト言語だと、その提供している会社の提供している物しか内部で使えない場合が多いが、 COM と言うやり方を公開し、そのやり方に従えば、だれでも作れて、だれでも VBSと言う言語の書式で扱うことができる。こんな、すばらしい事は、それまでなかったのです。 それらを理解してくれていれば、 >このような問題が出てきたことを考えると、その「Shape」が何者であるかを調べる方法と をちゃんと提示したはずなのに、「素人にわかりやすいように説明しろ」というのは、投稿の目的が最初から違うところにあるとしか思えません。 No1で示したように、 VBA Officeオブジェクトモデル Wordオブジェクトモデル を読みましたか? そこのメンバーの詳細(リファレンス)を見れば、何を指定するか出てきます。 それでもわからないのなら、そのメンバーの単語でネットで検索すると、使い方を説明しているサイトや、サンプルコードがたくさんヒットします。 それさえ、やっていなくて、子供みたいに、だだこねているだけですよね。 それらをやって、努力している本物の質問者も多数います。投稿内容を見ると、少しづつ進歩しているのがわかります。 「愚問」投稿など、最初から議論を吹っかける集団などが、真の質問者の投稿をじゃましているわけです。
- 0909union
- ベストアンサー率39% (325/818)
No1,2を理解した上で、これを見ること http://msdn.microsoft.com/en-us/library/ff836759.aspx セレクションオブジェクトですね。何がいいたいか、No1、2を理解してくれていれば、わかるはずなんですが。
- 0909union
- ベストアンサー率39% (325/818)
No1の続き。 ちなみに、マイクロソフトの自動翻訳システムで翻訳したら http://www.microsofttranslator.com/BV.aspx?ref=IE8Activity&a=http%3A%2F%2Fmsdn.microsoft.com%2Fen-us%2Flibrary%2Fff196943.aspx ですね。 http://msdn.microsoft.com/en-us/library/ff196943.aspx 元です。 http://msdn.microsoft.com/en-us/library/ff846415.aspx ここにない、メソッド、プロパティー、メンバーは使えないと言う事です。ちゃーんとヘルプにありますよ。見ていないのでしょうか。 再度ちなみに抜粋です。 「オートシェイプ、フリー フォームなどの描画レイヤー内のオブジェクト、OLE オブジェクト、ActiveX コントロール、または画像を表します。Shapeオブジェクトは、文書のメイン ストーリーまたはすべてのヘッダーとフッター、ドキュメントのすべての図形を含むShapesコレクションのメンバーです。」 さすが自社のリファレンスサイトですね。90%以上ヘルプと似たことになっています????
- 0909union
- ベストアンサー率39% (325/818)
>前回質問したときも、「VBA」で回答して下さった方がおられたのですが だとしたら、レスはつきませんね。それは、あなたがVBSの方も理解していないからです。 VBAはOfficeのインタープリターとしての言語です。Officeのオブジェクトモデルにアクセスするための、書式と言い換えてもいいのです。 VBSからアクセスできるのはVBAではなく、MS-Officeのオブジェクトモデルで、COMとしてOfficeから提供しているもので、VBSからのアクセスは、同じようにアクセスできるわけではありません。COMとして公開されている部分のみです。 つまり、Officeのヘルプにちゃーんとそのモデルが解説されているので、それを見ればアクセス方法が記載されています。それをVBSからアクセスするには、どのような書式にすればいいか聞けばいいだけです。 質問が適当でないから、回答も適切なものがえられません。回答者が正しくても、それをVBSに置き換えるだけの、あなたの力がないから、解釈できないだけです。 たまに、「オブジェクト指向はクラス作成だ」なんて間違いえた考え方を投稿する方がいますが、まさに、今回のような問題が、「オブジェクト指向」の問題です。 >Shape」が何者であるかを調べる方法と、 上記のように、MS-Officeについているヘルプをみればいいだけです。VBAのヘルプではありませんよ。 http://msdn.microsoft.com/ja-jp/library/kw65a0we.aspx のような物がのっている箇所です。 http://msdn.microsoft.com/ja-jp/library/ee814735.aspx を見てVBAとはなんぞや、から始まって、Officeのオブジェクトモデル、Wordのオブジェクトモデルを理解した上で、VBSからのCOMアクセスを勉強してください(ActiveXの操作といってもいい)。 これらはHTMLのDOM(ドキュメントオブジェクトモデル)のアクセスに良く似ています。 しかし、この投稿も以前、同じ物をみました。投稿者は進化していないということでしょう。同じ内容でしたが・・・・ http://msdn.microsoft.com/en-us/library/ff841698.aspx (正確にはこちら。日本語は未完成のようです。日本語でモデルを理解した上でたどれば5分とかからずにたどりつきます) なお、VBSからは特殊な方法でアクセスすることがありますので、また提供もされていない時があります。その場合は、逆転の発想をしないと。RUNでWordのマクロを実行する方法。
お礼
いろいろ説明頂きありがとうございます。 私は最初に「超初心者」だと、お断りしていますように、まだ、分かっていないことがだらけです。 こんなことを言っては失礼ですが、「超初心者」だと断っている人間に対して「力がないから」と言われても、困惑してしまいます。 力がないから、お伺いしているのです。 私の考えとしましては、回答者は、その人の力(程度・能力)に合わせて回答すべきではないでしょうか? それが出来ないのであれば、回答して頂かなくても結構なのですが。 回答して頂いて申し訳ないのですが、また、よろしくお願い致します。
補足
私は、「VBA」にアクセスすることは一切考えていません。 私の組んだプログラムでも、「VBA」を呼び出すようなことは一切していないつもりです。 従って、ご指摘の「VBSからアクセスできるのはVBAではなく、MS-Officeのオブジェクトモデル」と言われても、元々「VBA」にアクセスするつもりが無いので、意味が分かりません。 私が知りたいのは、単に「Word2010」で「テキストボックス」を挿入したとき、その「テキストボックス」を「VBScript」から指定するとき、「Type」がとる値を知りたいだけです。
お礼
大変ありがとうございます。 もちろん、「VBScript」ですべて出来るとは全く思っていません。 第一、ファイルを扱うのに「CreateObject」を呼び出したりしていて、それが「VBScript」に含まれた機能でないことは理解しています。 私が「VBScript」限定で、とお願いしているのは、「VBAではwd…」だ、とか言われても、「VBScript」ではその「wd…」をそのまま使えず、その値が無いとダメなのです(私はその「値」を知りたいのです)。 「VBA」と「VBScript」では違うところもあるので、私としては「VBScript」をまずある程度理解したい、と思い、「VBScript」から学習を始めました。 と言いますのは、私は印刷屋さんの下請けの下請けのような仕事をしておりまして、クライアントからお預かりしたデータを使って、別ソフトで組み直すようなことをよくやります。 その場合、外部から一括して処理が出来、しかも「正規表現」が使える「VBScript」こそが、私のしたいことを実現してくれるからです。 Excelのデータ集計をする、とか、「VBA」でそれなりに複雑な処理をする必要が私には全く無く(そんなの印刷屋さんの仕事ではないので)、今回も「Word2010」の「テキストボックス」がだいたい、何なのか、それを「VBScript」から操作するのに必要な「Type」の値をとりあえずは知りたいだけなのです。 最後にご指摘頂いたやり方すら、私にはすぐには分からない「超初心者」なものですから、できましたら、具体的なやり方(プログラム)を教えて頂けないでしょうか? 皆様にいろいろ教えて頂き大変ありがたいのですが、なにぶん、もうすぐ57歳の初老の人間にとっては、理解がなかなか出来ない事ばかりなもので、よろしくお願い致します。
補足
ありがとうございます。 今、私の実力ではなかなかうまく行きませんでしたが、何とかご指摘のやり方で「Type」の数値を取得できました。 「Word2010」で「テキストボックス」は何らかの「描画オブジェクト」になるのですが、「AutoShape」と同じ「Type = 17」でした。 もちろん、私のプログラムでも「Type = 17」の場合も文字を取り出すようになっているのですが、「Word2010」では取り出すことができませんでした。 また、全く違う問題みたいです。 「Word97-2003」形式の「.doc」では、例えば「AutoShape」の楕円の中の文字もちゃんと「Type = 17」で認識し、その中の文字を取り出せているのですが…。 もう少し、勉強して、また分からなかったら、お教えください。 以上、ありがとうございました。