Word VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


44 / 45 ページ ←次へ | 前へ→

【36】Re:リストボックス内を並べ替え
質問  WhiteRabbit  - 03/5/15(木) 15:27 -

引用なし
パスワード
   ▼らいでん さん:

こんにちは、

>>Excelでは作業用のシートを適宜追加しSortメソッドで並べ替えが可能ですがWordには
>>シートの概念がないのでそうはいかない、という意味で書いたので実際にExcelシートを
>>流用するということではありません。
>
>私はExcelシートを流用しようという事は考えておりませんよ。
>リストボックスに取り込むべきデータの所在をお聞きしたかったのです。
>こちらはWord掲示板ですので、データはWord文書上に存在するのだと考えるのが自然
>だと思ったのですが?
>
>>やりたかったのは文書内の表の並べ替えをしたいのではなくてリストボックス内のデー
>>タを並べ替えたいのです。
>
>はい、了解していますよ。
>Wordでも表のソート機能を使って配列に取り込めば良いと考えたのですが?
>Excelでも
>>Excelでは作業用のシートを適宜追加しSortメソッドで並べ替えが可能ですが
>と仰っていますように、データの並び替えをされているのですから同じ事ですよね。

そういわれますとそうですね。納得です。
その方法でも試してみることにします。
WORDの表を配列に取り込む場合、具体的にどういうコードになりますでしょうか?」

表は2列×任意の複数行とします。
index    data
1    あああ
2    いいい
3    ううう
..
・ツリー全体表示

【35】Re:ユーザーフォームに最大化最小化ボタン
質問  WhiteRabbit  - 03/5/15(木) 15:15 -

引用なし
パスワード
   ▼H. C. Shinopy さん:

こんにちは。ご丁寧な返信ありがとうございます。
紹介していただいた書籍は、参照させていだくこともあるかもしれませんので書き留めておきますね。

>「どういう・どのように」に付いて
>API関数については、VBAの関数にない(あればAPIは必要ないので、当然ですが)
>OS寄りの処理ができる関数と思って下さい。
>(DLL<動的結合ライブラリ>から、関数の形で処理を呼び出します。)
>API関数は、Declareステートメントでプロシージャの前に書き込むと
>(あるいは新たに標準モジュールを挿入して、そこに書き込むと)、
>通常のFunctionプロシージャと同じように
>VBAのプロシージャから呼び出すことができます。

標準の関数ではないのですね。なんとなくわかりました。
#素人には手強いということが(笑)

>VBAでの作譜では、現実の作業に対処するため、APIに関連するものは
>できたものをコピーして貼り付けというのが通常であり、
>掲示板上にコードを載せたいのは山々ですが、
>しかし、著作権上の問題があり、この本も「転載することを禁止」と
>誠にご尤もなことですので、↓で御容赦ください。
>
>御質問の「ユーザーフォームに最大化・最小化ボタンを付加し、
>リサイズを可能にする」に付いて使う関数は、次の4つです。
>
>クラス名またはキャプションタイトルを与えて
>ウィンドウハンドルを取得する関数:FindWindowA
>ウィンドウに関する情報を取得する関数:GetWindowLongA
>ウィンドウの属性を変更する関数:SetWindowLongA
>ウィンドウのメニューバーを再描画する関数:
>User32.dllに媒介変数を指定したものを使用
>
>使い方に付いて
>実際のVBAでは、例として(途中は・・・で隠して)次のようになります。
>[標準モジュール]では、次のように書き込みます。
>Public Const GWL_STYLE = -16&      'ウィンドウスタイルを取得する
>・・・
>・・・
>'クラス名またはキャプションタイトルを与えて
>'ウィンドウハンドルを取得する関数の宣言
>Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
>  (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
>・・・
>Declare ・・・
>・・・
>' ここから下が、これまで作ってきたプロシージャ
>Sub UserForm1Run()
>' ユーザーフォームを表示
> UserForm1.Show
>End Sub
>
>Sub ・・・
>・・・
>End Sub
>・・・
>・・・
>
>[ユーザーフォーム]では、次のように書き込みます。
>Private Sub UserForm_Initialize()
>' ユーザーフォームに最大化・最小化ボタンを付加する処理
>  Dim ・・・
>  myHwnd = FindWindow(myClassName, Me.Caption)
>  lngNewLong = GetWindowLong(myHwnd, GWL_STYLE)
>  ・・・
>End Sub
>
>↑と、このようになります。これを「・・・」を含めて全部書けば、
>処理が可能なわけです。
>しかし、自前で全部調べて作るとなると…気が遠くなります。
>
>立ち読みできなかった件に付いて
>他の書籍では、APIを話題に取り上げているのは
>現在のところ、次の1冊だけと言っていいと思います。
>(それ以外は、C言語用で参考になりません。
>但し、Excel VBAの書籍で同じ話題を扱っているものがあれば、
>使い回しができるはずです。)
>『Excel VBAによるWin32 APIプログラミング入門』
>著者:大村あつし
>出版社:エーアイ出版
>ISBN:4871938905
>サイズ:単行本
>発行年月: 2002年 04月
>価格: 2680円+悪税
>「第8章 ウィンドウの操作」の
>「UserForm2 ユーザーフォームに最大化・最小化ボタンを付加し、
>リサイズを可能にする」
>
>私が本屋を見て歩いた限りでは、紹介した書籍は、
>大型書籍店・電気店直営本屋で扱っています。
>(勿論、どの本屋も取り寄せ購入は可能です。)
>図書館で扱っていれば、立ち読みした上、合法的にコピーできますが、
>どうも図書館では、電算分野の書籍はすぐに内容が古くなるためか
>余り扱わないようです。
>また、図書館によっては確固たる方針として
>この分野の書籍を他館に完全に一任し、
>自館に置かないとしている場合があります。
>図書館に購入を請求できる場合もあるようですが、
>出版社と水面下で係争中の模様で、総ての館でできるわけではありません。
>(電算機の発達で紙媒体業者が衰退産業になってしまっている上、
>図書館が新刊本を貸し出すため、本屋の売上が激減している現実があります。)
>
>それにしても、僅か数頁を読むために、
>厚い本を1冊丸ごと買うのは誠に勿体ない話で、
>そのための掲示板なのですが…この板上ではお役に立てず残念です。
>
>おっと! ここまで書いた所で、検索して見たら、
>サイト上にコードを載せている方を発見しました。
>まずは、一覧して下さい。
>K窓 http://homepage2.nifty.com/kmado/
> Excel技 マクロ編 http://homepage2.nifty.com/kmado/ke_m8.htm
> 『E00M074(Excel2000)
> 項目 UserFormのウィンドウスタイルを変更する
> 内容説明 UserFormのウィンドウスタイル(属性)を
> 変更する方法を示します。
> その1)ユーザーフォームに最大化最小化ボタンを付け、
> 又サイズ変更可能にする』

