Excel VBA質問箱 IV

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

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


5008 / 13646 ツリー ←次へ | 前へ→

【53093】VB⇔VBA間での質問 たけ 07/12/14(金) 10:07 質問[未読]
【53096】Re:VB⇔VBA間での質問 neptune 07/12/14(金) 13:56 発言[未読]
【53107】こういう事をしたい たけ 07/12/15(土) 12:10 質問[未読]
【53110】Re:こういう事をしたい neptune 07/12/15(土) 13:08 発言[未読]
【53126】Re:こういう事をしたい たけ 07/12/16(日) 12:56 質問[未読]
【53133】Re:こういう事をしたい neptune 07/12/16(日) 21:49 発言[未読]
【53134】Re:こういう事をしたい neptune 07/12/16(日) 22:43 発言[未読]

【53093】VB⇔VBA間での質問
質問  たけ  - 07/12/14(金) 10:07 -

引用なし
パスワード
   VBAからVB画面(DLL)を呼んで、
VB画面で何かしら表示されている内容を変更(※)したりして

 ※例としてリストボックスに名前が10件初期表示されていて
  それをリストボックスから5件削除する)

VBAに戻ってきて再度VB画面(DLL)を表示した時、
前回表示した内容(5件リストボックスに表示されている状態)を
保持しておきたいのですが、
何か良い方法はありますでしょうか?
VB側でのhideを使って非表示は? と思ったのですが、
どうも無理な様です。

やはりVBAとVB間で画面の状態を引き渡すやり方しか
ないのでしょうか?

【53096】Re:VB⇔VBA間での質問
発言  neptune  - 07/12/14(金) 13:56 -

引用なし
パスワード
   ▼たけ さん:
こんにちは

>やはりVBAとVB間で画面の状態を引き渡すやり方しか
>ないのでしょうか?
私も、その方法か、物理的にHDに保存しておくかくらいしか思いつきません。

>VB側でのhideを使って非表示は? と思ったのですが、
>どうも無理な様です。
それか、DLL側を弄くって、dllの方の画面を最小化するとか、
デスクトップウィンドウの範囲外に移動させるとかのメソッドを実装するとか。
・・出来るのかな??

【53107】こういう事をしたい
質問  たけ  - 07/12/15(土) 12:10 -

引用なし
パスワード
   neptune さん

返信有難う御座います。
実は某業務で工数及び、メンテナンスを考えて
作業しているものです。

メイン画面(VBA)

AというEXCELブックの起動(オープン)

検索画面(VB)





動きの詳細は
1.AというEXCELブック起動時
  VBの検索画面を表示します。
  検索画面で検索条件をAのEXCELマクロにパラメータ渡し
  SQLを発行します。その後検索条件にあったものをAに表示して
  検索画面を非表示にします。
2.AというEXCELブックには、
  ボタンがあり押下すると検索画面が表示されます。
  この時上記1の検索内容を画面に表示する必要があります。

といった時に、
1.検索画面はEXE? DLL?
 VB→VBAにパラメータ渡しをしたい。
 パラメータ渡しが無理ならVBでDATファイル作成して
 VBAでDATファイルを読込みSQL発行させる事も考える。
2.検索画面の表示、非表示のコントロール
 前回の検索条件を新たに画面開いた時にも表示しないといけない。

問題としては以上2点あります。
いい案等あれば宜しくお願いします。

【53110】Re:こういう事をしたい
発言  neptune  - 07/12/15(土) 13:08 -

引用なし
パスワード
   ▼たけ さん:
こんにちは

私ならということで書かせていただきます。
>動きの詳細は
>1.AというEXCELブック起動時
>  VBの検索画面を表示します。
>  検索画面で検索条件をAのEXCELマクロにパラメータ渡し
>  SQLを発行します。その後検索条件にあったものをAに表示して
>  検索画面を非表示にします。
>2.AというEXCELブックには、
>  ボタンがあり押下すると検索画面が表示されます。
>  この時上記1の検索内容を画面に表示する必要があります。
>
>といった時に、
>1.検索画面はEXE? DLL?
> VB→VBAにパラメータ渡しをしたい。
> パラメータ渡しが無理ならVBでDATファイル作成して
> VBAでDATファイルを読込みSQL発行させる事も考える。
VB側は変更が利くということで理解してもよろしいのでしょうか?
好みの問題でしょうが、私ならDLLで行くと思います。
ならば、前にも書きましたが、Application.runでvaliant型でパラメータとして
渡すか(valiantが渡せるかどうかは検証してませんが)、
それが無理なら、たけ さんの考えるように、何らかのDataファイルを作成して
VB側のFormが表示される際に見に行く、閉じる際にデータを保存、と言うような
事をすると思います。

>2.検索画面の表示、非表示のコントロール
> 前回の検索条件を新たに画面開いた時にも表示しないといけない。
見えなくすれば良いだけなら、
前にも書きましたが、デスクトップのWindowの外に出すと言うのも
手だとは思います。
例えば、
Private Sub Command1_Click()
  Me.Left = -1000
End Sub
とすると、左側に少し隠れますが、これをForm全体を隠れるように設定
するだけで、見えなくはなります。

exeの方がいいのかな???
DLLはメンテで再配布する時Regsvr32で再登録しなければいけなかったですかね???
それならexeの方が楽チンか?

【53126】Re:こういう事をしたい
質問  たけ  - 07/12/16(日) 12:56 -

引用なし
パスワード
   neptune さん:

こんにちは。
回答して頂き有難う御座います。

DLLはレジストリ登録しないといけないみたいですね。

画面をずらすという手は私は思いつきませんでしたが
なかなかいい案だと思います。
その案で画面をずらしてVBA上にVB画面を表示し
VB画面をアクティブにしVBAをアクティブにしない様にする
VBA内で何か命令ありますでしょうか?
VBのshowのモーダル制御みたいのですが・・・

【53133】Re:こういう事をしたい
発言  neptune  - 07/12/16(日) 21:49 -

引用なし
パスワード
   ▼たけ さん:
こんにちは

>画面をずらすという手は私は思いつきませんでしたが
>なかなかいい案だと思います。
>その案で画面をずらしてVBA上にVB画面を表示し
>VB画面をアクティブにしVBAをアクティブにしない様にする
>VBA内で何か命令ありますでしょうか?
>VBのshowのモーダル制御みたいのですが・・・
VBA内での命令は無いと思います。VB側でTimerなどを利用して一定時間ごと
にActiveWindowを監視して、VB側を常にActiveにしておくと言うような
手しか思い浮かびません。

 話は最初に返りますが、目的がわからなかったので書かなかったのですが、
もし、Excelに追加機能を加えたいならCOM AddInを作成するって
いう手もあります。
Excelのに所有されたウィンドウとして、Formを表示する事
で、さまざまな事が解決できると思います。
 出来るかどうかは長い間触ってないので忘れてしまいました。
調べるか、簡単なTestをして見て下さい。多分そうなったような気がします。

「Visual Basic で Office 2000 COM アドインを作成する方法」
//support.microsoft.com/kb/238228/ja

「COMAddIns コレクション オブジェクト」
//msdn.microsoft.com/library/ja/default.asp?url=/library/ja/vbaof10/html/ofobjCOMAddIns.asp

【53134】Re:こういう事をしたい
発言  neptune  - 07/12/16(日) 22:43 -

引用なし
パスワード
   追記
↑はVB6の話です。Vb.net以降の話はわかりません。

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