Word VBA質問箱 IV

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

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


301 / 308 ツリー ←次へ | 前へ→

【26】ユーザーフォームに最大化最小化ボタン WhiteRabbit 03/4/28(月) 17:25 質問[未読]
【29】Re:ユーザーフォームに最大化最小化ボタン H. C. Shinopy 03/5/10(土) 9:04 回答[未読]
【32】Re:ユーザーフォームに最大化最小化ボタン WhiteRabbit 03/5/13(火) 15:19 お礼[未読]
【34】Re:ユーザーフォームに最大化最小化ボタン H. C. Shinopy 03/5/14(水) 11:22 回答[未読]
【35】Re:ユーザーフォームに最大化最小化ボタン WhiteRabbit 03/5/15(木) 15:15 質問[未読]
【37】Re:ユーザーフォームに最大化最小化ボタン H. C. Shinopy 03/5/15(木) 22:20 回答[未読]
【38】Re:ユーザーフォームに最大化最小化ボタン WhiteRabbit 03/5/16(金) 11:54 お礼[未読]

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

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

【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 ユーザーフォームに最大化・最小化ボタンを付加し、
リサイズを可能にする」

御参考までに。

【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関数というのは何でしょうか?
どういう関数をどのように使えばいいのかわかるとありがたいです。
よろしくお願いします。

【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)ユーザーフォームに最大化最小化ボタンを付け、
 又サイズ変更可能にする』

【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です。

よろしくお願いします。

【37】Re:ユーザーフォームに最大化最小化ボタン
回答  H. C. Shinopy  - 03/5/15(木) 22:20 -

引用なし
パスワード
   私の環境はWinXP・Word2002ですが、
(震度2の地震でHDが壊れ、それを機会にアップグレードしました。
PCを購入して5カ月後の災難でした。)
Word VBAで大きな仕様変更はない模様です。

ユーザーフォームでのマウスのドラッグによる移動の件ですが、
動かないですか???
コマンドボタンなどコントロール群を配置する部分を
ドラッグしていませんか?

タイトルバーの部分をマウスでドラッグしてみて下さい。

【38】Re:ユーザーフォームに最大化最小化ボタン
お礼  WhiteRabbit  - 03/5/16(金) 11:54 -

引用なし
パスワード
   ▼H. C. Shinopy さん:
>私の環境はWinXP・Word2002ですが、
>(震度2の地震でHDが壊れ、それを機会にアップグレードしました。
>PCを購入して5カ月後の災難でした。)
>Word VBAで大きな仕様変更はない模様です。
>
>ユーザーフォームでのマウスのドラッグによる移動の件ですが、
>動かないですか???
>コマンドボタンなどコントロール群を配置する部分を
>ドラッグしていませんか?
>
>タイトルバーの部分をマウスでドラッグしてみて下さい。

こんにちは。いつも返信ありがとうございます。
タイトルバーの部分をマウスでつかんで移動しても移動できないのです。
どうも現象が出るのは2番目のサンプルコード(最大化のプロシージャ)を組み込んだ場合に発生するようです。これを削除すればうまくいきました。

301 / 308 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
207137
(SS)C-BOARD v3.8 is Free