• ベストアンサー

VBからACCESSのデータを印刷するが2000とXPで・・・

OSが2000 VB6.0のSP5 ACCESS2000 の環境で開発してVBから下記のようにShell関数 でACCESSからの印刷をしているのですが 2000では印刷できるのですが XPでVB6.0のSP5 ACCESS2000の環境でコンパイルして実行しても 「起動するためのコマンドライン引数が不正です」 とメッセージがでてしまい印刷できません。 どなたか解る方がいましたら解答お願いします。 strMSACCESS = "C:\Program Fles\Microsoft Office\Office\MSACCESS.EXE" strCommand = strMSACCESS & " " & CurDir & "\AAA.mdb /x DoPrint /cmd " & "**" Work = Shell(strCommand, vbMinimizedFocus) AAA.mdbのあるフィールドの**の値のものだけを印刷しています。 Microsoft DAO3.6 Object Libraryを指定しています

質問者が選んだベストアンサー

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.5

>その後のstrCommand を付け加えるとやはりダメでした。 strCommandの内容、微妙にmasa00さんのコードを直してあるんですけど、そのままコピペしてもらえました?

masa00
質問者

お礼

うまくいきました。前回はなぜうまく動作しなかったのかは 解りませんが、2回目の回答でもう1度確認ため試したら うまく動作しました。 いろいろありがとうございます。

その他の回答 (6)

回答No.7

#3 の >strMSACCESS = """C:\Program Fles\Microsoft Office\Office\MSACCESS.EXE""" ですが、"Program Files" じゃなくて "Program Fles" になってますね。

masa00
質問者

お礼

そういえばそうですね。 私の質問のときから間違っていました。 申し訳ありません。 コーディングはProgram Filesになっていました。 いろいろありがとうございました。

  • 2ch
  • ベストアンサー率51% (64/125)
回答No.6

失礼 #3でMDBを処理してたみたいね。。。 昨晩、自宅環境 OS:Win2000pro AC:Access2002(XP) で#3の内容をコピってやってみたら、できなかった。。。 イメージ的にはできそうなんだけどね。 なぜなんだろう

masa00
質問者

お礼

補足などして再び回答いただいたりして ありがとうございました。 動作するようになりましたが、何がどうなって うまく動作しなかったのかは補足後の回答のソースで 少し理解できました。これから詳しく調べようと思います。 回答の時間を見ると深夜なので驚きました。 いろいろ協力していただき本当にありがとうございます。

  • 2ch
  • ベストアンサー率51% (64/125)
回答No.4

#3の言いたいことはあってるけど、例を書き間違ったんだと思う。 Accessパスはダブルで囲む必要ないけど、アクセスMDBのフルパスを処理しなけりゃいけない?。 まーそんな心配が無いように、ショート名にMDBを変換すりゃマルチに使える。 Private Declare Function FindExecutable Lib "shell32.dll" Alias "FindExecutableA" _   (ByVal lpFile As String, ByVal lpDirectory As String, ByVal lpResult As String) As Long Private Declare Function GetShortPathName Lib "kernel32" Alias "GetShortPathNameA" _   (ByVal lpszLongPath As String, ByVal lpszShortPath As String, ByVal cchBuffer As Long) As Long Sub Main()   Const DEF_FILE As String = "AAA.mdb"        'DBファイル名   Const DEF_PARAM As String = "/x DoPrint /cmd **"  'パラメータ      Dim strDBFile  As String      strDBFile = CurDir$ & "\" & DEF_FILE      If Not MyShell(strDBFile, vbMinimizedFocus, DEF_PARAM) Then     GoTo PGMEND   End If      MsgBox "起動成功"    PGMEND: End Sub '起動する関数 Function MyShell( _           ByVal inFilePath As String, _           Optional ByVal inWindowStyle As VbAppWinStyle = vbNormalFocus, _           Optional ByVal inParam As String _         ) As Boolean   Const MAX_SIZE As Long = 260      Dim lpszShortPath  As String * MAX_SIZE   Dim strShortPath  As String      Dim strExeName   As String * 1024     Dim strShell    As String      Dim lngProcessId  As Long   Dim lngRet     As Long      On Error GoTo PGMEND     'DBをショート名に変換   lngRet = GetShortPathName(ByVal inFilePath, lpszShortPath, ByVal Len(lpszShortPath))   If (lngRet = 0) Then     MsgBox "ショートファイル名に変換エラー"   End If   'ショートファイル名正規化   strShortPath = Left$(lpszShortPath, lngRet)         'DB存在チェック   If Dir(strShortPath) = "" Then     MsgBox "ファイル無い"     GoTo PGMEND   End If     '関連付いたEXEを取得   lngRet = FindExecutable(strShortPath, vbNullString, strExeName)   If (lngRet < 33) Then     MsgBox "関連付いたEXEの取得失敗"     GoTo PGMEND   End If      'SHELLに投げる文字を作成   strShell = Left$(strExeName, InStr(1, strExeName, vbNullChar) - 1) & " " & strShortPath   If (inParam <> "") Then     strShell = strShell & " " & inParam   End If      '起動   lngProcessId = Shell(strShell, inWindowStyle)   If (lngProcessId = 0&) Then     MsgBox "起動失敗"     GoTo PGMEND   End If      '正常終了   MyShell = True PGMEND:   Exit Function PGMERR:   Call MsgBox(Err.Number & vbCrLf & Err.Description)   GoTo PGMEND End Function って感じ この例は#2で発言した真意と違う内容。 #2で言いたかったのは、パラメータでAccessを利用するのではなく、Access起動後もVBで完全操作する方法の方が、何かと便利だからと思っての発言。 でもAccess側でコーディングがほとんどできたているなら、しゃーないとオモタ。

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.3

