Access&VBの質問について

このQ&Aのポイント
  • VBからDAOでパスワードがかかっているACCESSに接続する際の引数の設定方法について質問です。
  • ACCESSでクエリーを作成し、その結果をエクセルにエクスポートする処理において、パラメータの設定方法について質問です。
  • VBとAccessの連携について、具体的なコード例と共に説明をお願いします。
回答を見る
  • ベストアンサー

Access&VB

2つほど質問があるのですが、 1.VBからDAOでパスワードがかかっているACCESSに接続する場合に引数はどのように設定したらよいのでしょうか? 2.ACCESSでクエリーを作成し、そのクエリーの結果をエクセルにエクスポートするという処理をやります。 このときクエリーはパラメータを要求します。どこかのタイミングでパラメータをわたせないでしょうか? 具体的にはこんな感じです。 Dim objDb As Object Dim appAccess As Object Set appAccess = CreateObject("Access.Application") appAccess.OpenCurrentDatabase "パス名\Memo.mdb" appAccess.DoCmd.TransferSpreadsheet 1, 8,"クエリー名","パス名.xls", False,"" もしくは、 appAccess.DoCmd.RunMacro "マクロ名" (マクロの中身は「TransferSpreadsheet」) 分りにくい説明ですが、よろしくお願いします。

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

  • ベストアンサー
  • arata
  • ベストアンサー率49% (139/279)
回答No.3

その後解決しましたでしょうか? お休みになったので、ちょっと実験してみました。 ちゃんとできましたので、報告しておきます。 Dim objAccess As Access.Application Set objAccess = CreateObject("Access.Application") objAccess.OpenCurrentDatabase "C:\TEST.MDB" objAccess.DoCmd.OpenForm "FORM2", acNormal objAccess.Forms("FORM2")![個数].Value = 200 objAccess.DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel8, "Q1", "C:\TEST1.XLS" objAccess.DoCmd.Close acForm, "FORM2" objAccess.CloseCurrentDatabase objAccess.Quit パラメータを渡すためだけに作ったフォームがFORM2で、FORM2に[個数]と言うテキストボックスを配置しました。 パラメータクエリーQ1のパラメータの部分は>[Forms]![FORM2]![個数]という感じで、フォームの[個数]を参照するようにしてあります。 FORM2を開いて、テキストボックス[個数]に値を入れてから、TranserSpreadSheetをするようにしました。

zima_id
質問者

お礼

いろいろとありがとうございました。ちょっとやってみます。

その他の回答 (2)

  • arata
  • ベストアンサー率49% (139/279)
回答No.2

そうです。 1.Accessでテーブルと連結していないフォームを作って、パラメータクエリーのパラメータは、フォームのテキストボックスを参照するようにしておく。 2.実行時には、VBのコントロールにより、Accessのフォームを開き、フォームのテキストボックスにVBのテキストボックスの値を入れる。 3.TransferSpreadsheetを行う とすると解決するような気がするのですが、うまくいくかどうかは、試していないので、わかりません。

  • arata
  • ベストアンサー率49% (139/279)
回答No.1

1については、下記のURLを参照してください。 2については、試したわけではないので自信はありませんが、パラメータクエリーのパラメータをフォームのテキストボックスを参照するようにして、マクロやモジュールで、フォームのテキストボックスに値を入れておけば、聞かれないのではないかと思うのですが。

参考URL:
http://www.microsoft.com/japan/support/kb/articles/J029/1/72.htm
zima_id
質問者

補足

1については解決しました。ありがとうございました。 2について、arataさんが言われている"フォーム"とはaccessのフォームのことでしょうか? VBのフォーム上のテキストボックスの値をクエリーが要求する引数として渡したいのですが、やっぱりそんなことはできないのでしょうか?

