Microsoft Access 掲示板

テキストボックスからインポート操作

6 コメント
views
4 フォロー

いつもお世話になっております。

現在外部アプリからコピペしたデータ(タブ区切り)を、テキストに貼り付けて保存したのち
リンクテーブルを使って、テーブルにデータ追加できるようにしております。
しかし、リンク先のテキストについて、いちいち一旦テキストとして保存するのが手間に感じるようになってきました。

タブ区切りのデータをアクセス上のどこかのテキストボックスに直接コピペして、インポート機能のように任意のテーブルにデータ追加することはできませんでしょうか。
もしくは、VBAでそのデータを一旦テキストデータとしてエクスポートしてインポートしなおすマクロを組めばよいでしょうか。

(追記)
インポートに絡み、もう1点質問です。
インポート設定をしているテーブルは扱いに慎重になっているのですが、例えばフィールドの順番を変えてもインポートには支障ありませんでしょうか。
要はリンクテーブルのフィールド判定が、並び順なのか、フィールドタイトルなのか知りたいです。

セロハン
作成: 2020/09/07 (月) 09:52:42
最終更新: 2020/09/07 (月) 12:50:54
通報 ...
1

タブ区切りデータは、見出しなし、
追加先のテーブルとフィールドの並び順は同じとします。

フォーム上には、下記のコントロールが配置してあるとします。
テーブル名を入力するテキストボックス「txtテーブル名」
タブ区切りデータを貼り付けるテキストボックス「txtデータ」
クリックするとテーブルにデータ追加するコマンドボタン「データ追加」

Private Sub AddData(tblname As String, ByRef s As String)
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim a, i As Long, j As Long
    Dim Datas

    Set db = CurrentDb
    Set rs = db.OpenRecordset(tblname)
    a = Split(s, vbNewLine)
    For i = 0 To UBound(a)
        Datas = Split(a(i), vbTab)
        rs.AddNew
        On Error Resume Next
        For j = 0 To UBound(Datas)
            rs(j) = Datas(j)
        Next
        On Error goto 0
        rs.update
    Next
End Sub

Private Sub データ追加_Click()
    Call AddData(Me.txtテーブル名, Me.txtデータ)
End Sub

こんな感じです。

4
セロハン 2020/09/07 (月) 22:57:59 0029a@1c915 >> 1

こちらでバッチリ思い通りのものができました。ありがとうございました。

5
セロハン 2020/10/23 (金) 15:30:25 1d451@2b9f5 >> 4

上記コードで、別データを扱うことになり、10列ごとに改行してレコードを新しくしたいです。
現在は全てタブ区切りになっています。
spritstrという関数を見つけましたが、accessでは使えなそうです?
どのようにコード指定すればよいでしょうか。

6
セロハン 2020/10/23 (金) 17:20:29 1d451@2b9f5 >> 4

思ったより問題が単純ではなかったので新しくスレッドを立てます。

2
hiroton 2020/09/07 (月) 17:14:56 2d6b2@f966d

クリップボード弄るあれこれ調べてたんですけどパッとしないですねぇ

Dim strClip As String

If Nz(Me!txtデータ) = "" Then
    'クリップボードのデータをコピー'
    Me!txtデータ.SetFocus
    DoCmd.RunCommand acCmdPaste
    Me.Recalc 'これを入れないとコード実行中に張り付けた値が反映されない'
End If

If Nz(Me!txtデータ) = "" Then Exit Sub

strClip = Me!txtデータ
Me!txtデータ = Null

'クリップボードのデータを削除'
CreateObject("WScript.Shell").Run "cmd /c ""echo off | clip""", 0

「クリップボードからの直接取込」または「txtデータに入力からの取込」の両方に対応して、2重取込防止(取込実行でtxtデータとクリップボードを消去)みたいなイメージで

3

MSForms.DataObjectオブジェクトを使うとクリップボードのデータを直接取得でしたり設定できます。

クリップボードとデータのやりとりをする:Excel VBA|即効テクニック|Excel VBAを学ぶならmoug