1

私はcsvファイルのインポート仕様を持っています.GUIを介してファイルで実行すると、問題なく動作します。ただし、VBA で実行すると、何らかの理由で 1 つの列がテキスト列であることが忘れられ、代わりに数値列になるため、大量のエラーが発生します。

私のコードは以下です。すべてが正常に動作するという意味では機能しますが、何らかの理由で 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

明らかな何かが欠けていますか?インポート仕様が正しく機能しないのはなぜですか?

4

2 に答える 2

2

コード モジュールの上部 Option Compare Database の後に Option Explicit を追加します。これには、すべての変数を宣言する必要があり、この問題が再び発生することはありません

于 2015-06-23T19:40:54.690 に答える