我正在寻找一种将特定标签导入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表中。这是我的最后一个问题。
答案 0 :(得分:0)
这是对你问题的最后部分的回复! 要将Excel中的表格上传到Access Table,您需要以下内容:
您将在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
如果有帮助,请告诉我!
答案 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