strMSACCESS = """C:\Program Fles\Microsoft Office\Office\MSACCESS.EXE""" strCommand = strMSACCESS & " """ & CurDir & "\AAA.mdb"" /x DoPrint /cmd " & "**" パス名にスペースが入っているからでしょう。 ダブルクォーテーションで囲いましょう。

masa00
質問者

お礼

試してみましたがダメでした。 strMSACCESS だけで実行したところACCESSは起動できました。 その後のstrCommand を付け加えるとやはりダメでした。 ありがとうございます。

  • 2ch
  • ベストアンサー率51% (64/125)
回答No.2
参考URL:
http://oshiete1.goo.ne.jp/kotaeru.php3?q=220860
masa00
質問者

補足

回答を参考にさせていただいて、調べた結果XPでEXEを 作成してインストール先が"C:\Program File\*****"に インストールすると印刷できなく"C:\Program File"の フォルダ以外だと正常に動作して印刷できました。 DLLの問題かACCESSのマクロの問題か解りません。 この内容で症状がおわかり頂けたらお時間があるときにでも 回答を頂けたらうれしく思います。 勉強不足で申し訳ありません。

回答No.1

(1) Work = Shell(strCommand, vbMinimizedFocus) の行にブレークポイントを設定して実行。 (2) イメディエイトウィンドで ?strCommand とするなどして、strCommand の内容を確認されてはどうでしょうか。

masa00
質問者

お礼

内容は確認してみましたが間違っていませんでした。 早々の解答ありがとうございます。

