2013-05-17 27 views
1

我有一個csv文件的導入規範,當我通過GUI在文件上運行它時,它工作得很好。但是,當我通過VBA運行它時,出於某種原因,它忘記了一列應該是一個文本列,並使其成爲一個數字列,從而導致大量的錯誤。MS Access:導入規範不通過VBA工作

我的代碼如下。它工作從一種意義上說,一切運行正常,但由於某些原因,CSV的導入規範無法正常運行。無意義的案例切換是一個佔位符,因爲在我第一次工作後,我需要添加更多類型的報告。

Sub ImportDE(Folder As Object) 
Dim db As DAO.Database 
Dim names As DAO.Recordset 
Dim Files As Object, file As Object, SubFolders As Object, subfolder As Object 
Dim ExString As Variant 
Dim check As Boolean 
Dim FileChange As String 

Set db = CurrentDb 
On Error Resume Next: db.TableDefs.Delete "tblImport": On Error GoTo 0 
db.TableDefs.Refresh 

Set names = CurrentDb.OpenRecordset("SELECT Old FROM DENames") 

Set Files = Folder.Files 
Set SubFolders = Folder.SubFolders 

For Each subfolder In SubFolders 
    ImportDE subfolder 
Next 

With names 
    Do While Not .EOF 
     ExString = .Fields(0) 
     For Each file In Files 
      If InStr(file.Type, "Worksheet") > 0 Then 
       If InStr(file.Path, ExString & ".xls") > 0 Then 
        DoCmd.TransferSpreadsheet _ 
         TransferType:=acImport, _ 
         SpreadsheetType:=acSpreadsheetTypeExcel9, _ 
         TableName:="tblImport_" & ExString, _ 
         filename:=file.Path, _ 
         HasFieldNames:=True, _ 
         Range:="A:CT" 
        db.TableDefs.Refresh 
       End If 
      ElseIf InStr(file.Type, "Comma Separated") > 0 Then 
       If InStr(file.Path, ExString & ".csv") > 0 Then 
        Select Case ExString 
        Case "Usage" 
         DoCmd.TransferText _ 
          TransferType:=acImportDelim, _ 
          SpecificationName:=UsageCSV, _ 
          TableName:="tblImport_" & ExString, _ 
          filename:=file.Path, _ 
          HasFieldNames:=True 
         db.TableDefs.Refresh 
        End Select 
       End If 
      End If 
     Next 
     .MoveNext 
    Loop 
End With 
db.Close: Set db = Nothing 
End Sub 

我是否缺少明顯的東西?爲什麼進口規格不能正常工作?

回答

2

TransferText規範名稱參數應該是一個字符串表達式。由於代碼沒有聲明名爲UsageCSV的變量,我猜這是規範的文字名稱。如果這是正確的,請將該名稱用雙引號括起來。

DoCmd.TransferText _ 
    TransferType:=acImportDelim, _ 
    SpecificationName:="UsageCSV", _ 
    TableName:="tblImport_" & ExString, _ 
    filename:=file.Path, _ 
    HasFieldNames:=True 
+0

嗯,我覺得適當愚蠢,謝謝! – user2395059

+0

不客氣。這個問題已經讓很多人感到困擾。使用Access的在線幫助功能交朋友。這並不完美,但仍然值得檢查,以確保正確使用命令參數。祝你好運。 – HansUp

2

在你的代碼模塊的頂部選項後比較數據庫 添加顯式的選項。 這將需要聲明所有的變量,你將永遠不會再有這個問題