システムwiki

Excelから特定のアクセステーブルへのインポート

ErD2 解決済 最終更新日:2021-06-15 02:54

こんにちは、

DocMD.TransferSpreadsheetを使用して特定の範囲だけでなくインポートすることは可能です(このメソッドが範囲引数を持つことを知っている)が、それを直接現在の(空でない)tableにインポートしますか?

返信リスト(回答:9)

1 #
KenSher

以前の返信で、私は'あなたがターゲットtableの名前が入力されたTXTTableという名前のテキストボックスを持つフォームがあると言った.そのため、txttableはコントロールの名前です.コントロールの場合、NZ関数はゼロ長文字列を返すように呼び出されます.
無効である.これにより、Strtable変数にゼロ長文字列を割り当てることができます. strtable= nz(Me.txtable)コントロールがNULLの場合は
MEキーワードは、厳密に言えば、コードが実行されているクラスの現在のインスタンスへの参照を返しますが、現在の形式を参照する簡単な方法として考えてください.コントロールのデフォルトプロパティはその値プロパティであるため、
そして通常は省略しています.Me.txtableMe.Txttable.Valueの場合は短いです.

2 #
KenSher

値プロパティは、コントロールのプロパティシートには表示されません.フォームやレポートを設計するときは設定されていませんが、フォームまたはレポートが開かれたときに設定されます.コントロールは、バインドコントロールの場合にバインドされている列から値を取得します.
またはそのコントロールソースとして使用されている式、または非接続コントロールの場合、コード内のコントロールに値を割り当てる式から.
コントロールのデフォルトプロパティであると、このプロパティを使用して自分自身を気にする必要があります.通常、現在の値を返すか、コード内の値を割り当てるときに、通常その名前でコントロールを参照します.

4 #
KenSher

エラーダイアログの[デバッグ]ボタンをクリックすると、この行が強調表示されています.
elselif stttable
それはその行とそれをどのように修正するのかという問題が何であるかは明らかです.

6 #
ErD2

ああ私は誤りを考え出したと思います、これは欠けていた(太字の部分)
strtable= ""

応答6# ->にスキップ
3 #
KenSher

あなたの返事は私のものと交差しました.見て、それは明らかでした.

8 #
KenSher

このように:
docmd.transferspreadsheet _
transfertype:= acimport、_
TableName:= "NameoFtableGoeshere"、_
filename:= "PathToExcellGoEshere"、_
HasFieldNames:= true、_
範囲:= "RangeOfCellSornameOfrangeShere"
これは、範囲がフィールド名を最初の行として持つことを前提としています.そうでない場合は、hasFieldNames引数を省略してください.

応答8# ->にスキップ
7 #
ErD2

ああ、私はハードコードされたversionがどのように機能するかを知っています.それを説明する必要はありませんが、私はどのように実装するのかわからない
誰かがデータを既存のtableに5行を追加しましょう.私はあなたがパラメータとしてTableNameを追加できることを知っています...それはハードコードされていませんが、それを超えて実装する方法はわかりません.

応答7# ->にスキップ
5 #
KenSher

値を変数に割り当て、変数をTransferSpreadSheetメソッドの関連引数として使用します.txttableという名前のテキストボックスを持つフォームがあるとしましょう.ターゲットtableの名前が入力されているテキストボックス、txtrangeという名前のテキストボックスがあるとしましょう.
セルの範囲または範囲名が入力されている場合、ユーザーがフィールド名が最初の行としてフィールド名を持つかどうかを示す場合に、TrueまたはFalseのDefaultValueプロパティが与えられているChkhasFieldNamesチェックボックスに.、
そしてインポートボタン.
まずデータベース内の標準モジュールに次の機能を追加します. Public Function BrowseFile(バリアントとしてのVardoctype、バリアントとしてのvareExtension)文字列としての
Dim Strfileとして文字列として
Application.FileDialog(3)
.title= "ファイルの選択"
" .filters.Clear
>そうでない場合は
(vardoctype) .filters.add vardoctype、 "*" &varextension

の場合は終了 .filters.dd "すべてのファイル"、 "*.*"

の場合は strfile=.selectedItems(1)


msgbox "no file selected"、vbinformation
終了機能

の場合は終了

browsefile= strfile
終了機能
インポートボタンのクリックイベントのコードは
薄暗いrtpath
薄暗い文字列としてstrtable
薄暗い文字列としてのstrrange
ブール

strpath= BrowseFile( "Excelファイル"、 "xlsx")
strtable= nz(me.txttable、 "")
strrange= nz(Me.txtrange、 "")
BlnHasFieldNames= Me.ChkhasFieldNames
strpath= ""の場合
'ファイルが選択されていないので、

'msgbox関数を呼び出すことができるなら、彼女はユーザーに知らせるために彼女を
elselif stttable
'tableは選択されていませんので、
'msgbox関数を呼び出すことができるなら、彼女はユーザーに知らせるために彼女を


'Excelデータをtableにインポートする
docmd.transferspreadsheet _
transfertype:= acimport、_
tableName:= strtable、_
filename:= strpath、_
HasFieldNames:= BlnHasFieldNames、_
範囲:= strrange
終わり

9 #
KenSher

インポートされているデータが、TransferSpreadSheetメソッドのtableName引数としてtableを指定すると、table内の既存の行にインポートされた行が追加されます.