我正在使用DIR功能将一组excel文件导入到访问中。然后,我传递DIR的属性,使访问中的表的名称与excel文件相同。唯一的问题是我在名字中也得到xls如何阻止它?
以下代码:
Sub Sample2()
Const cstrFolder As String = "F:\TCB_HR_KPI\Data View\"
Dim strFile As String
Dim i As Long
strFile = Dir(cstrFolder & "*.xls")
If Len(strFile) = 0 Then
MsgBox "No Files Found"
Else
Do While Len(strFile) > 0
Debug.Print cstrFolder & strFile
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, _
strFile, cstrFolder & strFile, True
i = i + 1
strFile = Dir()
Loop
MsgBox i & " Files are imported"
End If
End Sub
答案 0 :(得分:1)
根据需要使用辅助功能将其剥离......
Function StripFileExt(FileName As String) As String
Dim Pos As Long
Pos = InStrRev(FileName, ".")
If (Pos > 0) And (Pos > InStrRev(FileName, "\")) Then
StripFileExt = Left$(FileName, Pos - 1)
Else
StripFileExt = FileName
End If
End Function
答案 1 :(得分:1)
使用Split Function拆分“。”,并将该数组的第一个元素作为表名。
Split(strFile, ".")(0)
您可以将结果存储在中间变量中。或者直接在TransferSpreadsheet
语句中使用表达式。
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, _
Split(strFile, ".")(0), cstrFolder & strFile, True
注意:基于your previous question,我假设工作簿文件名只包含一个点: REPORT1.xls 到 REPORT67的名称。 xls 但是如果你这次处理的文件名可能包含多个点,我的第一个建议是不合适的。
在这种情况下,您仍然可以使用包含Split()
的表达式,但该表达式不会那么简单。
Left(strFile, Len(strFile) - Len(Split(strFile, ".")(1)) -1)
请注意,除了 .xls
之外,该方法还可以容纳任何其他Excel文件扩展名答案 2 :(得分:0)
你想要这个吗?
Sub Sample2()
'
Const cstrFolder As String = "F:\TCB_HR_KPI\Data View\"
'
Dim i As Long, lng As Long
'
Dim strExt As String, strFile As String, strTable As String
'
strExt = ".xls"
lng = Len(strExt)
strFile = Dir(cstrFolder & "*" & strExt)
'
If Len(strFile) = 0 Then
MsgBox "No Files Found"
Else
Do While Len(strFile) > 0
'
' Debug.Print cstrFolder & strFile
'
strTable = Left(strFile, Len(strFile) - lng)
'
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, _
strTable, cstrFolder & strFile, True
i = i + 1
strFile = Dir()
Loop
MsgBox i & " Files are imported"
End If
'
End Sub
因为像Sample1.xls这样的文件将被压缩为表Sample1。