VB6.0からアクセスファイルを開きたくて以下のソースで起動させようとしました。
DaraMDB = ファイルパス
Dim Ret As Long
Ret = ShellExecute(hwnd, "open", DataMDB, vbNull, vbNull, SW_SHOW)
このとき一瞬 アクセス2000って起動時に出る画面がでますが、すぐ終了してしまい、その後は手動でmdbを開くこともできなくなります。
再起動すれば,mdbファイルは手動で開けるように戻りました。
何が原因なのでしょうか?よろしくお願い致します。
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
vbNull ⇒ Null にすると、Nullの使い方が不正でエラーになりました。
⇒vbNullString でうまくいきました。
今度は、さらにmdbファイルのマクロにAutoexec を作成し、起動時にレポートのプレビューを表示させようとしたのですが、ShellExecute で起動させるとただ単にファイルがオープンされるだけなんです。 最終的にはVBからマクロにパラメータを渡して、そのパラメータによってレポートを区別できるようにしたいのですが、技術的には可能なのでしょうか?
案1) データを/cmdパラメータで渡して、Access側ではCommand()関数にて
受け取って判定。実行は、/xパラメータか AutoExec マクロで処理。
案2) ShellExecuteで起動するのではなく、オートメーションで操作する。
> 技術的には可能なのでしょうか?
当然できます。(私は普通によく使ってます)
# たいがいShell系の話しは山ほど出つくしてて
# いっぱいころがってるはずなんですけど・・
# まめに検索されましたか?
結局、私も魔界の仮面弁士のおっしゃっているパターンになっちゃうので
かぶってなんなのですが、その場合
「案1」が比較的書きやすいのでよいのではと。
で、もって今回は引数を伴うパターンですし、かつShellExecuteに
あまりなれてらっしゃならい?ようですので、ここはあえてShell()で
「案1」をやられたほうが、
(あんまり神経を使わなくともとりあえず動かせるレベルになる
という意味においては)無難だと思います。(経験談)
で、どういうコードを書くのか? ですが、まずはご自身で
調べていただくことが前提なので、そこまではあえて書きません。
(下記のイメージを参考にされてください)
> そのパラメータによってレポートを区別できるようにしたいのです
あ、当然ながらAccess側でその引数を(ひとつに合体された文字列
として受け取りそれを)分解させます。
例えば、その引数の文字列の前半部がMDBのフルパス名、
後半部がレポートの種類名(あるいはレポートの種別フラグ)など
というイメージです。
もちろんその前半部後半部の区切り目はご自身でデリミタとなる
文字(例えば/とか,とか)を決め指定すればよいのです。
誤解されそうなので、つけたし。
Shell()でやるのなら・・
最後のくだりの前半部、後半部うんぬんのイメージですが
その前半部のMDB名のさらにその前にMSACCESS.EXEの
フルパスを書いておきます。
で、それを含めてひとつの文字列としてShell()の引数に
渡します、という感じです。
あっ、あろうことか大先生を、、、
呼び捨てにしておりました。>魔界の仮面弁士さま
未明からずっとナチュラルハイ状態だったもので。。
本当にお許しください。
よこやりすいません。詳しい方が集まっておられるようで。
私も ShellExecute を使用してmdbファイルを開くことをしています。
私の場合はオープン後、Docmd.RunMacro マクロ名 で任意のマクロを実行してみてうまくいったのですが、うまくいくのは1回目だけで2回続けると何も起こりません。しかもしもぢさんと同じく一度その処理を行なうと、手動でもmdbファイルが開けません。 何かが足りないのでしょうか?ご教授よろしくお願い致しますです。
横槍さん宛:
人の質問に割り込む事は控えて下さい。話の流れが追いにくくなります。
(しかもここは、すでに[解決]マークが付けられたスレッドですし)
下記のV友掲示板で、同様の質問をされておられるようなので、
こちらの質問は取り下げて、V友の方で話を続けませんか?
http://www.gizshare.com/vbtomo/boards/vbdatabase.php?do=spread&num=1720#1722
ツイート | ![]() |