私はこのサイトとVBAの両方に新しいので、私に同行してください。ご協力いただきありがとうございます。Excel VBA Oracleにリンクするアクセスクエリを実行中
私はAccessから既存のクエリを実行するVBA関数を持っています。問合せ中の表の中には、ユーザー固有のパスワード・アクセスが必要なOracleデータベースに格納されているものがあります。今、レポートを自動化するために書いたサブはこの関数を7回呼び出し、関数が呼び出されるたびにOracleパスワードを入力する必要があります(サブを停止し、パスワードを間違って入力するとエラーメッセージが表示されます彼らは7回それを行う必要がある場合、私は可能性の高いイベントとして参照してください)。コードは機能しますが、私はコードにパスワードを一度尋ねて、それを使って完了させる方法を見つけたいと思います。私が見つけたすべての解決策には、Oracleに直接接続して問合せを行うことが含まれています。これは、非常に複雑なSQLコーディングを必要とします。
また、いくつかのクエリでAccessとは異なる順序で列がExcelシートに表示されるという問題もあります。これは一貫しているようですので、大きな問題ではありませんが、将来の問題を回避する方法を知りたいと思います。
私が現在使用している機能のコードです。どんな洞察力も大いにありがとう!
Option Explicit
'Single Argument "qryName" as string. Runs access qry and copys recordset to active sheet.
Function AccessQueryPull(qryName As String)
'Declare variables
Dim rs As ADODB.Recordset
Dim cn As ADODB.Connection
'open the connection to the access database
Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=filePath.accdb;"
'format the command to run the query
Dim cmd As New ADODB.Command
cmd.CommandType = adCmdStoredProc
cmd.CommandText = qryName
cmd.ActiveConnection = cn
'execute the query
Set rs = New ADODB.Recordset
Set rs = cmd.Execute()
'copy data to excel sheet
ActiveSheet.Cells(2, 1).CopyFromRecordset rs
'Cleanup
rs.Close
Set rs = Nothing
なぜ機能を7回呼びますか?そして、この関数を呼び出すサブを表示してください。 – Parfait
私はプラントのスケジュールに基づいて将来のクエリのカットオフ日付を決定するのに役立つクエリと同様に、プラントごとのアクセスですでに設定されている履歴と前方参照のクエリが別々に存在するため、サブは単純です。変数を設定するだけで名前を調べたり、既存のデータをクリアしたり、いくつかの計算を実行したり、チャートをフォーマットしたりするなどの変数を設定するだけです。この関数で未定義のクエリを実行して一度呼び出せるようにする方法はありますか? –