2013-11-06 2 views
1

Я использую функцию DIR для импорта набора файлов Excel в качестве доступа. Затем я передаю атрибуты DIR, чтобы сделать имя таблицы доступным так же, как и файл excel. Единственная проблема в том, что я также получаю xls от имени, как я могу это остановить?Функция DIR и таблицы имен в Access

код ниже:

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

Вы хотите этого?

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.

+0

Да, это именно то, что я требую, спасибо –

1

Strip его по мере необходимости с вспомогательной функцией ...

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

Используйте 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) 

Обратите внимание, что подход будет вмещать любого из других расширений файлов Excel в дополнении к .xls

+0

Плохой идеи ММО, как «» символ может в принципе быть частью основного имени файла (например, «Отчет 10.10.13.xls»), ваш метод вернет «Отчет 10», а не «Отчет 10.10.13»). –

+0

Для потомков - мой предыдущий комментарий был написан до редактирования. Не могу сказать, что я лично заинтересован в том, чтобы использовать Split только для того, чтобы найти окончательный делиметр, но каждый из них ... –

Смежные вопросы