2013-05-17 29 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

在你的代码模块的顶部选项后比较数据库 添加显式的选项。 这将需要声明所有的变量,你将永远不会再有这个问题