如何解决我重新加载我的工作簿时,我的“数据库未find”ODBC连接错误?

主要使用macroslogging器,我创build了一个VBAmacros,用于在Excel和QuickBooks文件之间build立供应商列表连接。

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 

我将代码附加到一个button,以便用户可以更新供应商列表。 随着QuickBooks文件打开,这个片段大部分时间工作。 这就是我想改变的地方,我认为有两种方式可以实现:

选项1.每次按下button(并重新创buildODBC连接)时,都会要求用户input密码。 我想传递密码而不是询问用户。 将.SavePassword更改为True不会。

选项2.我认为有一个更好的方法来设置ODBC连接,所以不必为了刷新而重新创buildmacros。 只要QuickBooks和Excel文件保持打开状态,我就可以使用Excel中的内置刷新button(在Data – > Refresh All下)。 但是,如果我closuresExcel文件和QuickBooks文件,重新打开它们并尝试按刷新,我得到以下错误,这是我创build一个macros来重新创buildODBC连接的原因:

数据库未找到ODBC错误

您正在使用自定义报告ODBC驱动程序。 这是由QuickBooks提供的仅用于报告目的。 您只能在公司文件处于打开状态时使用此function,并且每次连接时都必须为报告用户input密码。 Intuit就是这样devise的。

可以编写VBA代码来创build并保持打开ODBC连接,以便您不必每次会话都要经历多次login过程。 但是,这不仅仅是复制代码的一小部分, 你必须有一个连接的全局variables,并正确地pipe理它。

更简单的解决scheme是使用QODBC驱动程序而不是自定义报告驱动程序。 我相信你会得到一个与QuickBooks企业捆绑在一起的副本。 我假设你有企业版,因为你有自定义报告。 QODBC需要进行一些设置,但一旦设置完毕,您应该能够避免login提示并获得与数据库的一致连接。