Microsoft Access 掲示板

インポートするExcelファイル名の日付部分を、インポートしたレコードの取込日フィールドに追加したい / 1

9 コメント
views
4 フォロー
1
hatena 2023/12/20 (水) 00:53:54 修正

標準モジュールに下記の関数を作成します。

Function GetDate(s As String) As Variant
    Dim pos1 As Long, pos2 As Long, l As Long
    pos1 = InStr(s, "("): pos2 = InStr(s, ")")
    l = pos2 - pos1 - 1
    If l >= 8 Then
        Dim sDate As String
        sDate = Mid(s, pos1 + 1, l)
        sDate = Replace(sDate, ".", "/")
        If IsDate(sDate) Then GetDate = CDate(sDate)
    End If
End Function

発注書取込ボタンのクリック時のイベントプロシージャを下記にします。

Private Sub btn_発注書取込_Click()
    Dim FileName As String
    FileName = getFileName("")
    DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "T_発注書取込", FileName, True, "発注数$B4:J32"    
    MsgBox "インポート完了", vbInformation + vbOKOnly

   Dim vDate As Variant
   vDate = GetDate(FileName)
   If IsNull(vDate) Then
       MsgBox "ファイル名に日付は含まれてません"
   Else
       MsgBox "日付は" & Format(vDate,"yyyy/mm/dd"), vbInformation + vbOKOnly
   End If
End Sub

取得した日付はとりあえずメッセージボックスに表示してますが、
使用用途に合わせて修正してください。

通報 ...
  • 6
    Anonymous 2024/01/09 (火) 09:36:38 修正 7fdfc@44ebd >> 1

    こちらのコードを試したところ、Beref引数の型が一致しませんとエラーが出るのですが、どうすればよろしいでしょうか?
    また、このコードの読解をしていたところ、8文字かそれ以上でなければ日付かどうか判定する条件式に入らないと思うのですが、ファイル名が発注書(2024.1.9).xlsxのように8桁ではない場合、どうすればよいでしょうか?

    7

    こちらのコードを試したところ、Beref引数の型が一致しませんとエラーが出るのですが、どうすればよろしいでしょうか?

    そのエラーがでるのはどの行ですか。エラーのでる行を提示してください。

    また、このコードの読解をしていたところ、8文字かそれ以上でなければ日付かどうか判定する条件式に入らないと思うのですが、ファイル名が発注書(2024.1.9).xlsxのように8桁ではない場合、どうすればよいでしょうか?

    こちらで試してみましたが「発注書(2024.1.9).xlsx」でも問題なく 2024/01/09 という日付が返りますが。
    実際に試してみましたか。

    8
    Anonymous 2024/01/09 (火) 10:58:42 修正 7fdfc@44ebd >> 6

    エラーが出ていたためまだ実行結果を見ていませんでした。
    もう一度コピペし直したところエラーは出なくなりました。

    あと、読解が間違っていたようです。(2024.1.9)でもpos1=8、pos2=17なのでl=8で条件式に入りますね。

    この取得した日付をT_発注書取込の発注日フィールドに書き込む記述は、msgboxのところを書き換えればよいでしょうか?

    9

    この取得した日付をT_発注書取込の発注日フィールドに書き込む記述は、msgboxのところを書き換えればよいでしょうか?

    はい、そうです。
    とりあえず試してみてうまく行かない場合、質問してください。