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

时间:2013-07-24 15:46:20

标签: excel vba ms-access excel-vba

我正在寻找一种将特定标签导入Access表的方法。通常我会使用TransferSpreadsheet类型的代码,所以这对我来说是新的。

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

需要导入的电子表格始终是“详细信息”。很明显,此时文件将包含一个名为July Details的标签。所以我对这段代码的逻辑是找到带有LIKE(或*)Detail的电子表格。我不确定这是否有效,而且我不确定如何最好将其传输到我的Access Table,因为我已经习惯了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

编辑:让我澄清一下:一旦我找到包含详细信息的工作表,我不知道如何将其导入到我需要的Access表中。这是我的最后一个问题。

2 个答案:

答案 0 :(得分:0)

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

  1. ADODB库(Microsoft ActiveX Data Object 2.x)
  2. 阵列操作
  3. 您将在ADODB中使用以下对象和方法:

    1. 连接
    2. 记录
    3. 的AddNew
    4. 以下是使用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
      

      如果有帮助,请告诉我!

答案 1 :(得分:-1)

看起来我找到了将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