Accessのマクロ・VBAにてCSVファイルを
インポートしたいのですが、うまくいきません。

DoCmd.TransferText acImportDelim, , "C:\Documents and Settings\yoshimi\My Documents\顧客マスタテーブル.csv", False
現在のコードです。

「オブジェクト'0.txt’が見つかりませんでした。
オブジェクトが存在していること、名前やパス名が正しいことを確認
してください。」
とエラーが表示されます。

過去ログを検索し、似たようなものを見つけ同じようにしたつもりです。
http://okweb.jp/kotaeru.php3?q=1691138
(回答のANo.1の定義の保存場所が分からずしていません)

どこがおかしいのか教えていただきたいです・・・

A 回答 (3件)

インポート先(保存先)となるテーブルが指定されていないようです。



その分、カンマ(,)が1個少ないなっているために引数がずれて判断され、インポートするファイルが「C:\~顧客マスタテーブル.csv」ではなく、「0.txt」だと判断されているのではないかと思います。
(「False」がファイル名と解釈され(False=0)、テキストファイルと解釈されて拡張子「.txt」をつけてエラー表示された、と)

とりあえず、「Test」テーブルを作成し(フィールドは仮でF1,F2の2つでテキスト型)、「,"C:\~」の前に「,"Test"」を入れて実行してみて下さい。
(csvファイルが3列以上の構成であれば、「テーブル'Test'にはF3フィールドがありません」とのエラーが表示されるようになりると思いますので、適宜F3,F4,・・・と、必要な列数を追加して下さい:定義のかわりです)

この回答への補足

ご返答ありがとうございます。
遅くなり申し訳ありません。
「込み合っています」のメッセージばかりで、書き込めませんでした・・・

教えていただいたように、下記のようになおしました。
Private Sub 商事部門_Click()
On Error GoTo 商事部門_Err

DoCmd.TransferText acImportDelim, , , "Test", "C:\Documents and Settings\yoshimi\My Documents\顧客マスタテーブル.csv", False

商事部門_Exit:
Exit Sub
商事部門_Err:
MsgBox Error$
Resume 商事部門_Exit
End Sub

今度は、
「指定した式は、いずれかの引数とデータ型が対応していません」と
表示されました。

念のため、csvのファイルを2列で文字のみのデータにしてみましたが
同じエラーが表示されます。

何がいけないのでしょうか?

補足日時:2005/10/10 22:46
    • good
    • 1

No.1です。



すみません、

> 「,"Test"」

ではなく、

> 「"Test",」

でした。お詫びの上、訂正いたします。
大変失礼致しました。
    • good
    • 0
この回答へのお礼

ありがとうございました。