上のWebサイトのサンプルコード、いまだちんぷんかんぷんですが、動かしてみたところ、最大化最小化はばっちりうまくいきました。研究してなんとか使用できるようにしてみようと思います。
あと一点よろしいでしょうか。サンプルコードではユーザーフォームを標準サイズにした際にマウスで移動することができないようです。
これはなんとかなるものでしょうか?

遅ればせながら当方の環境はWindows2000&Word2000です。

よろしくお願いします。
・ツリー全体表示

【34】Re:ユーザーフォームに最大化最小化ボタン
回答  H. C. Shinopy  - 03/5/14(水) 11:22 -

引用なし
パスワード
   「どういう・どのように」に付いて
API関数については、VBAの関数にない(あればAPIは必要ないので、当然ですが)
OS寄りの処理ができる関数と思って下さい。
(DLL<動的結合ライブラリ>から、関数の形で処理を呼び出します。)
API関数は、Declareステートメントでプロシージャの前に書き込むと
(あるいは新たに標準モジュールを挿入して、そこに書き込むと)、
通常のFunctionプロシージャと同じように
VBAのプロシージャから呼び出すことができます。

VBAでの作譜では、現実の作業に対処するため、APIに関連するものは
できたものをコピーして貼り付けというのが通常であり、
掲示板上にコードを載せたいのは山々ですが、
しかし、著作権上の問題があり、この本も「転載することを禁止」と
誠にご尤もなことですので、↓で御容赦ください。

御質問の「ユーザーフォームに最大化・最小化ボタンを付加し、
リサイズを可能にする」に付いて使う関数は、次の4つです。

クラス名またはキャプションタイトルを与えて
ウィンドウハンドルを取得する関数:FindWindowA
ウィンドウに関する情報を取得する関数:GetWindowLongA
ウィンドウの属性を変更する関数:SetWindowLongA
ウィンドウのメニューバーを再描画する関数:
User32.dllに媒介変数を指定したものを使用

