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:在工作表的工作簿中导入名为工作表的特定变量以访问表?的主要内容,如果未能解决你的问题,请参考以下文章