ShellExecute で

解決


しもぢ  2005-07-25 12:20:25  No: 91064  IP: [192.*.*.*]

VB6.0からアクセスファイルを開きたくて以下のソースで起動させようとしました。

DaraMDB = ファイルパス

Dim Ret As Long
 Ret = ShellExecute(hwnd, "open", DataMDB, vbNull, vbNull, SW_SHOW)

このとき一瞬  アクセス2000って起動時に出る画面がでますが、すぐ終了してしまい、その後は手動でmdbを開くこともできなくなります。

再起動すれば,mdbファイルは手動で開けるように戻りました。
何が原因なのでしょうか?よろしくお願い致します。

編集 削除
ガッ  2005-07-25 12:29:25  No: 91065  IP: [192.*.*.*]

DB&Access使ったこと無いから分からないけど、
とりあえず、vbNullが怪しいかと。
宣言見たいのもの:
ShellExecute(
  ByVal hwnd As Long,
  ByVal lpOperation As String,
  ByVal lpFile As String,
  ByVal lpParameters As String,
  ByVal lpDirectory As String,
  ByVal nShowCmd As Long) As Long

編集 削除
しもぢ  2005-07-25 13:03:03  No: 91066  IP: [192.*.*.*]

vbNull ⇒  Null にすると、Nullの使い方が不正でエラーになりました。

編集 削除
しもぢ  2005-07-25 13:06:49  No: 91067  IP: [192.*.*.*]

⇒vbNullString でうまくいきました。

編集 削除
しもぢ  2005-07-25 13:12:27  No: 91068  IP: [192.*.*.*]

今度は、さらにmdbファイルのマクロにAutoexec を作成し、起動時にレポートのプレビューを表示させようとしたのですが、ShellExecute で起動させるとただ単にファイルがオープンされるだけなんです。  最終的にはVBからマクロにパラメータを渡して、そのパラメータによってレポートを区別できるようにしたいのですが、技術的には可能なのでしょうか?

編集 削除
魔界の仮面弁士  2005-07-25 17:24:32  No: 91069  IP: [192.*.*.*]

案1) データを/cmdパラメータで渡して、Access側ではCommand()関数にて
  受け取って判定。実行は、/xパラメータか AutoExec マクロで処理。

案2) ShellExecuteで起動するのではなく、オートメーションで操作する。

編集 削除
たくみ  2005-07-26 07:00:49  No: 91070  IP: [192.*.*.*]

> 技術的には可能なのでしょうか?
当然できます。(私は普通によく使ってます)

# たいがいShell系の話しは山ほど出つくしてて
# いっぱいころがってるはずなんですけど・・
# まめに検索されましたか?

結局、私も魔界の仮面弁士のおっしゃっているパターンになっちゃうので
かぶってなんなのですが、その場合
「案1」が比較的書きやすいのでよいのではと。

で、もって今回は引数を伴うパターンですし、かつShellExecuteに
あまりなれてらっしゃならい?ようですので、ここはあえてShell()で
「案1」をやられたほうが、
(あんまり神経を使わなくともとりあえず動かせるレベルになる
という意味においては)無難だと思います。(経験談)

で、どういうコードを書くのか?  ですが、まずはご自身で
調べていただくことが前提なので、そこまではあえて書きません。
(下記のイメージを参考にされてください)

> そのパラメータによってレポートを区別できるようにしたいのです
あ、当然ながらAccess側でその引数を(ひとつに合体された文字列
として受け取りそれを)分解させます。
例えば、その引数の文字列の前半部がMDBのフルパス名、
後半部がレポートの種類名(あるいはレポートの種別フラグ)など
というイメージです。
もちろんその前半部後半部の区切り目はご自身でデリミタとなる
文字(例えば/とか,とか)を決め指定すればよいのです。

編集 削除
たくみ  2005-07-26 07:11:02  No: 91071  IP: [192.*.*.*]

誤解されそうなので、つけたし。

Shell()でやるのなら・・
最後のくだりの前半部、後半部うんぬんのイメージですが
その前半部のMDB名のさらにその前にMSACCESS.EXEの
フルパスを書いておきます。
で、それを含めてひとつの文字列としてShell()の引数に
渡します、という感じです。

編集 削除
たくみ  2005-07-26 14:34:47  No: 91072  IP: [192.*.*.*]

あっ、あろうことか大先生を、、、
呼び捨てにしておりました。>魔界の仮面弁士さま
未明からずっとナチュラルハイ状態だったもので。。
本当にお許しください。

編集 削除
横槍  2005-07-26 15:25:50  No: 91073  IP: [192.*.*.*]

よこやりすいません。詳しい方が集まっておられるようで。
私も ShellExecute  を使用してmdbファイルを開くことをしています。
私の場合はオープン後、Docmd.RunMacro マクロ名  で任意のマクロを実行してみてうまくいったのですが、うまくいくのは1回目だけで2回続けると何も起こりません。しかもしもぢさんと同じく一度その処理を行なうと、手動でもmdbファイルが開けません。  何かが足りないのでしょうか?ご教授よろしくお願い致しますです。

編集 削除
魔界の仮面弁士  2005-07-26 17:30:08  No: 91074  IP: [192.*.*.*]

横槍さん宛:

人の質問に割り込む事は控えて下さい。話の流れが追いにくくなります。
(しかもここは、すでに[解決]マークが付けられたスレッドですし)

下記のV友掲示板で、同様の質問をされておられるようなので、
こちらの質問は取り下げて、V友の方で話を続けませんか?
http://www.gizshare.com/vbtomo/boards/vbdatabase.php?do=spread&num=1720#1722

編集 削除