使い方に付いて
実際のVBAでは、例として(途中は・・・で隠して)次のようになります。
[標準モジュール]では、次のように書き込みます。
Public Const GWL_STYLE = -16&      'ウィンドウスタイルを取得する
・・・
・・・
'クラス名またはキャプションタイトルを与えて
'ウィンドウハンドルを取得する関数の宣言
Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
  (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
・・・
Declare ・・・
・・・
' ここから下が、これまで作ってきたプロシージャ
Sub UserForm1Run()
' ユーザーフォームを表示
 UserForm1.Show
End Sub

Sub ・・・
・・・
End Sub
・・・
・・・

[ユーザーフォーム]では、次のように書き込みます。
Private Sub UserForm_Initialize()
' ユーザーフォームに最大化・最小化ボタンを付加する処理
  Dim ・・・
  myHwnd = FindWindow(myClassName, Me.Caption)
  lngNewLong = GetWindowLong(myHwnd, GWL_STYLE)
  ・・・
End Sub

↑と、このようになります。これを「・・・」を含めて全部書けば、
処理が可能なわけです。
しかし、自前で全部調べて作るとなると…気が遠くなります。

立ち読みできなかった件に付いて
他の書籍では、APIを話題に取り上げているのは
現在のところ、次の1冊だけと言っていいと思います。
(それ以外は、C言語用で参考になりません。
但し、Excel VBAの書籍で同じ話題を扱っているものがあれば、
使い回しができるはずです。)
『Excel VBAによるWin32 APIプログラミング入門』
著者:大村あつし
出版社:エーアイ出版
ISBN:4871938905
サイズ:単行本
発行年月: 2002年 04月
価格: 2680円+悪税
「第8章 ウィンドウの操作」の
「UserForm2 ユーザーフォームに最大化・最小化ボタンを付加し、
リサイズを可能にする」

私が本屋を見て歩いた限りでは、紹介した書籍は、
大型書籍店・電気店直営本屋で扱っています。
(勿論、どの本屋も取り寄せ購入は可能です。)
図書館で扱っていれば、立ち読みした上、合法的にコピーできますが、
どうも図書館では、電算分野の書籍はすぐに内容が古くなるためか
余り扱わないようです。
また、図書館によっては確固たる方針として
この分野の書籍を他館に完全に一任し、
自館に置かないとしている場合があります。
図書館に購入を請求できる場合もあるようですが、
出版社と水面下で係争中の模様で、総ての館でできるわけではありません。
(電算機の発達で紙媒体業者が衰退産業になってしまっている上、
図書館が新刊本を貸し出すため、本屋の売上が激減している現実があります。)

それにしても、僅か数頁を読むために、
厚い本を1冊丸ごと買うのは誠に勿体ない話で、
そのための掲示板なのですが…この板上ではお役に立てず残念です。

おっと! ここまで書いた所で、検索して見たら、
サイト上にコードを載せている方を発見しました。
まずは、一覧して下さい。
K窓 http://homepage2.nifty.com/kmado/
 Excel技 マクロ編 http://homepage2.nifty.com/kmado/ke_m8.htm
 『E00M074(Excel2000)
 項目 UserFormのウィンドウスタイルを変更する
 内容説明 UserFormのウィンドウスタイル(属性)を
 変更する方法を示します。
 その1)ユーザーフォームに最大化最小化ボタンを付け、
 又サイズ変更可能にする』
・ツリー全体表示

【33】Re:リストボックス内を並べ替え
回答  らいでん  - 03/5/14(水) 0:16 -

引用なし
パスワード
   らいでんです。

>Excelでは作業用のシートを適宜追加しSortメソッドで並べ替えが可能ですがWordには
>シートの概念がないのでそうはいかない、という意味で書いたので実際にExcelシートを
>流用するということではありません。

私はExcelシートを流用しようという事は考えておりませんよ。
リストボックスに取り込むべきデータの所在をお聞きしたかったのです。
こちらはWord掲示板ですので、データはWord文書上に存在するのだと考えるのが自然
だと思ったのですが?

>やりたかったのは文書内の表の並べ替えをしたいのではなくてリストボックス内のデー
>タを並べ替えたいのです。

はい、了解していますよ。
Wordでも表のソート機能を使って配列に取り込めば良いと考えたのですが?
Excelでも
>Excelでは作業用のシートを適宜追加しSortメソッドで並べ替えが可能ですが
と仰っていますように、データの並び替えをされているのですから同じ事ですよね。
・ツリー全体表示

【32】Re:ユーザーフォームに最大化最小化ボタン
お礼  WhiteRabbit  - 03/5/13(火) 15:19 -

引用なし
パスワード
   ▼H. C. Shinopy さん:
>API関数を使って、最大化・最小化ボタンを
>ユーザーフォームに表示することが可能です。
>Excel VBAのコードがそのまま使えます。
>
>下記の本に事例が載っています。
>ExcelとWordの両方のVBEを起動し、
>コードをコピーして貼り付けしてみたところ、
>動作することを確認しました。
>
>『ExcelVBA 実用サンプルコレクション』
>著者 プロジェクトA 渡辺ひかる
>監修 プロジェクトA 大村あつし
>ISBN 4-7973-2087-7
>出版社 ソフトバンクパブリッシング
>価格 3000円+悪税
>
>「Section Q 外部プログラムを利用する。」の中の
>「Tips Q-060 ユーザーフォームに最大化・最小化ボタンを付加し、
>リサイズを可能にする」
>
>御参考までに。

レスが遅れましてすみません。あまりに反応が無いので半ば諦めていました。
それと書籍のご紹介ありがとうございます。
しかし、近隣の本屋さんには置いていないようで、立ち読みもできません。
差しさわりの無い程度で、どのようにしたらよいのか教えてくださいませんでしょうか?
それとAPI関数というのは何でしょうか?
どういう関数をどのように使えばいいのかわかるとありがたいです。
よろしくお願いします。
・ツリー全体表示