関連するQ&A

  • VBからMDBのアクセス

    VB初心者質問です。 開発環境 VB6 SP6 WIN2000  VB6からMDBの検索の手順について教えてください。 (質問) フォームに検索値用のテキストBOXを配置し、 その値でMDBのテーブルを検索し1件抽出する。 (検索値はテーブルのキー項目のため重複なし) 現在 Microsoft DAO 3.6 Object Library を参照しているので DAOで検索を行いたい。 知りたいことは検索の方法と 見つからなかった場合の判定についてです。 サンプルなどあればお願いいたします。

  • VBからACCESS2007に接続・・・

    VB6.0からACCESS2007へDAO接続しようとしているのですが、 拡張子が.mdbではなく、.accdbとなっているためか、接続できません。 なにか方法をご存じの方いらっしゃいましたら教えてください。。

  • VB6でデータベースを変えるとテーブル形式エラーになります

    VB6 とACCESS97 でプログラムを作成、問題なく動いていました。 事情により、このパソコンにACCESS2000をインストールし(ACCESS97 と ACCESS2000 の二つが入っています)VB6のデータベースをACCESS2000に変換しました。 VBの参照設定をMicrosoft Access8.0 Object Livery から9.0 に換え、ACCESS 2000のデータベースのプロパティでファイルの種類をMicrosoft Access から Microsoft Access for Windows に換えました。 これを実行すると「実行時エラー3343 データベースの形式 "C:\SALES\TEST.mdb" を認識できません」と出ます。 他に修正すべきところがあるのでしょうか?それともバージョンの違うACCESS を併用するのはまずいのでしょうか? TEST.mdb をクリックすると、ACCESS2000で問題なく立ち上がります。 なお、VBからACCESSへの接続は下記のように書いています。 Public DB As DAO.Database Set DB = DBEngine.Workspaces(0).OpenDatabase("C:\SALES\TEST.mdb") 宜しくお願いします。

  • データアクセスページへのクライアントからの参照について

    サーバー上にデータアクセスページを作成し、 クライアントから参照しようとしたところ 「Microsoft Office Webコンポーネントは、データベース'c:\Program Files\・・・・\mdb\AAA.mdb'に接続できません」というエラーメッセージが表示されます。 "AAA.mdb"はデータアクセスページで使用しているMDBとなっています。 状況はデータアクセスページのhtmファイルが置いてあるフォルダの配下にmdbファイルが置いてあります。 サーバー :Windows2003Serber Access2003 クライアント:WindpwsXP Office2003(Accessなし) なにか、原因を知っている方がいらっしゃいましたら 教えていただけませんでしょうか? 宜しくお願いいたします。

  • VBからACCESSのレポートをプレビューで表示

    お世話になっております。 VBからのMDBの帳票印刷の事で悩んでおります。 データベースとしてMDBを使用しているので、MDBのレポートのプレビュー を表示しようとしました所、下記のコードで実現することができました。 Dim oleAccess As Access.Application Set oleAccess = GetObject(App.Path & "\data.mdb") Call oleAccess.DoCmd.OpenReport(ReportName, acPreview) oleAccess.DoCmd.Maximize oleAccess.Visible = True 開発環境では問題なくプレビューの表示ができたのですが、 このプログラムを、ACCESSの入っていない環境で、ACCESSランタイムをインストール して実行すると、印刷時に「エラー429 ActiveXコンポーネントはオブジェクトを作成 できません」とのエラーが出て、印刷だけができません(その他の動作は正常です)。 エラー内容から、ACCESSオブジェクトの作成に失敗していると思うのですが、 Access.Application型を使わずに、ACCESSのプレビュー・印刷をする方法は無いのでし ょうか?(たとえば、DAO.DataBase型でMDBを開いて印刷する方法など・・・) 以前にも同じような質問をさせて頂いたのですが、私の力不足のため、再度ご質問させて頂きます。 どんな事でもいいので、アドバイスを頂ければ幸いです。 よろしくお願い致します。

  • VBからAccessのマクロを動かしたい(最適化したい)

    開発環境=NT4SP4 VB5 Access97 VBからMDBファイルを最適化するプログラムを作成しているのですが、 現在わかっているやり方は 最適化したファイルを作る→最適化元ファイルを削除→最適化後ファイルのファイル名を元ファイル名に直す。 という手順を踏んでいるのです。 これをAccessのマクロならば上記の手順のようにファイル削除したりしなくても 最適化が行えるそうなのです。 そこでVBからAccessのマクロを実行する方法がわからなくて困っているのです。 よろしくお願いいたします。

  • 【VB】あるフォルダにあるアクセスファイルを開きたい

    お世話になります。VB2005です。 あるフォルダにあるアクセスファイル(.mdb)を開きたいのですが、 shell関数を利用していろいろ試しているのですがうまくいきません。 ボタンをクリックしたら別ウィンドウで編集済みのアクセスファイルが開くといったことをしたいだけです。 恐れ入りますが、おわかりの方教えていただけないでしょうか。 よろしくお願いします。m(__)m

  • VB6(SP5)とAccessについて

    VB6(SP5)でプログラミングをしております。 Jetを使用して、Access97のデータベースを 使用しております。 データ(mdb)が入っているPCにoffice2003を インストールしたとします。(つまり、Access2003が入ります) この場合、データ(Access97)をアップグレードすれば プログラミングの変更が必要になると考えております。 が、データ(Access97)をアップグレードしなければ プログラミングの変更は不要と考えてかります。 つまり、元のデータのアップグレードをしなければ Access2003は、使用してもかまわないと考えております。 この3つの考えは合っているのでしょうか ? 宜しくお願い致します。

  • 他のMDBのマクロを実行する方法

    いつもご指導ありがとうございます。 マクロ実行中のMDBファイルから、他のMDBのマクロを実行する方法を教えてください。 (環境はWindows7 Access2007です) 過去を検索して C:\Program Files\Microsoft office\office12\MSACCESS.EXE C:\work\作成.mdb/xマクロ1 で起動→マクロ実行は成功したのですが 過去検索の中の Startup コマンド ライン オプション を利用して Shell("msaccess.exe c:\work\作成.mdb /x マクロ1") がどうしても不成功に終わります。 できれば、他のMDBが起動せず、「裏」・・(すみません用語がわからなくて)で実行できたらと考えているのですが。 宜しく、ご教授・ご指導をお願い致します。

  • Microsoft Accessのデータが、別々のmdbファイルとして

    Microsoft Accessのデータが、別々のmdbファイルとして2つあります。Accessを持っていないので、OpenOfficeで開いています。このmdbファイルにあるテーブルをまとめてOpenOfficのBaseで開くことはできないでしょうか? 具体的には、Microsoft Accessのデータ、「aaa.mdb」「bbb.mdb」というファイルがあります。 「既存のデータベースに接続」>「Microsoft Access」で、「aaa.mdb」や「bbb.mdb」に、個別に接続して新規データベースを作成することはできたのですが、どちらのmdbファイル内にあるテーブルも参照してクエリを作りたいんです・・・。 また、過去に無理矢理「bbb.mdb」のテーブルをCtrl+c>Ctrl+vで「aaa.mdb」にコピー&ペーストしていたこともありましたが、今回はテーブルサイズが大きいせいか、エラーになります(メッセージ:エラーが発生しました。コピー処理を続行しますか)。 データベースに関する基礎知識が足りないので、そもそもそれができるかどうかも分かりません。 Webで検索しても参考になるサイトを見つけられませんでした。 よろしくお願いいたします。

専門家に質問してみよう