- PR -

Microsoft Word自動化について

投稿者投稿内容
背古井
常連さん
会議室デビュー日: 2004/04/02
投稿数: 39
投稿日時: 2004-07-08 14:05
お世話になっております

VB.NETを使用してMicrosoft Wordを自動化する必要が生じ、
作成をはじめたのですが、罫線の引き方で詰まってしまいました。

まずファイルを起動して表を挿入するところまではうまく行き、
選択した表またはセルの外枠または内側の罫線の種類を引くことは
できました。

しかし、同じセル内で右の罫線と左の罫線が異なるものを引く方法が
わかりません。

具体的に書きますと、

---以下ソース

Dim wordapp As Word.Application
Dim wordSHT As Word.Document

wordapp = CreateObject("Word.Application")
wordSHT = wordapp.Documents.Add

wordSHT.Tables.Add(wordSHT.Range, 1, 1)

wordSHT.Tables.Item(1).Cell(1, 1).Range.Borders.OutsideLineWidth = Word.WdLineWidth.wdLineWidth225pt

---以上ソース

以上のソースでセルの外側に225ptの罫線を引くことができますが、
左を225pt右を75ptとかにする方法が知りたいということです。

ちなみにwordのマクロを記録すると

Selection.Borders(wdBorderLeft).LineStyle = wdLineStyleNone
With Selection.Borders(wdBorderLeft)
.LineStyle = Options.DefaultBorderLineStyle
.LineWidth = Options.DefaultBorderLineWidth
.Color = Options.DefaultBorderColor
End With

のように表示されますが、これの変換方法がわかりません。

ご存知の方がいらっしゃいましたら、お教え願えないでしょうか
よろしくお願いします。

開発環境
OS:Windows 2000 Pro
Word 2000
べーちゃん
大ベテラン
会議室デビュー日: 2002/07/21
投稿数: 121
投稿日時: 2004-07-09 07:07
実際に試したわけではないので、ご自身で確かめていただきたいのですが

確かOptions ObjectはApplication ObjectまたはGlobal Object
に格納されると記憶しています。

従って
wordapp.Options.DefaultBorderLineStyle
で値を取得できないですか。

他のSelection ObjectなんかもActiveWorkSheetとかの下に格納されると
思います。
ちょっとワードのVisualBasicEditorから調べてみたら多分いい答えが
見つかるのではないかと思います。
背古井
常連さん
会議室デビュー日: 2004/04/02
投稿数: 39
投稿日時: 2004-07-13 13:29
ベーちゃんさんありがとうございます。
すいません書き方が悪かったですね。
おっしゃる通り罫線の幅とかサイズは

wordapp.Options.DefaultBorderLineStyle または
wordapp.Options.DefaultBorderLineWidth で取得できます。

知りたいのは

Selection.Borders(wdBorderLeft).LineStyle = wdLineStyleNone
With Selection.Borders(wdBorderLeft)
.LineStyle = Options.DefaultBorderLineStyle
.LineWidth = Options.DefaultBorderLineWidth
.Color = Options.DefaultBorderColor
End With

これの「wdBorderLeft」に対応する部分で、セルに対して
それぞれ上だけ、下だけ、右だけ、左だけという風に罫線を引く方法です。

wordSHT.Tables.Item(1).Borders.InsideLineStyle = Word.WdLineStyle.wdLineStyleSingle

のように選択範囲の内側に線を引く方法及び

wordSHT.Tables.Item(1).Borders.OutsideLineStyle = Word.WdLineStyle.wdLineStyleSingle

の用に選択範囲の外側全てに罫線を引く方法はわかったのですが・・・。

もしご存知の方がおられましたらご教授ねがいます。

きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2004-07-13 14:41
背古井さん、こんにちは。

引用:

Selection.Borders(wdBorderLeft).LineStyle = wdLineStyleNone


この Selection を単純に wordSHT.Tables.Item(1) で置き換えれば良いのではないですか?
試してませんけど。

コード:

wordSHT.Tables.Item(1).Borders(WdBorderType.wdBorderLeft).LineStyle = WdLineStyle.wdLineStyleNone


MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2004-07-13 16:25
HTMLがわかっているなら、HTMLで文書を作りそれを
Wordで開き、Word文書(doc)形式で保存、でも作れます
(HTML を RTF と読み替えてもよい)

シングルユーザーアプリをチマチマ操作していると時間がかかります。
Wordの細かい自動配置が必要な場合はHTMLでできないことも
ありますが、そこそこの改ページもできます。
テキストはHTMLで作り、埋め込みコントロールなどはVBでとか
役割分担も可能です。

この会議室ページをHTML保存→Wordで開くと、スクリプト→マクロみたいな現象も?
[ メッセージ編集済み 編集者: MMX 編集日時 2004-07-13 16:35 ]
クライアントにHTMLを送って、Wordで開かせる、が可能なら単純なのですが

Word は面白い、HTMLテキストを .DOC の拡張子に変更して
ダブルクリックするとそのまま開ける。ローカルでは
Webサーバーから拡張子DOCで中身HTMLではどうでしょう?
IE は中身を見ている気がする。

Word で開いてもIE表示とは一致しない、
Word 向きのHTMLスタイルは何かのノウハウは必要なようです。
Wordのオートメーションとどちらが簡単か?

[ メッセージ編集済み 編集者: MMX 編集日時 2004-07-13 17:13 ]
べーちゃん
大ベテラン
会議室デビュー日: 2002/07/21
投稿数: 121
投稿日時: 2004-07-14 11:49
wdBorderLeftの値が知りたいだけでしたら、次の2つの方法のうちの一つで
知ることができます。

1.オブジェクトブラウザでwdBorderLeftの値を検索する
2.VBEditorのイミディエイトウィンドゥで ?wdBorderLeftとして実行する

そしてその直値をコードに書くと動きますよ。
あんまりスマートな方法ではないですが。
背古井
常連さん
会議室デビュー日: 2004/04/02
投稿数: 39
投稿日時: 2004-07-27 18:29
ご返事が遅れて申し訳ありません。
レスを下さった皆さんありがとうございました。
>きくちゃんさん
すいません試してみましたけどだめでした。

>MMXさん
客先がWORDで出力することしか認めてくれないんです(泣

>べーちゃんさん
値をセットする元がわからないんです。
でも参考にさせていただきます。

とりあえず今回WORDのブランクフォームを創ってそれに
書き込む形で処理することにしました。

皆さんどうもありがとうございました。
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2004-07-27 19:10
背古井さん、こんばんは。

引用:

とりあえず今回WORDのブランクフォームを創ってそれに
書き込む形で処理することにしました。


一つの事を実現するのに、方法は一つではありませんし、発想を転換することは重要だと思います。
上記の方法であれば、書式の変更なんかにも対応しやすいですしね。

ただ、

引用:

すいません試してみましたけどだめでした。


って、何がどのようにダメだったのか、こちらとしては非常に気になってしまいます。
よかったら、このあたりについて教えて頂けませんか?
#既に解決している問題なので、もう、どうでもいいのかも知れませんが。

スキルアップ/キャリアアップ(JOB@IT)