【31】Re:リストボックス内を並べ替え
お礼  WhiteRabbit  - 03/5/13(火) 15:14 -

引用なし
パスワード
   ▼らいでん さん:
レスありがとうございます。返信がおくれましてすみません。
あまりに反応ないので半ば諦めておりました。

>>リストボックスの項目を追加セットする際に
>
>追加セット?・・ってどういったことでしょうね?
>単にAddItemするという事とは違うのですか?

分かりづらくてすみません。AddItemでもいいんですが、Listプロパティに指定するデータをどうにかできないかと考えていました。

>>Excelだとシートの並べ替えで済むのですが
>
>シートの並び替えですか?シートの順を並び替えてどうするのでしょう?
>多分Wordで表内データの並び替えを行って、そのデータをリストボックス
>に取り込みたい、という事だと想像しましたが?

Excelを引き合いに出したのがまずかったかもしれません。
Excelでは作業用のシートを適宜追加しSortメソッドで並べ替えが可能ですがWordにはシートの概念がないのでそうはいかない、という意味で書いたので実際にExcelシートを流用するということではありません。

やりたかったのは文書内の表の並べ替えをしたいのではなくてリストボックス内のデータを並べ替えたいのです。
※このリストボックスには「使用用語」のリストみたいな用途で適宜用語が追加されます。

並べ替えについては他のサイトを検索したら配列変数にとりこんでからのソートで対応できそうだということは判りました。この方法で取り組み中ですが、もし他に簡単な方法がありましたらご教示ください。
・ツリー全体表示

【30】Re:shellの終了と同期させるには? 追...
回答  H. C. Shinopy  - 03/5/11(日) 8:22 -

引用なし
パスワード
   先にVBScriptでの処理を書き込みしましたが、
Word VBAで処理する方法があることが判りました。
(不勉強で、すみません。)

後日、Excel VBAの本を見ていたら、使えそうなコードを発見しました。
(メモ帳を起動して、その終了を待つというものでした。)
それを使い回そうとしたのですが、いろいろ試した結果、
下記のコードとなりました。

1.デスクトップにABC.batがあるものとします。
  (この処理でABCo.txtが出力されるものとします。)

2.VBE上から[ツール]の[参照設定...]で、
  [Windows Script Host Object Model]をチェックして下さい。

3.「ChDir …」で「ABC.bat」のあるフォルダを指定します。
  これを指定しない場合、マイドキュメントの中を見にいくようです。

Sub AbcVBA()
  '参照設定:Windows Script Host Object Model
  Dim myWsh As IWshRuntimeLibrary.WshShell
  Set myWsh = CreateObject("Wscript.Shell")
  '
  ChDir "C:\Documents and Settings\User\デスクトップ"
  myWsh.Run "ABC.bat", 1, True
  '
  MsgBox "ABC.batが終了しました。"
  Documents.Open "C:\Documents and Settings\User\My Documents\ABCo.txt"
  Set myWsh = Nothing
End Sub
[終わり]
・ツリー全体表示

【29】Re:ユーザーフォームに最大化最小化ボタン
回答  H. C. Shinopy  - 03/5/10(土) 9:04 -

引用なし
パスワード
   API関数を使って、最大化・最小化ボタンを
ユーザーフォームに表示することが可能です。
Excel VBAのコードがそのまま使えます。

下記の本に事例が載っています。
ExcelとWordの両方のVBEを起動し、
コードをコピーして貼り付けしてみたところ、
動作することを確認しました。

『ExcelVBA 実用サンプルコレクション』
著者 プロジェクトA 渡辺ひかる
監修 プロジェクトA 大村あつし
ISBN 4-7973-2087-7
出版社 ソフトバンクパブリッシング
価格 3000円+悪税

「Section Q 外部プログラムを利用する。」の中の
「Tips Q-060 ユーザーフォームに最大化・最小化ボタンを付加し、
リサイズを可能にする」

御参考までに。
・ツリー全体表示

【28】Re:リストボックス内を並べ替え
発言  らいでん  - 03/5/4(日) 1:42 -

引用なし
パスワード
   レスつかないですね。

>リストボックスの項目を追加セットする際に

追加セット?・・ってどういったことでしょうね?
単にAddItemするという事とは違うのですか?

>Excelだとシートの並べ替えで済むのですが

シートの並び替えですか?シートの順を並び替えてどうするのでしょう?
多分Wordで表内データの並び替えを行って、そのデータをリストボックス
に取り込みたい、という事だと想像しましたが?

あまり感覚的な言葉を使わない方が宜しいかと。
・ツリー全体表示

【26】ユーザーフォームに最大化最小化ボタン
質問  WhiteRabbit  - 03/4/28(月) 17:25 -

引用なし
パスワード
   こんにちは。
ユーザーフォームに最大化最小化ボタンを付けることは可能なのか教えてください。
・ツリー全体表示

