
モジュールからフォーム上のテキストボックスに入力された値を参照する方法で質問です。
内容としては、テキストボックスに入力された日付(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
以上の様なモジュールを組んでみましたがインポート出来ませんでした。
エラーは出ませんでしたが何も起こらないといった状態です。
モジュールの部分についてはなんとなくわかるのですが、フォーム側の設定?がよくわかりません。
あと何をどのようにすればテキストボックス内の値を参照可能になりますでしょうか?
何卒よろしくお願いいたします。
No.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
返信ありがとうございます。
ご教授いただいたコードで動かしてみましたがエラーが出てしまったので、チェック部分は外して動作したのでそちらで対応いたしました。
更新版としてエラーチェックを入れたいと思います。
No.1
- 回答日時:
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
返信ありがとうございます!
なんとか動く様になりました。
クラスモジュールの記述方法はあったのですが標準に書くときの記述を間違っていました。
大変ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ユーザー定義関数に#NAME?が返...
-
【Excel2016】結合されたセルを...
-
モジュールからフォームのボタ...
-
ユーザーフォームに最小化・最...
-
グラフのX,Y座標を取得したい
-
標準モジュールを削除したい。(...
-
linux mintで(EE )Failed to lo...
-
VBAで別モジュールへの変数の受...
-
クリアーとデリート
-
EXECEL VBA コマンドボタンか...
-
ACCESSのVBAでPrivate Sub ~en...
-
LCD ディスプレイを Raspberry ...
-
PerlでUNIXのコマンドとパスワ...
-
「デバイスは PRN を初期化でき...
-
VBScriptのデバッグ方法につい...
-
tex についての質問です このコ...
-
[ASP]条件によってインクルード...
-
教えて下さい。
-
forkで作れる子プロセス数が限...
-
windowsXP上で動作する最新版の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel VBAでリンク切れをチェッ...
-
Excel VBA 定義されたプロージ...
-
Application.OnKey:項目入力中...
-
Excel VBAで、ユーザーフォーム...
-
モジュールの最大数はいくつな...
-
グラフのX,Y座標を取得したい
-
VBA This Workbookモジュール...
-
ユーザー定義関数に#NAME?が返...
-
VBAで旧字体を異字体に一括で変...
-
モジュールとクラスの違いって...
-
Sub Workbook_Open()でユーザー...
-
acwzlibとは?
-
標準モジュールを削除したい。(...
-
エクセルVBAでシートモジュール...
-
VBでグローバル変数を宣言するには
-
【Excel VBA】標準モジュールに...
-
vba userFormのSubを標準モジュ...
-
【vba】フォームに書いてあ...
-
VBAで別モジュールへの変数の受...
-
マクロについて教えてください。
おすすめ情報