主にマクロレコーダーを使用して、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接続を再作成するためのマクロを作成した理由です。