ms-access - 如何为保存的 Excel 导入指定不同的文件路径

标签 ms-access vba

因此,我多次使用 doCmd.TransferText 来使用保存的文本导入规范,因为您可以轻松保存从 Application.FileDialog(msoFileDialogFilePicker) 返回的文件路径 查找并选择您希望使用保存的规范导入的文件。

但是,我无法找到对 Excel 文件执行相同操作的方法,保存 Excel 导入规范很简单,但使用 DoCmd.TransferSpreadSheet 方法无法使用保存的导入以及使用 doCmd.RunSavedImportExport 没有指定文件路径的选项。

除了使用不同的文件类型(例如 .csv)之外,还有其他解决办法吗

最佳答案

Access 中的“已保存导入”和“已保存导出”存储在形成 CurrentProject.ImportExportSpecifications 集合的 ImportExportSpecification 对象中。保存的 Excel 导入的详细信息类似于以下 XML,它是我通过手动导入 Excel 电子表格并勾选导入向导最后一页上的“保存导入步骤”复选框而创建的。

<?xml version="1.0" encoding="utf-8" ?>
<ImportExportSpecification Path = "C:\Users\Gord\Desktop\xlsxTest.xlsx" xmlns="urn:www.microsoft.com/office/access/imexspec">
     <ImportExcel FirstRowHasNames="true" Destination="xlsxTest" Range="Sheet1$" >
            <Columns PrimaryKey="ID">
                  <Column Name="Col1" FieldName="ID" Indexed="YESNODUPLICATES" SkipColumn="false" DataType="Long" />
                  <Column Name="Col2" FieldName="TextField" Indexed="NO" SkipColumn="false" DataType="Text" />
                  <Column Name="Col3" FieldName="DateField" Indexed="NO" SkipColumn="false" DataType="DateTime" />
             </Columns>
        </ImportExcel>
</ImportExportSpecification>

ImportExportSpecification 已使用名称 Import-xlsxTest 保存。现在,如果我将 Excel 文件从“xlsxTest.xlsx”重命名为“anotherTest.xlsx”,我可以使用以下 VBA 代码更改 ImportExportSpecification 的 XML 中的文件名,然后执行导入:

Option Compare Database
Option Explicit

Sub DoExcelImport()
    Dim ies As ImportExportSpecification, i As Long, oldXML() As String, newXML As String

    Const newXlsxFileSpec = "C:\Users\Gord\Desktop\anotherTest.xlsx"  ' for testing

    Set ies = CurrentProject.ImportExportSpecifications("Import-xlsxTest")
    oldXML = Split(ies.XML, vbCrLf, -1, vbBinaryCompare)
    newXML = ""
    For i = 0 To UBound(oldXML)
        If i = 1 Then  
            ' re-write the second line of the existing XML
            newXML = newXML & _
                    "<ImportExportSpecification Path = """ & _
                    newXlsxFileSpec & _
                    """ xmlns=""urn:www.microsoft.com/office/access/imexspec"">" & _
                    vbCrLf
        Else
            newXML = newXML & oldXML(i) & vbCrLf
        End If
    Next
    ies.XML = newXML
    ies.Execute
    Set ies = Nothing
End Sub

有关 ImportExportSpecification 对象的更多信息,请参阅

ImportExportSpecification Object (Access)

关于ms-access - 如何为保存的 Excel 导入指定不同的文件路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23350640/

相关文章:

database - 如何为 MS Access 数据库配置 ODBC 数据源管理器 (DSA)?

Python Excel 运行宏到 xlsx 文件

vba - Excel 2010 中的动态打印范围

excel - 为什么 Excel VBA 编辑器会更改续行自动换行?

sql - MS Access 索引 View

ms-access - 如何在 Microsoft Access 中打印动态表单?

c# - 获取 NHibernate 的 JetDriver

ms-access - 计算 Access 中不同 NULL 值的数量

vba - Excel 中具有大型数据集的 VBA 子例程的速度问题

excel - 在范围对象中使用完全限定单元格时出现运行时错误 '1004'