Access中的DIR函数和命名表

时间:2013-11-06 21:09:54

标签: vba ms-access

我正在使用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

3 个答案:

答案 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。