2016-08-22 4 views
1

アクセスデータベースにCSVファイルをインポートしようとしています。 「Vol.2016.Aug.23.csv」「。」を含むAccessでファイルをインポートするVBAを使用した名前で

これをdocmdを使用してインポートしようとすると、ファイルをインポートできないというエラーが表示されます。私は複数の "。"のためにファイルをcsvとして識別できないという問題を見つけました。

しかし、私はインポートする必要があるような名前のファイルを取得しています。これについて行く方法はありますか?

助けてください!

ここに私のコードです:

fileName = "Vol." & Year(Date) & "." & MonthName(Month(Date), True) & "." & Day(Date) & ".csv" 

filePath = "C:\Users\House\Desktop\" 

DoCmd.TransferText Transfertype:=acImportDelim, TableName:="Table1", fileName:=filePath + fileName, HasFieldNames:=True 
+1

使用しているコードを共有できますか? –

+0

_____fileName = "Vol。" &Year(Date)& "。" &MonthName(月(日付)、True)& "。" &デイ(日)「& ".CSV" ______filePath = "C:\ユーザーは、ハウス\デスクトップ\ \" _____ DoCmd.TransferTextたtransferType:= acImportDelim、テーブル名:= "表1" は、ファイル名:= filePathに+ fileNameに、HasFieldNames:= True – Shreyans

+1

質問のコードを更新し、コードの書式設定を使用してください。 –

答えて

0

以下の解決策を試してください。

ファイル名にピリオドがあるのを処理するのではなく、にスクリプトを書き込んで、のファイル名を変更しました。基本的には、._に置き換えてインポートの問題を回避します。

Option Explicit 

Public Sub ImportTableWithPeriod() 
    Dim fso    As Object: Set fso = CreateObject("Scripting.FileSystemObject") 
    Dim f    As Object 
    Dim FolderName  As String 
    Dim Filename  As String 
    Dim TempFilepath As String 
    Dim OrigFilePath As String 
    Dim TempFileName As String 
    Dim tempFolderPath As String 

    Filename = "Vol." & Format(Now(), "yyyy") & "." & _ 
       Format(Now(), "MMM") & "." & _ 
       Format(Now(), "d") & ".csv" 

    FolderName = "C:\Users\House\Desktop\" 

    'Build string for replacement names 
    'Basically I've replaced the periods with underscores 
    TempFileName = Replace(Left(Filename, Len(Filename) - 4), ".", "-") & ".csv" 
    TempFilepath = FolderName & TempFileName 

    OrigFilePath = FolderName & Filename 
    Set f = fso.getFile(OrigFilePath) 

    'rename the file temporarily 
    f.Name = TempFileName 

    'Import the file with the renamed instance 
    DoCmd.TransferText Transfertype:=acImportDelim, TableName:="Table1", Filename:=TempFilepath, HasFieldNames:=True 

    'Put the name back as it was 
    f.Name = Filename 

    'Clean up 
    set fso = nothing 
    set f = nothing 
End Sub 
0

わかりました - これはあなたのため

を動作するはずです、私は私のシステム上でテストし、あなたのDoCmdコールは、おそらく古いMS-アクセスコードベースの要件を使用し、上の障害が発生していることを確認しました"。"そして、ファイル名の他の特殊文字は - おそらく何かが

ソリューションは、短いファイル名

がトップにこれを追加使用している拡張機能を把握するために、ファイル名の最初のドットを探すためにハードコードあなたのモジュールの

' Borrowed code from https://support.microsoft.com/en-us/kb/175512 

#If VBA7 Then 
    Declare PtrSafe Function GetShortPathName Lib "kernel32" _ 
     Alias "GetShortPathNameA" (ByVal lpszLongPath As String, _ 
     ByVal lpszShortPath As String, ByVal cchBuffer As Long) As Long 
#Else 
    Declare Function GetShortPathName Lib "kernel32" _ 
     Alias "GetShortPathNameA" (ByVal lpszLongPath As String, _ 
     ByVal lpszShortPath As String, ByVal cchBuffer As Long) As Long 
#End If 

Public Function GetShortName(ByVal sLongFileName As String) As String 
    Dim lRetVal As Long, sShortPathName As String, iLen As Integer 
    'Set up buffer area for API function call return 
    sShortPathName = Space(255) 
    iLen = Len(sShortPathName) 

    'Call the function 
    lRetVal = GetShortPathName(sLongFileName, sShortPathName, iLen) 
    'Strip away unwanted characters. 
    GetShortName = Left(sShortPathName, lRetVal) 
End Function 

その後ショートバージョンにあなたのファイル名を変換するために、コードを変更

Dim filename As String 
Dim filePath As String 

Dim csvFile As String 

filename = "Vol." & Year(Date) & "." & MonthName(Month(Date), True) & "." & Day(Date) & ".csv" 

filePath = "C:\Users\House\Desktop\" 

' Convert to Short Filename to work with old MS-Access code base 
csvFile = GetShortName(filePath & filename) 
Debug.Print csvFile 

DoCmd.TransferText Transfertype:=acImportDelim, TableName:="Table1", filename:=csvFile, HasFieldNames:=True 
関連する問題