【25】Re:shellの終了と同期させるには?
回答  H. C. Shinopy  - 03/4/27(日) 23:32 -

引用なし
パスワード
   どういう状況下(環境・処理全体…)での処理なのか判りませんが、
御質問の判らん部分は独断と偏見で解釈し、返信させて頂きます。
万一、的ハズレな回答でしたら、ガセネタの1つとして、
読み飛ばして頂くことで、お許し下さい。

さて、Shell関数について、VBE上からヘルプを見ると:
xxxの値については「指定したプログラムが問題なく実行できると、プログラムのタスク ID が返されます。タスク ID は、実行中のプログラムを識別する重複しない番号です。指定されたプログラムが実行できないと、エラーが発生します。」
また「タスク ID は、実行中のプログラムを識別する重複しない番号です。実行可能プログラムを実行し、実行が完了するとプログラムのタスク ID を示すバリアント型 (内部処理形式 Double の Variant) の値を返します。プログラムの実行に問題が発生した場合は、0 を返します。」とあります。

Sendkeys関数のヘルプに使用例があり、「電卓をアクティブにします。」処理で(タイトル バーのタイトルを指定する代わりに)タスクIDを指定しています。
Sub CalcX()
 Dim ReturnValue, I
 ReturnValue = Shell("CALC.EXE", 1)  ' 電卓を実行します。
 AppActivate ReturnValue        ' 電卓をアクティブにします。
 For I = 1 To 20            ' ループ カウンタを設定します。
  SendKeys I & "{+}", True      ' 電卓にキー コードを転送して、
 Next I                ' I の値に 1 を加算します。
 SendKeys "=", True          ' 和を求めます。
 SendKeys "%{F4}", True        ' Alt + F4 キーを転送して電卓を終了します。
End Sub

同期については「・・・ メモ 既定の設定では、Shell 関数はプログラムを非同期的に実行します。したがって、Shell関数を使用して実行を開始したプログラムが終了しなくても、Shell関数の次のステートメントは実行されます。」とあります。
しかし、ヘルプを見た限りでは、「既定の設定」を変更できる余地はないようです。(VBA上のShell関数に同期・非同期を指定するパラメーター部分がないのです。)

また、市販されている書籍を探すと、著作権の都合で内容は載せませんが…
大村あつし 著「Excel VBAによるWin32 APIプログラミング入門」
エーアイ出版 刊(www.ai-pub.co.jp) 税別2680円
この本の「第4章 プログラムの実行」に
「Shell関数で起動したアプリケーションが終了するまで待機する」節(92頁)に
APIを利用した何やら物々しいVBAコードが載っています。


ここでは、あっさり処理全体をVBAではなくVBScriptを使用して、
WSHの機能で全体の処理を実行したらどうでしょうか?
(WSHは、WindowsMe・WindowsXPに対応。)

VBScriptのShell関数と同等のステートメントでは「終了待ちをする・しない」の指定ができます。
下記のスクリプトを「ファイル名.vbs」(テキスト形式で拡張子に「vbs」を指定して)保存し、これをダブルクリックして起動すれば、御質問に沿えそうな処理ができます。
(但し、Shell関数の戻り値は常に「0」です。呼び出したコマンドの終了待ちをして、終了後の戻り値を得るので、「0」になるということのようです。)
ここでは、「ABC.bat」処理内で「ABCo.txt」ファイルを出力作成し、
最後にWordに読み込むと仮定して、スクリプトは下記の通りになります。


Rem テキスト形式ファイル出力Word読み込み処理VBScript
Option Explicit
Dim WshShell, tmpInt
Dim myWord
'
Set WshShell = WScript.CreateObject("WScript.Shell")
tmpInt = WshShell.Run ("ABC.bat", 1, True)  ' True は処理待ち。
MsgBox “WScript.Shellの戻り値:” & tmpInt ' 多分、無意味な表示。
'
Set myWord = WScript.CreateObject("Word.Application")
myWord.Visible = True
myWord.Documents.Open " C:\Documents and Settings\User名\My Documents\ABCo.txt"
'
tmpInt = MsgBox("処理が終了しました。", vbOKonly+vbInformation)
WScript.Quit


この後は全く余談になりますが、
もし「ABC.bat」の処理をこのスクリプトの中に書き込んでしまえば、
(当然ながら)同期を考える必要はなくなります。
「ABC.bat」で何を処理しているのか判りませんが、
御参考までにということで…
下記のスクリプトは、「ABC.txt」ファイルを「ABCo.txt」で出力し、
それをWordで読み込むという処理です。
下記のスクリプトを「ファイル名.vbs」で保存し、
これに「ABC.txt」ファイルをドラッグ&ドロップすると、処理を実行します。