(「False」がファイル名と解釈され(False=0)、テキストファイルと解釈されて拡張子「.txt」をつけてエラー表示された

エラーの理由を教えていただいて勉強できました。
&うまくいきました。m(_ _)m

お礼日時:2005/10/11 17:16

手動でインポートしインポートの定義ファイルの作成してください。


 テーブルインポート→テーブル選択新規⇒区切り記号つき→カンマ、先頭行をフィールド名にチェック
 →新規テーブルに保存→各フィールドの型設定→主キーを設定をチェック
 ⇒「これでデータをインポートするための設定は・・・」となります。
  ここで画面の設定ボタンをクリック→インポートの定義ファイルを保存します。
DoCmd.TransferText acImportDelim, "インポートの定義ファイル名","Accessのテーブル名","テキスト名.csv"

DoCmd.TransferText acImportDelim,"インポートの定義ファイル", _
"Test", "C:\Documents\顧客マスタテーブル.csv", False
これでどうでしょうか?参考まで
    • good
    • 0
この回答へのお礼

インポートの定義ファイルを保存
の方法が分からず困っていました。

インポートする際のルールを先にきめておくようなもの・・と
理解しました。(うまく言えませんが)

インポートできました。
ありがとうございました。

お礼日時:2005/10/11 17:18

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qe-broadでのポート開放のやり方を教えてください

回覧ありがとうございます
引越し先のアパートではe-broadが契約されており
入居同日からインターネットが無料で利用できるようになっています

よくゲームなどで、ポート開放(CTUから)をしていましたが
e-broadでのポート開放のやり方がわからず困っています
公式のQ&Aを見てみると
※ポート開放サービス:3,150円(税込)/1ポート
とありますが、頻繁にポート開放をしますし、1ポートを開放するだけに3000円も取られるのは勿体無いと思うので、自分で開放できるやり方を探しています

フリーソフトでも構いません
宜しくお願いします

Aベストアンサー

レオネットとかと同じ、建物内が家庭内LAN状態なネットなのですね。
ポート開放はPC側のソフトでどうにか出来るものじゃないので、金払ってポート開放してもらう以外には対処のしようがありませんね。

どうしても困るのなら、自分で別途ADSL引くなり。(使えるかどうかは知りませんが。)


ところで、CTUでポート開放しないと遊べないゲームなんてありました?
光プレミアムでCTU使ってますが、ポート開放が必要なゲームなんて無いのですが・・・セキュリティ設定を高とかに変えているのでしょうかね?
もしくは、遊んでるジャンルが違うのかもしれませんが・・・MMORPGとかだと必要ないですけど、他のジャンルだと必要なのがあるのでしょうかね?

Qcopy C:\Documents and Settings\*.*が出来ない

C:\Documents and Settingsは通常のフォルダではないのですか? copy C:\Documents and Settings\*.* c:\が出来ません。
どの様に指定するのか教えてください。

Aベストアンサー

フォルダやファイル名の Path にスペースが含まれていると
そこで命令文の区切りとして解釈されてしまうのでダブルクォーテーションで
括って、copy "C:\Documents and Settings\*.*" c:\
では如何でしょう?

ただ、当方ではcopy C:\Documents and Settings直下には
ファイルが有りませんので、結局何もコピーできませんでしたけど・・
フォルダごとのコピーなら、Xcopy を使われては?

Qポート開放が出来ません

使用機器はAtermWR8300Nで、windowsXPSP2の内臓無線子機で接続しています。
ポートマッピングで目当てのポート番号(UDPのみ開放できれば良い)を指定したのですが、ポート開放は出来ていませんでした。
ポートマッピングとポート開放は別物なのでしょうか?
回答よろしくお願いします。

Aベストアンサー

設定
http://www.aterm.jp/function/guide13/web-data/type2_s/main/8300/8w_m6.html

開放出来ない原因
・No.2さんのいうようにソフトを起動していない。
※ソフトを起動してもう一度確認。
・No.1さんのいうようにセキュリティソフトのファイアウォールでふさいでしまっている。
※セキュリティソフトの設定をする。
・二重ルーターになっている。
※設定すれば開放できる。
・マンションなどで管理ルーターが置かれている。
※この場合ポート開放は無理。

回線種別や接続機器の確認をして必要なら補足をするといいかもしれません。

Q[Access VBA] DoCmd.OpenForm ...の書式について(VBAに詳しい方求む!)

仕事でAccessを使用しています。
帳票管理のデータベースを作ってて
帳票名フィールドに各種の帳票の名前が格納されています。
ここはコンボボックスにしてあり、データベース化する
対象の帳票も決まってます。
メインのフォームには帳票の基礎データを入力し
フォーム上に作ったボタン(ボタン名「詳細記録」)を押すことで
各帳票の詳細な記録を書きこむフォームが現れるように設計する予定です。

そこで、メインのフォームに設けたボタンの
「クリック時」のイベントプロシージャに以下の記述をしました。

Private Sub 詳細記録_Click()
DoCmd.OpenForm 帳票名
End Sub

ボタンをクリックした時点で帳票名フィールドに記載されている
帳票の詳細記録フォームがたちあがります。
例えば帳票名フィールドが
「AA」の時→ボタンClick→AAの詳細記録フォームが立ちあがる。
「BB」の時→ボタンClick→BBの詳細記録フォームが立ちあがる。
(企業秘密のため具体的な帳票名を書けません。)

実はこのような動作をしてくれるのが目的だったのですが
疑問があるんです。
それより前には、上述のと1箇所だけ記述がいろいろ変えてました。

DoCmd.OpenForm "帳票名"

帳票名のところがダブルクォーテーションでくくってあるかないか
の違いです。
くくるとエラーが出ますが、くくらないとうまく行きます。

[帳票名]のときもうまく行きましたが、"[帳票名]" はだめのようです。

また、" "の中を具体的な帳票の名前にすると
(例:DoCmd.OpenForm "AA")
いつでもそのAAフォームだけがたちあがります。
(帳票名フィールドの記述がBBでも)

たまたまダブルクォーテーションをはずすと
うまく反応してくれたんでよかったんですが
ダブルクオーテーションひとつで
なぜこんなに動きが違うのか?
わかる方よろしくお願いします。

仕事でAccessを使用しています。
帳票管理のデータベースを作ってて
帳票名フィールドに各種の帳票の名前が格納されています。
ここはコンボボックスにしてあり、データベース化する
対象の帳票も決まってます。
メインのフォームには帳票の基礎データを入力し
フォーム上に作ったボタン(ボタン名「詳細記録」)を押すことで
各帳票の詳細な記録を書きこむフォームが現れるように設計する予定です。

そこで、メインのフォームに設けたボタンの
「クリック時」のイベントプロシージャに以下の記述をし...続きを読む

Aベストアンサー

文字列と要素名との使い分けで混乱なさってるようですね。

ダブルクォーテーションで括るのは、「ソースコード中に直接、文字列を記述する」場合のみです。

'テキストボックスに「こんにちは」と表示する
MsgBox "こんにちは"

この例では、MsgBox命令に対して、「こんにちは」という文字列を渡しています。

Dim Message as String
Message = "こんにちは"
MsgBox Message

この例では、Message という変数に「こんにちは」という文字列を代入し、MsgBox命令にMessage という変数を渡しています。
Messageは変数であって文字列ではないため、ダブルクォーテーションで括る必要がないのです。

DoCmd.OpenForm でも同様。

DoCmd.OpenForm "帳票A"
は、「帳票A」という文字列をDoCmd.OpenForm命令に渡しています。


帳票フィールドに「帳票A」という文字が格納されているとき、

DoCmd.OpenForm Me![帳票フィールド]

とすると、DoCmd.OpenFormに渡されるのは「Me![帳票フィールド]」という文字列ではなく、帳票フィールドに格納されている「帳票A」という文字列が渡されるのです。

尚、この命令文は

Dim Chouhyou As String
Chouhyou = Me![帳票フィールド]
DoCmd.OpenForm Chouhyou

とするのと同じです。

あんまりいい説明じゃないかもしれませんが、VBA理解の一助にでもなれば幸いです。

文字列と要素名との使い分けで混乱なさってるようですね。

ダブルクォーテーションで括るのは、「ソースコード中に直接、文字列を記述する」場合のみです。

'テキストボックスに「こんにちは」と表示する
MsgBox "こんにちは"

この例では、MsgBox命令に対して、「こんにちは」という文字列を渡しています。

Dim Message as String
Message = "こんにちは"
MsgBox Message

この例では、Message という変数に「こんにちは」という文字列を代入し、MsgBox命令にMessage という変数を渡しています...続きを読む

QWindows7でのポートの開放ができません。

Windows7でのポートの開放ができません。
http://security.okwave.jp/qa5589957.html ←の通りにやったのですが、ポートが開放されているかチェックでやると開放されてませんと出てしまいます><ちなみにポート開放ソフトのUPnPCJや開放くんでもできませんでした。
開放したいポート番号 TCP/UDP 2400

Aベストアンサー

auひかりですとホームゲートウェイ(Aterm BL190HWかな?)ですね。
このホームゲートウェイで無線接続をさせているのでしょうか。
それとも他にルーターがあるのなら二重ルーターのせいでポート開放が出来ないと思われます。
接続機器をお確かめください。

QApplication.ScreenUpdating=Falseを使うと・・・。

VBAでユーザーフォームを表示させ、コマンドボタンを押すと
ユーザーフォームを閉じて処理を開始すると言う設定をしているのですが
ここにApplication.ScreenUpdating=Falseを追加すると
ユーザーフォームが閉じずに処理を行なってしまいます。
(最後まで開いたまま)

コマンドボタンのクリックイベントの最初にUserForm1.hideと入れ、その後にApplication.ScreenUpdating=Falseを入れた後に
行なう処理を書いているのですが、どこか間違っていますでしょうか?

お教え下さい。よろしくお願いします。

Aベストアンサー

fk_sapさん、こんばんは。Wendy02です。

ここらの話は、設計の問題なんですね。
人の好き好きにもあると思いますし、あまり、これという方法もあるわけではありません。

>ユーザーフォームを消して「処理中」などと書いたシートを
>表示させてみようかなどと、技術もないクセにそう言う理想ばかりが先走ってしまって・・・(汗)

ご指摘のとおり、その問題は、「処理中」いう表示ですね。私は、凝ったことをせずに、ユーザーフォーム上のラベルなどに出してしまいます。フリーソフトのExcelユーティリティには、すごく凝った、プログレスバーもどき(本物は配布できないはず)などしている人がいますが、それは、VBでするならともかく、私は、Excelでは、すこぶる簡単にしてしまいます。

他にワークシート上に出すと言っても、よく、Windowのタイトル部分や、ステータスバー部分を使うことは思いつくのですが、必ずしも、人は見ないような気がしてやめてしまいます。「処理中」などと書いたシート なんて、オブジェクトとしては、私には重過ぎるように思いますね。

>Beepを入れることによって、どう言う効果があるのでしょうか?

これは、私の癖かもしれませんね。終了が気が付かないことがあるからです。MsgBox は、最後にクリックをしなければ終われません。その代わりに、終了の合図にWshShell.PopUpを使う人がいます。クリックを押さないで、MsgBox を終わらせられるからです。私は、どちらも面倒なので、Beepだけで済ませてしまいます。

fk_sapさん、こんばんは。Wendy02です。

ここらの話は、設計の問題なんですね。
人の好き好きにもあると思いますし、あまり、これという方法もあるわけではありません。

>ユーザーフォームを消して「処理中」などと書いたシートを
>表示させてみようかなどと、技術もないクセにそう言う理想ばかりが先走ってしまって・・・(汗)

ご指摘のとおり、その問題は、「処理中」いう表示ですね。私は、凝ったことをせずに、ユーザーフォーム上のラベルなどに出してしまいます。フリーソフトのExcelユーティ...続きを読む

QwindowsXP ファイヤーウォールのポート開放について

windowsXP ファイヤーウォールのポート開放について

http://oshiete.goo.ne.jp/qa/6138225.html
PC:XP SP3
回線:NTT西日本 光プレミアム
接続:CTUから有線接続
こちらの方でも質問したのですが、以前に使っていたプロバイダだとTCP、UDP共に開放出来たのに、今回TOPPAにしてから開放出来なくなりました。

http://anisong.dip.jp/port-chk/port-menu.pl
こちらのサイトでポート開放を確認するとFILTERED or LISTENINGになります。
そこで、一つずつ確認するために、CTUのファイヤーウォールをきったり、セキュリティソフトを切ってもダメでしたが、windowsファイヤーウォールの機能を切ると前進がありました。

先ほどまでFILTERED or LISTENINGだったものが、NOT LISTENINGになりました。
これはポート開放出来ているが、ソフトが使われて居ないと言うものでしたので、再度ソフトを起動してから確認すると、またFILTERED or LISTENINGになってしまいます。

CTUでUDPポートを4つほど開放する設定をして同様にすると、なぜかソフトに設定しているUDPポートだけがFILTERED or LISTENINGになり、それ以外の開放したUDPポートがNOT LISTENINGになります。
ソフトのUDPポートを、他の開放してるUDPポートに変更すると、変更設定したUDPポートだけがFILTERED or LISTENINGになります。

こんなに都合よく、ソフトに設定したポートだけがポート開放出来ないというのはどのような原因が考えられますでしょうか?

1.ソフトは何度も再起動をさせて確認している。
2.ソフトを起動した状態でポート開放をしている。
3.ファイヤーウォールを起動した状態でポートを指定して開放してみてもダメ
4.TCPポートは問題なく開放出来ている。
5.繰り返しますが、この設定で以前のISPでは開放出来ていた。ローカルIPも固定している。

どうか御助言願います。

windowsXP ファイヤーウォールのポート開放について

http://oshiete.goo.ne.jp/qa/6138225.html
PC:XP SP3
回線:NTT西日本 光プレミアム
接続:CTUから有線接続
こちらの方でも質問したのですが、以前に使っていたプロバイダだとTCP、UDP共に開放出来たのに、今回TOPPAにしてから開放出来なくなりました。

http://anisong.dip.jp/port-chk/port-menu.pl
こちらのサイトでポート開放を確認するとFILTERED or LISTENINGになります。
そこで、一つずつ確認するために、CTUのファイヤーウォールをきったり、セキ...続きを読む

Aベストアンサー

> こんなに都合よく、ソフトに設定したポートだけがポート開放出来ないというのはどのような原因が考えられますでしょうか?

TCPとUDPの違い、ファイヤウォールの動作のrejectとdropの違いが理解できていないだけでは?

TCPはコネクションを張るという概念があるので、TCPのコネクションが張れた時点でポート開放ができていると判断可能

UDPの場合はTCPと異なりコネクションという概念がないので、

http://pooh.gr.jp/?p=517
・ICMP (Port) Unreachableが帰ってきた場合 → 「NOT LISTENING」と表示
・何も帰ってこない場合 → PortをListenしているのかdropしているのか判断できないので、「FILTERED or LISTENING」と表示

QApplication.DisplayAlerts =Falseでも警告される?

下記のコードを実行するとSheet1という名前のシートがないBookを開いた場合、「統合元ファイル○○のSheet1を開けません」という警告がでます。
無ければ集計しなくていいので「はい」を押せばいいのですが、その都度止まってしまうのは困ります。
Application.DisplayAlerts = False としても警告されるのはなぜでしょうか?出ないようにすることは出来ないのでしょうか?

Sub test03() 'Sheet1のみ開かずに統合
Dim MyFile As String, MyPath As String
Dim SumFile() As Variant, i As Long
MyPath = ThisWorkbook.Path & "\"
MyFile = Dir(MyPath & "*.xls", vbNormal)
Do Until MyFile = ""
If MyFile <> ThisWorkbook.Name Then
ReDim Preserve SumFile(i)
Application.DisplayAlerts = False
SumFile(i) = "'" & MyPath & "[" & MyFile & "]Sheet1'!R1C1:R10C2" 'A1からB10のLinkを変数に代入
Application.DisplayAlerts = True
i = i + 1
End If
MyFile = Dir
Loop
If i = 0 Then MsgBox "データが有りません ( ̄□ ̄;)!!": Exit Sub
Worksheets("Sheet1").Range("A1").Consolidate Sources:=SumFile()
End Sub

下記のコードを実行するとSheet1という名前のシートがないBookを開いた場合、「統合元ファイル○○のSheet1を開けません」という警告がでます。
無ければ集計しなくていいので「はい」を押せばいいのですが、その都度止まってしまうのは困ります。
Application.DisplayAlerts = False としても警告されるのはなぜでしょうか?出ないようにすることは出来ないのでしょうか?

Sub test03() 'Sheet1のみ開かずに統合
Dim MyFile As String, MyPath As String
Dim SumFile() As Variant, i As Long
MyPath...続きを読む

Aベストアンサー

横から失礼します。

> ブックをOpenせずにSheet1の存在確認をする方法はありますか?

これをヒントに関数化してみて下さい。

Sub Sample()

  ' ExecuteExcel4Macro メソッドを使う方法
  ' ダミーアクセスしてエラーになったらシートは無い
  
  Dim strQry As String
  Dim Dummy As Variant
    
  strQry = "'C:\[test.xls]Sheet1'!R1C1"
  Dummy = Application.ExecuteExcel4Macro(strQry)
  If IsError(Dummy) Then
    MsgBox "Sheet1 は無い"
  Else
    MsgBox "Sheet1 が在る"
  End If

End Sub

Qポート開放なしで通信できるわけ

ポート開放していない状態で通信することが可能なのでしょうか?PS3の「ダークソウル」というゲームをしているのですが、このゲームは通信方式にP2Pを利用していてポート開放が必須ということでした、しかし私は今までこのことを知らずにゲームをプレイしていて最近になってやっとルータの設定をしてポートを開放するに至りました、そのポート開放関連を調べているときに「データは相手のポート番号をみて送信するサービス(アプリケーション)を選ぶ、なのでポートの開放が必要」と書いてありました。ではなぜ私はポート開放をしていない期間、ダークソウルのマルチプレイができていたのでしょうか?データの送信先がわからない状態に通信が確立していた理由がわかりません・・・
伝わりにくい文章と思いますが御回答の程、お願いします。

Aベストアンサー

ポート開放をしていないということは相手からの通信を受け付けないということです。

しかし、こちらから通信したものの返事は受け付けます(動的にポートを開放している)。
こちらが主体的に通信すればOKです。

ただし、結果としてこちらから通信しなければいけないので通信が遅くなることもあります。
ネット対戦でラグる場合の解決手段としてポート開放があるのはこのためです。

Qaccess レコードソースを選択し、DoCmd.OpenFormする方法

Select Caseのフレームで、レコードソース(クエリ)を選択し、
そのソースを基にDoCmd.OpenFormする方法がわかりません。
よろしくお願いします。
----------------------------------------------------
Dim strSource As String
Dim Q1, Q2 As String
Dim stDocName As String
Dim フォーム1 As Form
stDocName = "フォーム1"
Q1 = "クエリ1"
Q2 = "クエリ2"

Select Case フレーム1
Case 1
strSource = Q1
Case 2
strSource = Q2
End Select

'stDocName.RecordSource = strSource '-----この文はこの位置でよいのでしょうか?
DoCmd.OpenForm stDocName, acFormDS
----------------------------------------------------
クエリ1,クエリ2は基になるテーブルが違いますが、フィールドは同一にしてあります。
ですのでフォーム1には、対応するテキストボックスは用意してあります。

Select Caseのフレームで、レコードソース(クエリ)を選択し、
そのソースを基にDoCmd.OpenFormする方法がわかりません。
よろしくお願いします。
----------------------------------------------------
Dim strSource As String
Dim Q1, Q2 As String
Dim stDocName As String
Dim フォーム1 As Form
stDocName = "フォーム1"
Q1 = "クエリ1"
Q2 = "クエリ2"

Select Case フレーム1
Case 1
strSource = Q1
Case 2
strSource = Q2
End Select

'stDocName.RecordSo...続きを読む

Aベストアンサー

<1>

Private Sub コマンド0_Click()
  DoCmd.OpenForm "フォーム1", acFormDS
  Forms("フォーム1").RecordSource = "クエリ" & Me.フレーム1
End Sub

<2>

Private Sub コマンド1_Click()
  DoCmd.OpenForm "フォーム1", acFormDS, , , , , "クエリ" & Me.フレーム1
End Sub

' ------------------------------------------
' [フォーム1] ロード時にレコードソース設定
' ------------------------------------------
Private Sub Form_Load()
  If Len(Me.OpenArgs & "") > 0 Then
    Me.RecordSource = Me.OpenArgs
  End If
End Sub

まあ、好き好きでしょうが<2>がOKのバージョンであれば<2>がお勧めです。

<補足>

ただ、WhereCondition を使うのが一般的かと思います。
全く異なるクエリであれば、それぞれに対応したフォームを用意した方がシンプルでは・・・。

<1>

Private Sub コマンド0_Click()
  DoCmd.OpenForm "フォーム1", acFormDS
  Forms("フォーム1").RecordSource = "クエリ" & Me.フレーム1
End Sub

<2>

Private Sub コマンド1_Click()
  DoCmd.OpenForm "フォーム1", acFormDS, , , , , "クエリ" & Me.フレーム1
End Sub

' ------------------------------------------
' [フォーム1] ロード時にレコードソース設定
' ------------------------------------------
Private Sub Form_Load()
  If Len(Me.OpenArgs & "") > ...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報