Vba 我怎样才能解决我的问题;“未找到数据库”;重新加载工作簿时出现ODBC连接错误?

Vba 我怎样才能解决我的问题;“未找到数据库”;重新加载工作簿时出现ODBC连接错误?,vba,excel,odbc,quickbooks,Vba,Excel,Odbc,Quickbooks,我主要使用宏记录器创建了一个VBA宏,用于在Excel和QuickBooks文件之间建立供应商列表连接 Sub RefreshVendorList() ' ' RefreshVendorList Macro 'DatabaseName=3ae39a3bfa964f61a6f974654c1ddbe9; Columns("C:E").Select Selection.Delete Shift:=xlToLeft With ActiveSheet.ListObjects.Add(SourceT

我主要使用宏记录器创建了一个VBA宏,用于在Excel和QuickBooks文件之间建立供应商列表连接

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文件后,此代码段大部分时间都有效。这就是我想要改变的,我认为有两种方式可以实现:

备选案文1。每次按下按钮(并且重新创建ODBC连接)时,它都会要求用户输入密码。我想传递密码,而不是询问用户。将.SavePassword更改为True不起作用

备选案文2。我认为有一种更好的方法来设置ODBC连接,这样就不必通过宏“重新创建”来刷新它。只要QuickBooks和此Excel文件保持打开状态,我就可以使用Excel中的内置刷新按钮(在“数据->全部刷新”下)。但是,如果关闭Excel文件和QuickBooks文件,重新打开它们并尝试按“刷新”,则会出现以下错误,这就是我创建宏以重新创建ODBC连接的原因:


您正在使用自定义报告ODBC驱动程序。QuickBooks提供此信息仅用于报告目的。您只能在公司文件打开时使用此选项,并且无论何时连接,都必须为报告用户输入密码。这就是Intuit设计的工作方式

可以编写VBA代码来创建并保持打开ODBC连接,这样您就不必在每个会话中多次登录。然而,这不仅仅是要复制的代码片段;您必须为连接设置一个全局变量,并对其进行正确管理


一个更简单的解决方案是使用而不是自定义报表驱动程序。我相信您会得到一份与QuickBooks Enterprise捆绑的本。我假设您有企业版,因为您有自定义报告。QODBC需要一些设置,但是一旦设置好,您应该能够避免登录提示并获得到数据库的一致连接

您正在使用自定义报告ODBC驱动程序。QuickBooks提供此信息仅用于报告目的。您只能在公司文件打开时使用此选项,并且无论何时连接,都必须为报告用户输入密码。这就是Intuit设计的工作方式

可以编写VBA代码来创建并保持打开ODBC连接,这样您就不必在每个会话中多次登录。然而,这不仅仅是要复制的代码片段;您必须为连接设置一个全局变量,并对其进行正确管理


一个更简单的解决方案是使用而不是自定义报表驱动程序。我相信您会得到一份与QuickBooks Enterprise捆绑的本。我假设您有企业版,因为您有自定义报告。QODBC需要一些设置,但是一旦设置好,您应该能够避免登录提示并获得到数据库的一致连接

好吧,这就澄清了一些事情。我知道QODBC硬盘是随Enterprise提供的,所以我认为这就是我使用的;-)如何使用/查找企业随附的QODBC驱动程序?当我安装QB时,它安装在我的计算机上了吗?你必须下载并安装驱动程序。在QuickBooks帮助中搜索“ODBC”以获取说明,或者转到“感谢您的回复”,我今天将对此进行研究。好的,这就解决了一些问题。我知道QODBC硬盘是随Enterprise提供的,所以我认为这就是我使用的;-)如何使用/查找企业随附的QODBC驱动程序?当我安装QB时,它安装在我的计算机上了吗?你必须下载并安装驱动程序。在QuickBooks帮助中搜索“ODBC”以获取说明,或者转到感谢您的回复,我今天将对此进行研究。