Rem テキスト形式ファイル出力Word読み込み処理VBScript
Option Explicit
Dim objDrop, objFS, objTsIn, objTsOt
Dim tmpInt, tmpTsOt, Txt
Dim myWord
'
If WScript.Arguments.Count <= 0 Then
 tmpInt = MsgBox("テキスト形式ファイルのアイコンを、" & vbCrLf _
 & WScript.ScriptName & "のアイコン上に、" & _
 "ドラッグ&ドロップして下さい。" & vbCrLf _
 & "ファイル名に「o」を付けたファイルを作成します。", _
 vbOKonly+vbInformation)
 WScript.Quit
End If
'
objDrop = Wscript.Arguments(0)
tmpInt = MsgBox("入力元ファイル:" & vbCrLf & objDrop, vbOKCancel+vbInformation)
If tmpInt = 2 Then
 WScript.Quit
End If
'
Set objFS = WScript.CreateObject("Scripting.FileSystemObject")
Set objTsIn = objFS.OpenTextFile(objDrop, 1)
'
tmpTsOt = objFS.GetParentFolderName(objDrop) _
 & "\" & objFS.GetBaseName(objDrop) & "o." & objFS.GetExtensionName(objDrop)
tmpInt = MsgBox("出力先ファイル:" & vbCrLf & tmpTsOt, vbOKCancel+vbInformation)
If tmpInt = 2 Then
 objTsIn.Close
 WScript.Quit
End If
Set objTsOt = objFS.CreateTextFile(tmpTsOt, True, False)
'
Do While Not objTsIn.AtEndOfStream
 Txt = objTsIn.ReadLine
 objTsOt.WriteLine (Txt)
Loop
'
objTsIn.Close
objTsOt.Close
' Microsoft Wordの起動
Set myWord = WScript.CreateObject("Word.Application")
myWord.Visible = True
myWord.Documents.Open tmpTsOt
'
tmpInt = MsgBox("処理が終了しました。", vbOKonly+vbInformation)
WScript.Quit
・ツリー全体表示

【23】shellの終了と同期させるには?
質問  てけてけ  - 03/4/25(金) 21:00 -

引用なし
パスワード
   こちらには初めて書込ます。
ワードマクロの中で

テキストファイルに書き出す
xxx=shell(abc.bat)
abc.batで出力されたファイルを読み込む

のように外部のバッチを実行し、このバッチでできたファイルを読み込む場合、
shellの完了を待つ必要がありますが、xxxの値をどう利用したら可能かわかりません。
コーディング例を教えて頂けるとありがたいです。
宜しくお願い致します。
・ツリー全体表示

【22】Re:WORDマクロの解説本について教えてくださ...
回答  H.C.Shinopy  - 03/4/24(木) 22:26 -

引用なし
パスワード
   長い間、放っておかれているようですが、
失業で俄かVBA作譜者になった私で宜しければ・・・

これまで、私が知り得た情報を書き込み致します。
無論ながらWord VBAに関心をお持ちでしょうから、
下記の本は既にお持ちであることは、
重々承知の上で敢えて返信させて頂きます。
(本の内容を既に御存知の場合は、御容赦ください。)


もし、この掲示板を御覧の方で、
他の「文献情報」をお持ちの方は、
追加の書き込みをお願い致します。
==== ==== ==== ====
楽天ブックスその他での検索によれば、
WordVBAの本については、次の2冊があります。

1.菅野佐知子「Word97VBAハンドブック」ナツメ社

2.大野悟・アトラス出版企画「10日で覚えるWordVBA入門教室」翔泳社

この内、1は題名からして内容は古そうですし、
(大型書籍店でも置いていません。)
取り寄せしてまで、買う価値があるかどうか・・・

従って、2だけです!(それでも、1999年8月発行の古い本です。)
お勧めとは言っても、ほかに選択の余地がありません。
(私の場合、秋葉原のLaox Book館で発見し入手しました。税別3200円)
本の内容に誤りがあるので、お買い上げの場合は、
翔泳社のサイトで訂正記事を確認して下さい。
http://www.shoeisha.com/book/errata/er_detail.asp?bid=943


少しばかりWordVBAの記事が載っている本としては、
次のものがあります。
(果たして、役に立つような記事があるかどうか・・・
本屋で立ち読みしてから、要否を判断して下さい。)

西上原裕明「Word2002 300の技」技術評論社 税別1980円
(この本は、300項目の中からVBAの記事を探さないといけません。)

岩田安雄「繰り返しよサヨウナラ 入門VBAマクロ」カットシステム
 税別2200円
(Microsoft Office全般の本です。)

Windowsプログラミング愛好会「VBAがわかる500の技」技術評論社
 税別1980円(これもMicrosoft Office全般の本です。)
(「オフィスワーク自動化計画 Wordを操作」「VBA厳選テクニック100 Word」)


断片的にWordVBAの記事が載っている本はとしては、
次のものがあります。

CRN「Word2002 トラブル解決の裏技」秀和システム
 税別2000円(「第10章 マクロの活用」)

工藤喜美枝/木村幸子
「すぐ効くWordのトラブルシューティング Q&A 276」
 毎日コミュニケーションズ 税別1600円