関連するQ&A

  • ゾンビエクセル・・・(ExcelVBA)

    ExcelのVBAからAccessを起動し、エクセルファイルのインポートを行っています。 この処理を行うと、その後エクセルを閉じてもプロセスにエクセルが残ってしまいます。 なぜこうなってしまうのか判りません。よろしかったら教えてください(><) 一応コードを書いてみます。TransferSpreadsheetのコードを実行しない場合はゾンビエクセルは残らないので、それが原因だとは思うのですが他の方法がわかりません。 よろしくお願いいたします。 Dim appAccess As Object Dim acImport, fname As String, ffname As String acImport = "acImport" fname = ThisWorkbook.Path & "\取込.mdb" ffname = ThisWorkbook.FullName Set appAccess = CreateObject("Access.Application") appAccess.OpenCurrentDatabase fname appAccess.DoCmd.TransferSpreadsheet , 8, _ "torikomi", ffname, True, "torikomi" Set appAccess = Nothing

  • Excel から Accessクエリーを実行したい

    下記のようなマクロを組んでMS Accessのクエリー結果をExcelに出力したいのですが「レコードがない」というエラーになります。正しいコーディングを教えてください。 Sub DataFromAccess() Dim AccessApp As Object Set AccessApp = CreateObject("Access.Application") myDBName = "C:\MyAccess.mdb" '出力先フルパス xlsName = "C:\Invoice.xls" With AccessApp .Visible = True .OpenCurrentDatabase myDBName, acViewNormal .DoCmd.OutputTo acOutputQuery, "クエリー名", acFormatXLS, xlsName, True .CloseCurrentDatabase .Quit End With Set AccessApp = Nothing End Sub

  • Access2.0、テーブルのエクスポート

    Access2.0のテーブルをWSHを使用してエクスポートしようとすると エラーとなってしまいます。 エラーメッセージは、以下のとおりです。 以前のバージョンのMicrosoft Accessデータベースにオブジェクトをインポートすることはできません。 以下に、コードを抜粋します。 Dim strName Dim objAccess Dim objDB Dim tbf Set objAccess = CreateObject("Access.Application") objAccess.Visible = False objAccess.OpenCurrentDatabase("c:\****.mdb") Set objDB = objAccess.CurrentDb objAccess.Docmd.TransferText 0,,"テーブル名","C:\****.txt" → ここで、エラーとなります。 どなたか、テーブルをエクスポートする方法を知ってる方、いらっしゃいませんか?

  • ExcelからVBAを使ってAccess2007のデータをコピーしたいのですが、うまくできません

    Access2000のDBをAccess2007に移行しましたが、Excel2007からAccessのDBを呼び出す事ができなくなりました。 DBを呼び出す方法はExcelからVBAでDBに接続し、オブジェクトを開く方法をとっていました。 AccessのDBの拡張子が○○.mdbならば接続できますが、○○.accdbになると接続できません。 VBAをDAOからADOに変更してみましたが、やはり、だめでした。 何かいい方法はないでしょうか。 お忙しいところ、申し訳ございませんが、何卒、よろしくお願い致します。 ちなみに下記のようなVBAを組んでいます。 Dim objDB As New ADODB.Connection Dim rcsTQ As New ADODB.Recordset Dim DBname Dim TQname Dim dbCol As Integer Dim rf As Field DBname = "\データの整理1.accdb" 'パス名とデータベース名を指定する。 TQname = "T受付データ" 'テーブル名、クエリー名を指定する。 'データベースに接続する objDB.Open _ "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & ThisWorkbook.Path & DBname 'テーブル、クエリを開く rcsTQ.Open TQname, objDB '書き出しをする Range("a10").Value = "テスト書き出し" dbCol = 0 For Each rf In rcsTQ.Fields dbCol = dbCol + 1 Cells(11, dbCol).Value = rf.Name Next rf Range("a12").CopyFromRecordset rcsTQ objDB.Close Set objDB = Nothing End Sub

  • エラー3011

    パス名もきちんと設定し、データもあっているのですが オブジェクトが存在しないか、名前、パス名が違うと エラーがでてしまいます。どこが違うのでしょうか? Dim db As String Dim db_Mdb As DAO.Database Dim rd_Mdb As DAO.Recordset Dim stSQL As String db = "C:\XXX\VB\kanri.mdb"   'パス名は、アドレスをコピー貼り付けしたので間違いないと思います) ”省略(データベースに接続)” stSQL = "select * from name where bango=0001;" Set rd_Mdb = db_Mdb.OpenRecordset(stSQL, dbOpenTable) お願いしますm(__)m

  • SQLコマンドを使ってテーブル名を任意に指定したい

    Accessのテーブル(もしくはクエリー)をExcelにエクスポートしたいのですが、Excelのブック名が同じで、Accessのテーブル名(もしくはクエリー名)が同じだと、同じシートに上書きされますよね。同一ブックにシート名を変えてエクスポートするために、Accessのテーブル名を変えたいのですが、どのようにしたら任意設定できるのでしょうか?下記のコマンドを使用している途中で挫折しました。別の方法でもいいので教えてください。 (記) Dim SQL As String SQL = "SELECT (フィールド)INTO (ここを任意のテーブル名に)FROM (クエリーを参照しています)" DoCmd.RunSQL SQL DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel8,(ここを任意のテーブル名に), (ブック名) 以上。。。

  • パススルークエリ&ACCESSテーブル VBA抽出方法

    ACCESSパススルークエリでSQLサーバーのテーブルからデータをインポートする場合において ACCESSのテーブルにあるデータを抽出条件としたいのですがSQL文の記述方法がわからなくて困っております。 根本的な考え方が間違っている可能性が高いのですがどのように記述したらよいか教えていただけますでしょうか。 よろしくお願いいたします。 ・SQLサーバーのテーブル名(S_USR)   USRID  MAIL   10001  10001@test.com   10002  10002@test.com   10003  10003@test.com ・ACCESSのテーブル名(T_USR)   USRID   10001   10003 ・パススルークエリ名(Q_USR)←ACCESS上 ・欲しい結果(T_RESULT)←ACCESS上のテーブル   USRID  MAIL   10001  10001@test.com   10003  10003@test.com 自分で考えたVBAです。 Private Sub Command1_Click() Dim db As DAO.Database Dim rs As DAO.Recordset Dim qDef As QueryDef Dim tDef As TableDef Dim SQLD As String Dim SQLA As String Set db = CurrentDb 'ACCESSテーブル内のデータを消す SQLD = "DELETE * FROM T_RESULT" DoCmd.RunSQL SQLD 'クエリの更新 db.QueryDefs.Delete "Q_USR" Set qDef = db.CreateQueryDef("Q_USR") 'ODBC接続実施 qDef.Connect = "ODBC;" 'フォームから取得したパラメーターを使ったクエリの設定 qDef.SQL = "select USRID, MAIL from S_USR where ID.USRID=S_USR" qDef.ReturnsRecords = True Set rs = qDef.OpenRecordset(dbOpenSnapshot,dsbSQLPassThrough,dbReadOnly) '追加クエリ SQLA = "INSERT INTO T_RESULT (USRID, MAIL) FROM Q_USR (USRID, MAIL) DoCmd.RunSQL SQLA rs.Close db.Close MsgBox "終了" Exit Sub End Sub

  • VB6.0からAccess2007のマクロを呼び出す方法について

    VB6.0からAccess2007のマクロを呼び出す方法について教えてください。 [vb6.0のソース] Private Sub ImportFile() Dim AccessMacro As Access.Application Set AccessMacro = GetObject("C:\test.mdb") AccessMacro.Run "Import" end Sub [test.mdbのマクロ] Public Sub Import() DoCmd.TransferText acImportDelim, "test インポート定義", "test", "C:\test.csv", False end Sub 上記の物を、XP+Access2003+VB6.0の環境でコンパイルし、Access2000が入っている環境で実行したところ、問題なくtest.mdbのマクロが実行できました。 (コンパイルした環境でも問題なく動作しました。) ところがこれをWin2003 + Access2007環境で実行したところ、 『実行時エラー 432 オートメーションの操作中にファイル名またはクラス名をみつけられませんでした。』 と表示されます。 おそらく、GetObject("C:\test.mdb")のところでエラーになっているものと思われるのですが、どのようにすれば原因が解消できるかが全くわかりません。 どなたがご教示ください。 よろしくお願いいたします。

  • アクセスのセキュリティの警告の非表示

    現在、VBSでアクセスのマクロを起動させているのですが、 起動時にセキュリティの警告を聞いてこないようにしたいのですが、 なにか方法はあるのでしょうか? ちなみに現在のプログラムは '' データベース名・・・db.mdb(デスクトップにある場合) マクロ名・・・macro Dim AcApp Set AcApp = CreateObject("Access.Application") AcApp.visible = true AcApp.OpenCurrentDatabase "C:\Documents and Settings\×××\デスクトップ\db.mdb" AcApp.DoCmd.RunMacro "macro" AcApp.CloseCurrentDatabase AcApp.Quit Set AcApp = Nothing です。 よろしくお願い致します。

  • VBからACCESSのレポート出力

    すみません。どうしてもわからないので、質問させて頂きます。 VB6.0 + ACCESS2000 で開発をしています。 インターフェイスはVB,DBはACCESSなのですが、帳票の出力も、 ACCESSで行いたいと思っております。 この時、クライアントにACCEESSが入っていない事も想定して、 ACCESSランタイムも用意しました。 デバッグマシン(OFFICEは入っていません)にランタイム(VB,ACCESS)を インストールして、実行ファイルを実行すると、印刷の部分で、「エラー429 Activeコンポーネントはオブジェクトを作成できません」とのエラーが出て、印刷ができません。 印刷以外は問題なく動いています。 開発マシンは、Win2000、デバッグマシンはWinXPで、ACCESSランタイムはOFFICE XP Developerで作成しました。 下記にソースコードも記載させて頂きます。 もちろん、開発ではきちんと動作しています。 Dim oleAccess As Access.Application Set oleAccess = GetObject(App.Path & "\data\data.mdb") Call oleAccess.DoCmd.OpenReport(ReportName, acPreview) oleAccess.DoCmd.Maximize oleAccess.Visible = True 当初は、「oleAccess.OpenCurrentDatabase」でDBを開いていたのですが、 ACCESSランタイム環境では、GetObjectの方が良いということを聞いたので、 上記の様になっています。 エラーが起きている行は、どうやら「GetObject」の行のようです(oleAccess.OpenCurrentDatabaseの場合でもエラー)。 ACCESSランタイムを使う事が初めてなので、手探りでやっているため、 的外れな所もあるかと思います。 何かアドバイスを頂ければ幸いでございます。 よろしくお願い致します。