一周前,我构建了一个包含大量按钮的表单,用于在我的数据库中的某些日期之间运行查询,然后将这些日期导出到excel文件中。在过去的几天里,我扩展了支持自定义文件位置,工作表名称和源表名称的功能。我做了所有这些,以便任何跟在我后面的人都可以使用该工具(我是实习生)。
然而,大约一小时前,我开始在弹出框中收到错误消息Run-time error '3275': unexpected error from database driver (1)
。我无法直接上传图片,但这里是picture of the structure of my form。我的代码如下:
Private Sub SendToExcel_Click()
DoCmd.TransferSpreadsheet acExport, , "TBL_XL_DATA", _
"X:\Confidential\Weekly Intel.xlsx", _ \\The file location is here in the actual code
True, "Input"
End Sub
这是'默认'导出选项,我在过去几天没有以任何方式修改过。新功能如下:
Private Sub CustomToExcel_Click()
DoCmd.TransferSpreadsheet acExport, , [Forms]![Date Range]![SourceTable], _
[Forms]![Date Range]![FileDest], _
True, [Forms]![Date Range]![SheetName]
End Sub
我发现a similar question,同样的错误,并使用TransferSpreadsheet,但我不认为我的问题是命令运行得太慢,特别是考虑到我在一小时前运行它(新命令)没有问题
我很困惑为什么命令现在不起作用,以及为什么我在一段时间内没有处理的未更改的命令现在也抛出同样的错误。我希望有人能够理解错误本身给我一两个建议。我应该寻找什么?我应该修补什么来获得更多相关信息?
在一个不起眼的论坛中找到解决方案。我的问题是我的路径对于transferpreadsheet来说太长了。我很幸运,因为我的数据库和excel文件在同一个文件夹中。我相信有一种方法可以支持更长的路径,所以如果有人知道如何做到这一点,我们将不胜感激。现在,我至少可以在我的约束范围内工作。
答案 0 :(得分:1)
您尚未提供TransferSpreadsheet
的第二个参数,即指定要导出到的文件类型。您应该明确提供此参数,而不是依赖Access来提供它。
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, etc..
for Excel 2007+(另存为.xlsx)。
您可以在代码中包含用户提供的文件扩展名检查(如果有),以便您可以使用相应的电子表格类型枚举。
您收到的错误可能是因为未提供文件扩展名。
已添加 TransferSpreadsheet
接受的最大路径长度为64个字符。我首先尝试一些简单化的方法,例如将fullpath存储在变量中并将此变量传递给方法。但这不太可能绕过限制。
就个人而言,我会将电子表格转移到临时或当前文件夹,或许:
Application.CurrentProject.Path
然后使用简单的FileSystem语句:
FileCopy source, destination
复制文件,最后:
Kill source
删除临时版本。
这似乎有点啰嗦,但就个人而言,我喜欢它。它让我可以更好地控制这个过程。无论如何,有必要绕过64个字符的限制。
答案 1 :(得分:0)