2017-01-13 2 views
3

VBを使用してインポート私は現在、これらのファイルを手動でインポートする方法を知っているが、私はそれを自動的に行うには、私のインポートボタンからVBのコードを実行するために探しています。インポートボタンにリンクされたフィールドがあり、日付を入力してインポートをクリックする必要があります。インポートがクリックされると、ファイル名にある日付に基づいてファイルを取得します。はない手動インポート

これらのファイルはテキストファイルで、ファイル名には、フォーマットの2種類で書かれています。

第一フォーマット - P.RR1234.ABCDEF.D160112.T123456

第二フォーマット - G1234.ABCDEF.D160112。ここでT123456

は(私は現在、それは私のデスクトップにマッピングされているが、形式であるネットワーク/共有パスにあるファイルの100年代がある)私の現在のフォームのための私のVBのコードです:

  Option Compare Database 

Private Sub cmdImport_Click() 

On Error GoTo Click_Err 

    If Nz(txtReportDate, "") = "" Then 
     MsgBox "NOTICE! Please enter the Report Month you wish to Import." 

     Else 

    Dim rs As Recordset 
    Dim sql As String 

    'Loop through recordset of all Contracts and import files 
    sql = "SELECT DISTINCT FROM AAAAB_CE" 
    Set rs = CurrentDb.OpenRecordset(sql) 
    rs.MoveLast 
    rs.MoveFirst 
    If rs.RecordCount > 0 Then 
     Do While rs.EOF = False 
      ImportFile rs!DISTINCT 
      rs.MoveNext 
     Loop 
    End If 

    DoCmd.Hourglass True 
    DoCmd.SetWarnings False 

    DoCmd.Hourglass False 
    DoCmd.SetWarnings True 
    MsgBox "Finished Importing!" 
    DoCmd.OpenQuery "query_Files_Loaded_CE", acViewNormal, acReadOnly 

click_Exit: 
    DoCmd.Hourglass False 
    DoCmd.SetWarnings True 
    Exit Sub 

Click_Err: 
    DoCmd.Hourglass False 
    MsgBox "Error Detected: " & Err.Number & " - " & Err.Description, vbCritical, "Error" 
    Resume click_Exit 

     Exit Sub 
    End If 

End Sub 

モジュール:

Option Explicit 
Option Compare Database 

Public Function ImportFile(Contract As String) 

DoCmd.TransferText acImportFixed, "123_Files", "AAAAB_CE", "C:\Users\123456\Desktop\TestingFolder\test.txt", False 

End Function 

私は1つのテーブルにこれらのテキストファイルをインポートしようとしています。ファイルがたくさんあるので、手動では不十分です。

現在、私は、フォームのテキスト日にランダムな日付に入れた場合、インポートをクリックします。私が選択したファイルが完全に間違った形式でインポートされます。私が保存した仕様が正しいフォーマットで行われたので、これは変です。

私はすべて3つのことを達成しようとしています。

1)フォーム上のフィールドに日付を入力して(日付はファイル名の一部になります)、インポートブーンをクリックして自動的にインポートします 2)正しい構造のテキストファイルをインポートします 3)間違った日付を入力した場合は、何もインポートしないでください。

+0

と今では仕様が存在しないと言いますインポートをクリックすると、スペックは存在します。 – KKP

+2

1)+3)と2)は、非常に異なる無関係の問題です。それらを2つの質問に分けてください。 2)については、あなたのテーブル構造、入力フォーマット、およびインポート仕様が必要です(https://www.pcreview.co.uk/threads/how-do-you-print-an-import-specification.3120686/を参照)。 ) – Andre

+0

@Andre私のテーブルは20列です(最後の2列はインポート日付とファイル名で、すべての列は日付/時刻であるImportDateを除くテキストです)。私はあなたにテーブル構造のために何を提供することができますか?テキストファイルは、テーブルに一致するように設定されています。手動でインポートすると(固定されたテキスタイル)、正しくインポートできます。 – KKP

答えて

1

私はTXTファイルやファイルそのもので使用される日付形式を知らなくても、このコードのトラブルシューティングを行うことができませんでしたが、これは、私はそれを攻撃する方法です:

  • は、ファイルをループするには、dirを使用しますその後、ファイル名を渡すことで(ノー本当にサブある?)あなたのImportFile関数を呼び出し、日付が含まれている.txtファイル、

  • を探して指定したフォルダの場所。

あなたがロジックに従うことのためにそこにうまくいけば、十分な..このことができます

Public Sub sampleSub() 
Dim dirStr As String 
Dim filePath As String 
Dim fileDate As Date 

filePath = "C:\Users\123456\Desktop\TestingFolder\" 
On Error GoTo doNothing: 
fileDate = DateValue(InputBox("NOTICE! Please enter the Report Month you wish to Import.")) 

dirStr = Dir(filePath & "\" & "*" * Format(fileDate, "FileDateFormat") & "*" & ".txt") 
Do Until dirStr = "" 
    Call ImportFile(dirStr) 
Loop 

Exit Sub 
doNothing: 
Call MsgBox("Error Detected: " & Err.Number & " - " & Err.Description, vbCritical, "Error") 
End Sub 

Public Sub ImportFile(fileName As String) 
Call DoCmd.TransferText(acImportFixed, "123_Files", "AAAAB_CE", fileName, False) 
End Sub 

希望、 TheSilkCode

I再度やったインポート仕様
関連する問題