Microsoft Access 掲示板

「コマンド」ボタンで外部ファイルをインポートしたい

8 コメント
views
4 フォロー

access 2010 バージョンを使用しております。
OSは11になります。

ACCESSは始めたばかりでコードが分りません(これから勉強していきたいと思います)

ご指導いただきたい内容は
「フォーム」上に"参照ボタン"(インポートするファイルを自由に選ぶため)と
"読込ボタン"で(自動インポートしたい)の2つのコマンドボタンを置いて
CSVファイルをインポートしたいと考えてます。

現状はインポートウィザードを使用してインポートはできます。

以下の手順で行っております。

●「外部データ」→「テキストファイル」を選択
●参照ボタンから<ファイル名を選んで>→<レコードのコピーを次のテーブルに追加する>にチェックしインポートしたいテーブルを選択
●<区切り記号付きーカンマやタグなどでフィールドが区切られている>を選択
●<先頭行をフィールド名として使う>

で行うことができます。

宜しくお願い致します。

みのちゃん
作成: 2023/03/10 (金) 07:45:42
最終更新: 2023/03/10 (金) 18:55:03
通報 ...
1
みのちゃん 2023/03/10 (金) 18:56:31 ad693@a6874

ダイアログの表示方法は分かりました。

ダイアログから選択したファイルを「テキストボックス」に
表示させインポートする方法を教えてください。

ダイアログ表示は下記のようにしました
Private Sub コマンド6_Click()

    On Error Resume Next
    '変数定義
    Dim intRet As Integer         'ダイアログ用変数
    Dim GetFileName As String     'フルパスの値

    With Application.FileDialog(msoFileDialogOpen)
        'ダイアログのタイトルを設定
        .Title = "ファイルを開くダイアログ"
        'ファイルの種類を設定
        .Filters.Clear
        .Filters.Add "Microsoft Office Excelファイル", ".xls,.csv"
        .FilterIndex = 1
        '複数ファイル選択を許可しない
        .AllowMultiSelect = False
        '初期パスを設定
        .InitialFileName = CurrentProject.Path
        'ダイアログを表示
        intRet = .Show

        If intRet <> 0 Then
          'ファイルが選択されたとき
          'そのフルパスを返り値に設定
          GetFileName = Trim(.SelectedItems.Item(1))
        Else
          'ファイルが選択されなければブランク
          GetFileName = ""
        End If
    End With
    '選択されたフルパスをテキストボックスへ表示
    Form_F_Form.テキストn.Value = GetFileName

End Sub

2

CSVファイルのインポートは DoCmd.TransferTextメソッドでできます。
詳細は下記で確認してください。

DoCmd.TransferText メソッド (Access) | Microsoft Learn

フォーム上にコマンドボタン「コマンド0」、テキストボックス「テキスト1」か配置してあり、
「テーブル1」にインポートするとすると下記のコードになります。

Private Sub コマンド0_Click()

'    On Error Resume Next
    '変数定義
    Dim intRet As Integer         'ダイアログ用変数
    Dim GetFileName As String     'フルパスの値

    With Application.FileDialog(msoFileDialogFilePicker)
        'ダイアログのタイトルを設定
        .Title = "ファイルを開くダイアログ"
        'ファイルの種類を設定
        .Filters.Clear
        .Filters.Add "csvファイル", "*.csv"
        '複数ファイル選択を許可しない
        .AllowMultiSelect = False
        '初期パスを設定
        .InitialFileName = CurrentProject.Path
        'ダイアログを表示
        intRet = .Show

        If intRet <> 0 Then
          'ファイルが選択されたとき
          'そのフルパスを返り値に設定
          GetFileName = Trim(.SelectedItems.Item(1))
        Else
          'ファイルが選択されなければブランク
          GetFileName = ""
        End If
    End With
    '選択されたフルパスをテキストボックスへ表示
    Me.テキスト1.Value = GetFileName

    DoCmd.TransferText acImportDelim, , "テーブル1", GetFileName, True

End Sub
3
みのちゃん 2023/03/12 (日) 18:39:57 ad693@a6874

hatena様

ありがとうございます。
ダイアログからCSVファイルを選択しますと
テキストボックスにフルパスが入りますが
以下のエラーが表示されました。
何度か試しましたが同じ状態です。
画像1
画像2

4
みのちゃん 2023/03/12 (日) 18:53:44 ad693@a6874

hatena 様

説明が不足してました。申し訳ありません。

あらかじめ用意したインポート用のテーブルがあり
そのテーブルにインポートするとエラーになります。(先投稿の)

(ウィザードで手動ではインポートできます。)

5
みのちゃん 2023/03/12 (日) 19:16:10 ad693@a6874

hatena 様

前投稿の

説明が不足してました。申し訳ありません。
あらかじめ用意したインポート用のテーブルがあり
そのテーブルにインポートするとエラーになります。(先投稿の)

(ウィザードで手動ではインポートできます。)

勘違いでした。

インポートできてましたが文字化けと
インポートエラーのテーブルができます。
また、望んでいる状態のデータインポートに
なっておりませんでした。

画像の順番は
インポートエラーの画像
テーブル1の状態
手動での状態です(理想状態)
手動手順

※インポートしたいCSVファイルのアップロードはできないのでしょうか?

宜しくお願いします。画像1
画像2
画像3
画像4

6
みのちゃん 2023/03/12 (日) 19:35:22 ad693@a6874

hatena 様

インポート定義を追加したらできました。

DoCmd.TransferText acImportDelim, "インポート定義", "テキスト1", GetFileName, True

※ダイアログ開いてから「キャンセル」を選ぶとエラーになります。
解決策はありますでしょうか?

なんども申し訳ありません。

7

下記でどうでしょう。

    '選択されたフルパスをテキストボックスへ表示
    Me.テキスト1.Value = GetFileName
    If GetFileName = "" Then Exit Sub 'これを追加してください。
    DoCmd.TransferText acImportDelim, , "テーブル1", GetFileName, True
8
みのちゃん 2023/03/13 (月) 17:50:32 ad693@a6874

hatena 様

ありがとうございました。
プログラムを停止させれば良かったのですね!

勉強になりました。