つい集めてしまうものはなんですか?

モジュールからフォーム上のテキストボックスに入力された値を参照する方法で質問です。

内容としては、テキストボックスに入力された日付(yyyymmdd)をファイル名にもつCSVファイルをインポートするといったものです。

フォーム名:Form1
テキストボックス名:TBox1
インポート元:C:\yyyymmdd.csv
インポート先:インポートテーブル

モジュール記述先:標準モジュール

Function Import()
On Error GoTo Import_Err

Dim FilePath As String

FilePath = "C:\" & Format(Form1. TBox1. Value, "yyyymmdd") & ".csv"

DoCmd.TransferText acImportDelim, "インポート定義", "インポートテーブル", FilePath

Import_Exit:
Exit Function

Import_Err:
Resume Import_Exit

End Function

以上の様なモジュールを組んでみましたがインポート出来ませんでした。
エラーは出ませんでしたが何も起こらないといった状態です。

モジュールの部分についてはなんとなくわかるのですが、フォーム側の設定?がよくわかりません。
あと何をどのようにすればテキストボックス内の値を参照可能になりますでしょうか?

何卒よろしくお願いいたします。

A 回答 (2件)

こんばんは。



標準モジュールということは、他でも使うという意味だと思いますので、引数を与えました。
それと、"Import" というユーザー定義関数名は、ぶつからないれども、ちょっとうまくないと思いますので、ImportCSV にしました。後は、Form1 側のどこかのイベントに加えて、

 Call ImportCSV(Me )

を加えればよいと思います。

Public Function ImportCSV(obj As Form)
  On Error GoTo ImportCSV_Err
  Dim FilePath As String
  Dim vntDate As Variant
  
  vntDate = obj.Tbox1.Value
  If IsDate(vntDate) Then
    vntDate = CDate(vntDate)
  Else
    MsgBox "日付値を正しく入力してください。例:yy/mm/dd", vbInformation
    Exit Function
  End If
  '差し引き 9年の幅を与えて、ミスを減らすことにしました。
  If Abs(Year(vntDate) - Year(Date)) > 10 Then
    If MsgBox(obj.Tbox1.Value & "入力は正しいですか?", vbInformation + vbYesNo) = vbNo Then
    Exit Function
    End If
  End If
  
  FilePath = "C:\" & Format(vntDate, "yyyymmdd") & ".csv"

 If Len(Dir(FilePath)) = 0 Then
    MsgBox "ファイルがありません。"
  Else
    DoCmd.TransferText acImportDelim, "インポート定義", "インポートテーブル", FilePath
  End If
ImportCSV_Exit:
  Exit Function

ImportCSV_Err:
  MsgBox Err.Description
  Resume ImportCSV_Exit

End Function
    • good
    • 0
この回答へのお礼

返信ありがとうございます。
ご教授いただいたコードで動かしてみましたがエラーが出てしまったので、チェック部分は外して動作したのでそちらで対応いたしました。
更新版としてエラーチェックを入れたいと思います。

お礼日時:2007/10/22 10:31

AccessVBAかな。



>エラーは出ませんでしたが何も起こらないといった状態です。

On Error GoTo Import_Err

ここでエラーを無視していますので、この行をコメントアウトして下さい。
エラーが出ると思いますよ。

------------------------------------------------

通常はフォームにコードを書きますが、モジュールに書いているのは何か理由があるのでしょうか?

モジュールに書く場合は、フォームが開いているかチェックする必要があります。

------------------------------------------------

>FilePath = "C:\" & Format(Form1.TBox1.Value, "yyyymmdd") & ".csv"
FilePath = "C:\" & Format(Forms.Form1.TBox1.Value, "yyyymmdd") & ".csv"

Formsが必要だと思います。
また、内容をチェックした方が良いと思います。

------------------------------------------------
下記のような感じでいかがでしょうか?

Function Import()
On Error GoTo Import_Err

Dim FilePath As String

If SysCmd(acSysCmdGetObjectState, acForm, "Form1") <> 0 Then
  If IsDate(Forms.Form1.TBox1.Value) Then
    FilePath = "C:\" & Format(Forms.Form1.TBox1.Value, "yyyymmdd") & ".csv"
  ElseIf IsDate(Forms.Form1.TBox1.Text) Then
    FilePath = "C:\" & Format(Forms.Form1.TBox1.Text, "yyyymmdd") & ".csv"
  Else
    MsgBox "TBox1の内容が日付ではありません。"
  End If
  
  If FilePath <> "" Then
    DoCmd.TransferText acImportDelim, "インポート定義", "インポートテーブル", FilePath
  End If
Else
  MsgBox "Form1が開いていません"
End If

Import_Exit:
Exit Function

Import_Err:
Resume Import_Exit

End Function
    • good
    • 0
この回答へのお礼

返信ありがとうございます!
なんとか動く様になりました。
クラスモジュールの記述方法はあったのですが標準に書くときの記述を間違っていました。
大変ありがとうございました。

お礼日時:2007/10/22 10:29

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報