(「第12章 VBA」)

掌田津耶乃「Windows Script Hostハンドブック」毎日コミュニケーションズ
 税別2400円
(「Section 24 スクリプトで『ワード』を操作する」
「Section 25『ワード』をカラフルにしてみよう」)


Excel VBAの本の中で、連携処理として
Wordが関わる記事が載っている本としては、
次のものがあります。(各々、僅か1〜2件の記事ですが)

田中亨・木下裕人「Excel2000 VBAの魔術師」オーム社
 税別1900円
(ExcelのデータをWordで段組にして取り込む処理)

渡辺ひかる「Excel VBA 実用サンプルコレクション」
 ソフトバンク・パブリッシング 税別3000円
(「Section Q Q-2 Office連携 ExcelからWordを起動し、
 シートデータで差込印刷を行う」)

大村あつし「かんたんプログラミング Excel2002 VBA[応用編]」技術評論社
 税別2580円(「第9章 他のソフトとの連携」)

VBテックラボ&瀬戸遥「10日でおぼえるExcel VBA 応用教室 2000対応」
(「Lesson20 ExcelのデータをWordで印刷する」)税別3200円

瀬戸遥「Excel VBA即効サンプル集」翔泳社
 税別1800円
(「#119 ExcelからWordを起動する」
「#120 ワークシートをOLEでwordにコピー」)

[以上]
・ツリー全体表示

【21】リストボックス内を並べ替え
質問  WhiteRabbit  - 03/4/24(木) 15:17 -

引用なし
パスワード
   こんにちは。
リストボックスの項目を追加セットする際に五十音もしくはJISコード順に並べ替えする方法を教えてください。Excelだとシートの並べ替えで済むのですが、Wordではどうしてよいかわかりません。
よろしくお願いします。
・ツリー全体表示

【20】ありがとうございます!
お礼  ikasumi  - 03/4/24(木) 1:29 -

引用なし
パスワード
   丁寧に教えてくださってありがとうございます!
仰るとおり、全て教えてもらったのでは自分のためにもなりませんよね。
ここまで教えてもらっておきながらまだ試行錯誤を繰り返していて
恥ずかしい限りですが(汗
頑張って組み立てます!

本当にありがとうございました!
・ツリー全体表示

【19】Re:フォルダの中の複数ワープロファイルを1...
発言  らいでん  - 03/4/22(火) 23:19 -

引用なし
パスワード
   らいでんです。
訂正と追記です。

>    If myFile.Type Like "Microsoft Word 文書" _
>      And Not myFile Like "~$*" Then

としている所は
    If myFile.Type Like "Microsoft Word 文書" _
      And Not myFile.Name Like "~$*" Then
に訂正します。

それから実際にコードを走らせてみると

>      Set OldDoc = Documents.Open(myFile.Path)

では、かなりバタバタして忙しい感がありますので
      Set OldDoc = Documents.Open( _
          FileName:=myFile.Path, Visible:=False)
とした方が良いかもしれません。

最後にこういったフォルダ内のファイルを総当りして1ファイル
に統合する処理では、ファイルを取り出す順番が重要になりますね。
今回はFileSearch オブジェクトを使用する方法を紹介します。
コードを全て提示してしまうと、面白くないと思いますので
ファイルをソートして取り出す部分だけのサンプルです。
後はご自分で頑張って組み立ててみてください。

Sub Test2()
  Dim i As Long
  
  Application.ScreenUpdating = False
  
  With Application.FileSearch
    .NewSearch
    '検索対象フォルダの指定
    .LookIn = "C:\My Documents"
    'サブフォルダを検索対象外
    .SearchSubFolders = False
    .MatchAllWordForms = True
    .FileType = msoFileTypeWordDocuments
    'ファイル名でソートして検索実行
    If .Execute(SortBy:=msoSortByFileName, _
      SortOrder:=msoSortOrderAscending) > 0 Then
      For i = 1 To .FoundFiles.Count
        Debug.Print .FoundFiles(i)
        If InStr(1, .FoundFiles(i), "~$") = 0 Then
          Debug.Print FileLen(.FoundFiles(i))
          '以下ファイルオープン処理等
          '
        End If
      Next
    End If
  End With
  
  Application.ScreenUpdating = True
End Sub
・ツリー全体表示

【18】Re:フォルダの中の複数ワープロファイルを1...
回答  らいでん  - 03/4/21(月) 2:15 -

引用なし
パスワード
   はじめまして。らいでんです。
私もこちらへは初めての書き込みになります。

以下はサンプルです。VBEの[ツール]→[参照設定]で
「Microsoft Scripting Runtime」にチェックを入れてください。

処理の内容は大雑把に言えば、文書を順に開いてコピー&新規文書に
ペーストしています。

留意すべき点としては、無限にコピー&ペーストが行えるわけではなく
Wordファイルサイズの制限に引っかかるので
'ファイルサイズの制限
としている下の行の数値をお使いのWordのバージョンにあわせて
適当に調節してください。(2000以降は32MB。バージョンを明記の事)
もっとも、このサイズ制限の処理はいい加減です。^-^;

Sub Test()
  Dim Fso As New FileSystemObject
  Dim myFolder As Folder
  Dim myFile As File
  Dim NewDoc As Document
  Dim OldDoc As Document
  Dim myRng As Range
  Dim myFlag As Boolean
  Dim Fsize As Long
  
  Const myPath = "C:\My Documents" 'フォルダ指定
  myFlag = False

  Set NewDoc = Documents.Add
  Set myFolder = Fso.GetFolder(myPath)
  
  For Each myFile In myFolder.Files
    If myFile.Type Like "Microsoft Word 文書" _
      And Not myFile Like "~$*" Then
      Fsize = Fsize + myFile.Size
      Debug.Print myFile.Size
      'ファイルサイズの制限
      If Fsize > 30000000 Then Exit For
      Debug.Print myFile.Name
      Set OldDoc = Documents.Open(myFile.Path)
      DoEvents
      With OldDoc
        .Content.Copy
        .Close False
      End With
      Set OldDoc = Nothing
      Set myRng = NewDoc.Content
      myRng.Collapse Direction:=wdCollapseEnd
      If myFlag = True Then
        myRng.InsertBreak Type:=wdPageBreak
      End If
      DoEvents
      myRng.Paste
      myFlag = True
    End If
    DoEvents
  Next
  
  Set myFile = Nothing
  Set myFolder = Nothing
  Set Fso = Nothing
  Set myRng = Nothing
  Set NewDoc = Nothing
End Sub
・ツリー全体表示

【17】フォルダの中の複数ワープロファイルを1つ...
質問  ikasumi  - 03/4/17(木) 17:45 -

引用なし
パスワード
   初めまして。VBA始めたばかりの超初心者です。
フォルダの中に入っている複数のワードファイルを改ページしながら
1つのファイルにしたいのですが。
どうすればよろしいのでしょうか?
・ツリー全体表示

【16】Re:段落番号の書式が設定されているかどうか...
回答  H.C.Shinopy  - 03/3/8(土) 11:22 -

引用なし
パスワード
   段落番号? 段落書式? 
ツールバーでいう[書式]の[箇条書きと段落番号]の設定のことでしょうか?

VBEの右上の[質問を入力してください]欄に、
「ListString」「ListValue」「ListParagraphs」
「ParagraphFormat」「Lists」「ListFormat」
「ListGalleries」と各々入力してみて下さい。
段落番号または行頭文字の付いた箇条書き段落に関するヘルプが表示されます。

以下に、御質問に沿えそうな使用例をヘルプから抜き書きしましたので、
参考にしてみて下さい。

Sub 段落数値文字列()
 Rem 選択範囲の最初の段落の数値と
 Rem その値を表す文字列の両方を表示します。
 v = Selection.Range.ListFormat.ListValue
 lstring = Selection.Range.ListFormat.ListString
 MsgBox "数値 " & v & " は、文字列 [" & lstring & "] で表されます"
End Sub

Sub 各文字スタイル()
 Rem 選択範囲内の各文字のスタイルを表示します。
 Dim c As Variant
 For Each c In Selection.Characters
  MsgBox "Style: " & c.Style
  MsgBox "ParagraphFormat.Style: " & c.ParagraphFormat.Style
 Next c
End Sub

Sub 箇条書き強調()
 Rem 作業中の文書で箇条書き書式が設定された段落のコレクションに、
 Rem 強調表示を設定します。
 For Each para In ActiveDocument.ListParagraphs
  para.Range.HighlightColorIndex = wdTurquoise
 Next para
End Sub

Sub 箇条書き背景着色()
 Rem 1 番目の文書で、段落番号または行頭文字を
 Rem 使った箇条書きが設定されている各段落の背景を黄色にします。
 For Each numpar In Documents(1).ListParagraphs
  numpar.Shading.BackgroundPatternColorIndex = wdYellow
 Next numpar
End Sub

Sub 箇条書き二重線()
 Rem 次の使用例は、作業中の文書で
 Rem 2 番目の箇条書きの段落すべてに、二重下線を引きます。
 For Each mypara In ActiveDocument.Lists(2).ListParagraphs
  mypara.Range.Underline = wdUnderlineDouble
 Next mypara
End Sub
・ツリー全体表示

【15】段落番号の書式が設定されているかどうかの...
質問  chihiro  - 03/2/10(月) 16:54 -

引用なし
パスワード
   教えていただきたいのですが

段落書式が設定されているかいないかを
VBAで判断するにはどうすればいいのでしょうか?

誰か お願いします
・ツリー全体表示

44 / 45 ページ ←次へ | 前へ→
ページ:  ┃  記事番号:
207512
(SS)C-BOARD v3.8 is Free