2017-08-03 9 views
1

問題があります。最初の反復は正しく行われますが、2番目の反復はSet tdf = db.TableDefs("temp_table")になります(上の行が作成されていても、アクセスは "temp_table"を見つけることができません)。間違いなく、新しいインポートされたテーブルのポインタが間違っています。MS Access VBA内でオブジェクトを操作する方法

dirfilename = Dir(strfilename & "\") 
    Do While dirfilename <> "" 

    DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel8, "temp_table", 
    strfilename & "\" & dirfilename, True 
    Set tdf = db.TableDefs("temp_table") 
    . 
    . 
    . 
    . 
    db.TableDefs.Refresh 
    dirfilename = Dir 
    Loop 

お手伝いできますか?

+0

以降の反復では、新しいテーブルを作成するのではなく、最初の反復で作成されたテーブルにレコードを追加しようとしています。複数のスプレッドシートをインポートしようとしていますか?なぜあなたはTableDefsが必要ですか? – June7

+0

私は同じフォルダにある連続したブックからデータを追加しようとしています(したがって私は 'dir'関数を配置しました)。最初の反復の後、2番目の "temp_table"(以前の "temp_table"を削除する抜粋を投稿に貼り付けるのを忘れていました)には現代的な値が含まれていますが、新しいテーブルです。私は前のものを削除します。もちろん、私はそれらを "temp_table2"などと呼ぶことができますが、問題がまだ発生するのではないかと心配しています。プログラミング標準に関しては正しくありません。 –

+0

個人的には、シートの構造が決して変わらない場合は、テーブルを作成して削除しません。私はちょうど挿入と永続的なテーブルのレコードを削除する - それは '一時的な'テーブルと呼ばれても、テーブルは永久的であり、レコードは一時的です。とにかくなぜテンポラリテーブルですか?これらの記録はどうなりますか? – June7

答えて

0

過去には問題はありませんが、今日は問題を再現できません。

試してみてください。

Application.RefreshDatabaseWindow

または

DoCmd.SelectObject acTable, "temp_table", True

0

[OK]を、私はそれを考え出しました。データをインポートするコマンドとポインタ(tdf)を設定するコマンドの間に 'db.TableDefs.Refresh'を挿入する必要がありました。一時テーブルを一意的に呼び出す必要もあったので、 'temp_table1'、 'temp_table2'などは正しく動作しました。

関連する問題