vba - MS Access 表导出为 excel 文件到用户定义的文件夹
问题描述
下面的代码工作正常并将访问表数据导出到 excel 文件 (C:\temp\test.xlsx)。
但我的要求不是在 VBA 脚本中定义 C:\temp 文件夹,系统应该要求用户选择输出目录。你能帮我准备那个 VBA 脚本吗?
Private Sub Command3_Click()
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "Fields", _
"C:\temp\text.xlsx", True
End Sub
解决方案
正如@Shanayl 指出的那样,您可以提示用户在其本地计算机上选择一个文件夹,然后将结果传递给DoCmd.TransferSpreadsheet
它,因为它接受一个字符串值。不要简单地将fd连接到文件路径中。
下面修改了@eabraham 的答案,以在 VBA 函数中为用户运行文件夹选择器对话框而不是文件选择器,而不是稍后为 Excel 文件调用的 VBA 子程序。
功能 (与按钮单击事件位于同一区域的表单/报告后面)
Private Function GetExcelFolder() As String
Dim fldr As FileDialog
Dim txtFileName As String
' FOLDER PICKER
Set fldr = Application.FileDialog(msoFileDialogFolderPicker)
With fldr
.AllowMultiSelect = False
' Set the title of the dialog box.
.Title = "Please select folder for Excel output."
' Show the dialog box. If the .Show method returns True, the
' user picked at least one file. If the .Show method returns
' False, the user clicked Cancel.
If .Show = True Then
txtFileName = .SelectedItems(1)
Else
Msgbox "No File Picked!", vbExclamation
txtFileName = ""
End If
End With
' RETURN FOLDER NAME
GetExcelFolder = txtFileName
End Function
按钮点击事件
Private Sub Command3_Click()
Dim user_excel_fldr As String
' CALL FUNCTION
user_excel_fldr = GetExcelFolder()
If user_excel_fldr = "" Then Exit Sub
' SPECIFY ONE TABLE
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "myTableName", _
user_excel_fldr & "\" & "ExcelOutput.xlsx", True
End Sub
对于数据库中的每个表,循环通过TableDefs,使用MS Access 的DoCmd.TransferSpreadsheet方法的范围参数将每个表输出到特定的工作表选项卡。
Private Sub Command3_Click()
Dim user_excel_fldr As String
Dim tbldef As TableDef
' CALL FUNCTION
user_excel_fldr = GetExcelFolder()
If user_excel_fldr = "" Then Exit Sub
' LOOP THROUGH ALL TABLE NAMES
For Each tbldef In CurrentDb.TableDefs
If Not tbldef.Name Like "*MSys*" ' AVOID SYSTEM TABLES
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, tbldef.Name, _
user_excel_fldr & "\" & "ExcelOutput.xlsx", True, tbldef.Name & "!"
End If
Next tbldef
Set tbldef = Nothing
End Sub
顺便说一句,请注意Excel 不是数据库。必须将整个 MS Access 数据库转储到 Excel 工作簿中,甚至整个表都可能需要重新考虑。也许您的用户需要定制和过滤的表或查询(即 QueryDefs)。最佳实践是使用 Excel 作为最终用途报告应用程序,使用 Access 作为中央存储库后端。
推荐阅读
- vue.js - 组件中的 Vuex getter 未更新
- java - spring-data-jpa 1.11.16 带游标的存储过程
- swift - swift 为什么要使用扩展程序
- java - 使用 java8 流从多级内部列表中检索数据
- python - AttributeError:“系列”对象没有属性“重塑”
- java - Opengl - GLSL - 在一个浮点数中存储 4 个字节并将其发送到着色器
- logstash - 关于传递给zabbix trapper的ELK-Logstash关键字过滤器
- python - 如何在python中制作正则表达式
- wordpress - 许多带有尾随双斜杠的 URL?
- react-native - 推送不在标签 wix v2 中的屏幕