VBA:在工作表的工作簿中导入名为工作表的特定变量以访问表?

Posted

技术标签:

【中文标题】VBA:在工作表的工作簿中导入名为工作表的特定变量以访问表?【英文标题】:VBA: Import Specific Variable Named Sheet in Workbook of Sheets to Access Table? 【发布时间】:2013-07-24 15:46:20 【问题描述】:

我正在寻找一种将特定选项卡导入我的 Access 表的方法。通常我会做一个 TransferSpreadsheet 类型的代码,所以这对我来说相当新。

我需要用户能够从任何目录打开文件 - 然后让程序导入可以具有半变量名称的特定电子表格。

需要导入的电子表格始终是“详细信息”。很明显,现在该文件将包含一个名为“七月详细信息”的选项卡。所以我使用这段代码的逻辑是找到带有 LIKE(或 *)详细信息的电子表格。但是,我不确定这是否有效,并且我不确定如何最好地将其传输到我的访问表,因为我已经习惯了 TransferSpreadsheet。任何帮助表示赞赏!

Dim wb1 As Workbook
Dim wb2 As Workbook
Set wb1 = ActiveWorkbook

ImportFileName = cmdFileDialog("Select File to Import: ")
Set wb2 = Workbooks.Open(FileName:=ImportFileName)

For Each Sheet In wb2.Sheets
        If Sheet.Name Like Detail Then
            Sheet.Copy After:=wb1.Sheets(wb1.Sheets.Count)
        End If
Next Sheet

DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12, DataTable, ImportFileName, True, DataRange

编辑:让我澄清一下:一旦我找到包含 Details 的工作表,我不确定如何将它导入到我需要的 Access 表中。这是我的最后一个问题。

【问题讨论】:

【参考方案1】:

这是对您问题最后一部分的回复! 要将 Excel 中的表格上传到 Access 表格,您需要以下内容:

    ADODB 库(Microsoft ActiveX 数据对象 2.x) 数组操作

您将在 ADODB 中使用以下对象和方法:

    连接 唱片集 新增

这是一个使用 ADODB 将新记录附加到 Access 中的表的通用示例:

(如果您需要添加多个记录,则需要编写一个循环来创建包含值的不同数组并重复调用 AddNew 函数。据我所知,ADODB 不支持批量上传记录*如果我在这里错了请纠正我)

Dim objcon As ADODB.Connection
Dim objrec As ADODB.Recordset
Dim strSQL As String
Dim strCon As String

'important strings you'll need
strSQL = "SELECT * FROM " & TABLE_NAME & ";"
strCon = "DSN=MS Access Database;DBQ=" & FULLPATH_OF_DATABASE & ";"

'open your connection to the database
Set objcon = New ADODB.Connection
objcon.Open strCon

'open your recordset from database
Set objrec = New ADODB.Recordset
objrec.Open strSQL, objcon, adOpenKeyset, adLockOptimistic

'adding a new record
objrec.AddNew Array("FIELD_1", "FIELD_2", "FIELD_3"), Array("Value1", "Value2", "Value3")

Set objrec = Nothing
Set objcon = Nothing

如果有帮助,请告诉我!

【讨论】:

【参考方案2】:

看起来我找到了一种结合 DoCmd.TransferSpreadsheet 的方法。谢谢大家。如果这有点难看,请随时纠正或给我一个更正确的方法。

ImportFileName = cmdFileDialog("Select File to import : ")
DoCmd.SetWarnings False

Dim xlApp As Object
Dim xlWrk As Object
Dim xlSheet As Object
Dim db As Database
Dim SheetName As String

Set xlApp = CreateObject("Excel.Application")
Set xlWrk = xlApp.Workbooks.Open(ImportFileName)
Set db = CurrentDb

For Each Sheet In xlWrk.Sheets
    If Sheet.Name Like "*Detail*" Then
        Set xlSheet = xlWrk.Sheets(Sheet.Name)
        SheetName = Sheet.Name
    End If
Next Sheet

DoCmd.TransferSpreadsheet _
    transfertype:=acImport, _
    TableName:="tblImport", _
    FileName:=ImportFileName, _
    HasFieldNames:=True, _
    Range:=SheetName & "!A1:BM" & ls_last_row

【讨论】:

以上是关于VBA:在工作表的工作簿中导入名为工作表的特定变量以访问表?的主要内容,如果未能解决你的问题,请参考以下文章

在excel vba中比较2张缺少工作表的工作簿

MS Access VBA:创建具有多个工作表的 Excel 工作簿

在 VBA 中选择特定的工作表和范围

VBA 把一个工作簿中的表的数据传递到另一个工作簿中

vba excel怎么获取指定工作表的行数、列数

根据变量定义的路径从多个关闭的工作簿中导入数据