標準モジュールに下記の関数を作成します。
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
取得した日付はとりあえずメッセージボックスに表示してますが、
使用用途に合わせて修正してください。
通報 ...
こちらのコードを試したところ、Beref引数の型が一致しませんとエラーが出るのですが、どうすればよろしいでしょうか?
また、このコードの読解をしていたところ、8文字かそれ以上でなければ日付かどうか判定する条件式に入らないと思うのですが、ファイル名が発注書(2024.1.9).xlsxのように8桁ではない場合、どうすればよいでしょうか?
そのエラーがでるのはどの行ですか。エラーのでる行を提示してください。
こちらで試してみましたが「発注書(2024.1.9).xlsx」でも問題なく 2024/01/09 という日付が返りますが。
実際に試してみましたか。
エラーが出ていたためまだ実行結果を見ていませんでした。
もう一度コピペし直したところエラーは出なくなりました。
あと、読解が間違っていたようです。(2024.1.9)でもpos1=8、pos2=17なのでl=8で条件式に入りますね。
この取得した日付をT_発注書取込の発注日フィールドに書き込む記述は、msgboxのところを書き換えればよいでしょうか?
はい、そうです。
とりあえず試してみてうまく行かない場合、質問してください。