Excel中的SQL查询给出“未定义的函数名称”错误

我在MS Access中使用MonthName函数编写了一个SQL查询。 在访问它完美的作品。 我将确切的SQL语句复制到我经常用来查询数据库的excel模块中。 当我运行查询时,Excel一直告诉我,MonthName是一个未定义的函数名称。 如果我删除MonthName部分,查询运行良好。

这似乎是我缺less一个引用或东西…现在,我引用Microsoft ActiveX数据对象库6.0。 任何人都可以指向正确的方向吗? 谢谢

strSQL = "SELECT DISTINCT Customers.CustomerName, Employees.EmployeeName, [Policy data revised].EXDT, MonthName(Month([EXDT])) AS expMonth FROM (([Service Team table] INNER JOIN Customers ON [Service Team table].CustID = Customers.CustID) INNER JOIN Employees ON [Service Team table].EmployeeID = Employees.EmployeeID) INNER JOIN [Policy data revised] ON Customers.CustID = [Policy data revised].CustID WHERE ((([Service Team table].RoleExtension)='2. Underwriting Assistant') AND (([Policy data revised].EXDT) BETWEEN #" & minExpDt & "# AND #" & maxExpDt & "#)) ORDER BY [Policy data revised].EXDT ASC;" 

MonthName()函数仅适用于在Access应用程序会话中运行的查询。 请参阅关于Microsoft Jetexpression式服务沙箱模式的 “从属性表中调用以下VBA函数将不起作用或在SQL语句中使用”项目符号点。 在Access应用程序会话中,数据库引擎可以使用expression式服务来使用沙盒function。

由于您不能使用MonthName ,请尝试使用此Formatexpression式。

 Format([EXDT], 'mmmm') AS expMonth 

奇怪的是,我只是在Excel 2010(64位)中尝试了下面的代码,它对我很有帮助:

 Sub foo() '' Reference: "Microsoft ActiveX Data Objects 6.0 Library" Dim con As ADODB.Connection, rst As ADODB.Recordset Set con = New ADODB.Connection con.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Gord\Desktop\Database1.accdb;" Set rst = New ADODB.Recordset rst.Open "SELECT MonthName(Month([BookingStart])) FROM Payment_tbl", con, adOpenStatic, adLockOptimistic Debug.Print rst(0).Value rst.Close Set rst = Nothing con.Close Set con = Nothing End Sub 

编辑

除了HansUp的评论之外,Office 2007和Office 2010之间必然会发生一些变化。我从运行Office 2010的32位计算机上运行了另一个testing,并运行了上面的代码,针对使用这两个文件的Access 2000 .mdb文件。

 Provider=Microsoft.ACE.OLEDB.12.0; 

…和…

 Provider=Microsoft.Jet.OLEDB.4.0; 

我也检查下SandBoxModeregistry值…

 HKLM\Software\Microsoft\Office\14.0\Access Connectivity Engine\Engines 

…它是3 ,这是“启用”(ref: 这里 )的值。