1

主にマクロレコーダーを使用して、ExcelとQuickBooksファイル間のベンダーリスト接続を設定するVBAマクロを作成しました。

Sub RefreshVendorList()
'
' RefreshVendorList Macro

'DatabaseName=3ae39a3bfa964f61a6f974654c1ddbe9;

Columns("C:E").Select
Selection.Delete Shift:=xlToLeft

With ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array(Array( _
    "ODBC;Driver={QB SQL Anywhere};UID=Purchasing;;ServerName=QB_data_engine_21;AutoStop=NO;" _
    ), Array("Integrated=NO;Debug=NO;DisableMultiRowFetch=NO")), Destination:= _
    Range("$C$1")).QueryTable
    .CommandText = Array( _
    "SELECT v_lst_vendor.name AS 'Vendor Name', v_lst_vendor_type.name AS 'Type', v_lst_vendor.is_hidden" & Chr(13) & "" & Chr(10) & "FROM QBReportAdminGroup.v_lst_vendor v_lst_vendor, QBReportAdminGroup.v_lst_vendor_type v_lst_vendo" _
    , _
    "r_type" & Chr(13) & "" & Chr(10) & "WHERE v_lst_vendor_type.id = v_lst_vendor.vendor_type_id AND ((v_lst_vendor.is_hidden=0) AND (v_lst_vendor_type.name='MBO'))" & Chr(13) & "" & Chr(10) & "ORDER BY v_lst_vendor.name, v_lst_vendor_type.name" _
    )
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = True
    .RefreshOnFileOpen = False
    .BackgroundQuery = True
    .RefreshStyle = xlInsertDeleteCells
    .SavePassword = False
    .SaveData = True
    .AdjustColumnWidth = True
    .RefreshPeriod = 0
    .PreserveColumnInfo = True
    .ListObject.DisplayName = "Table_PA_Vendor_List"
    .Refresh BackgroundQuery:=False
End With

'delete the "ishidden" column
Columns("E:E").Delete

End Sub

ユーザーがベンダーリストを更新できるように、コードをボタンに添付しました。QuickBooksファイルを開くと、このスニペットはほとんどの場合機能します。これは私が変更したいことであり、それを達成できると私が考える2つの方法があります。

オプション1.ボタンが押される(およびODBC接続が再作成される)たびに、ユーザーにパスワードの入力を求められます。ユーザーに尋ねるのではなく、パスワードを渡したいのですが。.SavePasswordをTrueに変更しても、それは行われません。

オプション2。ODBC接続をセットアップするためのより良い方法があると思います。そのため、マクロを更新するためだけにマクロによって「再作成」する必要はありません。QuickBooksとこのExcelファイルが開いたままである限り、Excelの組み込みの更新ボタン([データ]-> [すべて更新]の下)を使用できます。ただし、ExcelファイルとQuickBooksファイルを閉じて再度開き、更新を押してみると、次のエラーが発生します。これが、ODBC接続を再作成するためのマクロを作成した理由です。

データベースが見つかりませんODBCエラー

4

1 に答える 1

1

カスタムレポートODBCドライバーを使用しています。これは、レポートの目的でのみQuickBooksによって提供されます。これは会社のファイルが開いているときにのみ使用でき、接続するたびにレポートユーザーのパスワードを入力する必要があります。これが、Intuitが機能するように設計した方法です。

VBAコードを記述して、ODBC接続を作成して開いたままにしておくと、セッションごとに2回以上ログインプロセスを実行する必要がなくなります。ただし、これはコピーするコードのスニペットだけではありません。接続用のグローバル変数を用意し、適切に管理する必要があります。

より簡単な解決策は、カスタムレポートドライバーの代わりにQODBCドライバーを使用することです。QuickBooksEnterpriseにバンドルされているこのコピーを入手できると思います。カスタムレポートがあるので、Enterpriseエディションを使用していると想定しています。QODBCにはいくつかの設定が必要ですが、設定すると、ログインプロンプトを回避して、データベースへの一貫した接続を取得できるようになります。

于 2012-05-11T05:21:20.467 に答える