• ベストアンサー

フォームで入力したテキストを分解し、テーブルに格納

ACCESS 2003を使用しています。 下記のようなものを作りたいのですが、わからないので質問させていただきます。 (1)フォーム画面の「ファイル名称」というフィールドにテキストを入力する。  ファイル名称は"YYYYMMDD_FileName_Type_ID.csv"という定義になっており  CSVの他に、SSV・TSVと複数種類がある。  この箇所は、手動で入力する。 (2)あるボタンを押すと、入力したテキストが分解され、「年月」・「ファイル名」・「タイプ」・ 「ID」・「拡張子」のフィールドに自動的に格納される。 現在、考えているやり方としまして、 (1)ボタンを押すと、文字を分解し、テーブルに格納するVBAを作る (2)格納されたデータをフォームに反映する (3)反映ができたら、分解して格納したテーブルのデータを削除する という流れでいるのですが、(1)の箇所から躓いてしまい、どうにも進まない状態です。 どうか、お助けください。 どうぞ、宜しくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.4

#1の補足に対してですが。 Private Sub CmdFileName_Click() On Error GoTo Err_CmdFileName_Click Private Sub ファイル名称_AfterUpdate()    Me!年月 = MId(ファイル名称,1,8)     ・     ・ のようなプロシージャのネストはできません。 Private Sub ファイル名称_AfterUpdate()    Me!年月 = MId(ファイル名称,1,8)    Me!ファイル名 = MId(ファイル名称,10,8)    Me!タイプ = MId(ファイル名称,19,4)    Me!ID = MId(ファイル名称,23,2)    Me!拡張子 = MId(ファイル名称,27,3) End Sub は単純にファイル名称のテキストボックスの更新後処理に記述するだけでEnterキー押下で分割される記述なので。 ボタンのイベントに記述するなら Private Sub ファイル名称_AfterUpdate()と End Subを削除してください。

hazzy_funky
質問者

お礼

O_cyanさんありがとうございます。 素人ながら、できました。('-'。) 感謝感激です!!! お礼が送れて申し訳ありませんでした。

その他の回答 (3)

回答No.3

この2行がいりませんわね。 Private Sub ファイル名称_AfterUpdate() End Sub

回答No.2

お世話になります。 No.1さんとかぶりますが…。 テーブルに入れる必要はないでしょう。 文字列を取得して分割してから、 フォームのコントロールに代入しましょう。 以下の方法は、 もし、ファイル名やタイプやIDが可変の場合でも 項目の区切りが_と.である限りは大丈夫です。 ただし、入力されているかのチェックや、 .や_が入っているかのチェックは追加実装して下さい。 Private Sub コマンド1_Click()   Dim inputstr As String   inputstr = Me.テキスト0   Dim arr() As String   arr = Split(inputstr, "_")      Me.日付 = arr(0)   Me.ファイル名 = arr(1)   Me.タイプ = arr(2)   Me.ID = Mid(arr(3), 1, InStr(1, arr(3), ".") - 1)   Me.拡張子 = Mid(arr(3), InStr(1, arr(3), ".") + 1) End Sub

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.1

わざわざテーブルに保存しフォームに反映させテーブルのレコードを削除する?のは何故?フォームに反映されている時レコードを削除すると表示できなくなります。 テキストボックスに入力した名称を各テキストボックスに分けるだけで良いのですよね。 名称を入力するテキストボックスの更新後処理の記述だけで各テキストボックスに反映できます。 例えばファイル名称・年月・ファイル名・タイプ・ID・拡張子の各テキストボックスがありファイル名称の定義がYYYYMMDD_FileName_Type_ID.csvで日付8文字・ファイルファイル名8文字・タイプ4文字・ID2文字・拡張子3文字の固定長で各項目間に_があり全28文字の固定長の場合 ファイル名称のイベントの更新後処理に Private Sub ファイル名称_AfterUpdate()    Me!年月 = MId(ファイル名称,1,8)    Me!ファイル名 = MId(ファイル名称,10,8)    Me!タイプ = MId(ファイル名称,19,4)    Me!ID = MId(ファイル名称,23,2)    Me!拡張子 = MId(ファイル名称,27,3) End Sub で簡単に出来ます。 これでファイル名称に入力しEnterキーで各項目が分解され各テキストボックスに入力されます。 ファイル名が可変する場合は一つ目の_の位置を求めその位置の1文字後から次の_の位置の手前までを切り出せば出来ます。ファイル名が可変する場合はタイプ・ID・拡張も同様に切り出せば出来ます。 この方が簡単。 こういう事ではないのでしょうか?質問と違っていればゴメンなさい。

hazzy_funky
質問者

補足

早々のご回答ありがとうございます。 > わざわざテーブルに保存しフォームに反映させテーブル > のレコードを削除する?のは何故?フォームに反映され > ている時レコードを削除すると表示できなくなります。 素人の考えでした。。。 いただいたソースコードを下記のようにボタンの[イベント プロシージャ]として設定したのですが、エラー「End Sub」がありませんと返ってきました。 Private Sub CmdFileName_Click() On Error GoTo Err_CmdFileName_Click Private Sub ファイル名称_AfterUpdate()    Me!年月 = MId(ファイル名称,1,8)    Me!ファイル名 = MId(ファイル名称,10,8)    Me!タイプ = MId(ファイル名称,19,4)    Me!ID = MId(ファイル名称,23,2)    Me!拡張子 = MId(ファイル名称,27,3) End Sub DoCmd.DoMenuItem acFormBar, acRecordsMenu, 5, , acMenuVer70 Exit_CmdFileName_Click: Exit Sub Err_CmdFileName_Click: MsgBox Err.Description Resume Exit_CmdFileName_Click End Sub 素人で申し訳ないのですが、再度ご回答、宜しくお願い申し上げます。

関連するQ&A

専門家に質問してみよう