Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : 指定なし)
この名前付き引数は既に指定されていますのエラーです
投稿日時: 21/03/09 11:22:37
投稿者: myzkktht

いつもお世話になっております。
ACCESSにて、定義を作成、呼び出して固定長データにエクスポートしようとしていますが、
「コンパイルエラー:この名前付き引数は既に指定されています」と表示されてしまいます。
昨日からいろいろやってもう少しの気がするのですが、、ぜひお分かりの方、ご教示のほど
よろしくお願いいたします。
 
Private Sub コマンド33_Click()
    Dim Path As String
    Path = CreateObject("WScript.Shell").Specialfolders("Desktop") & "\" & "EXPORT.text"
    DoCmd.TransferText acExportFixed, , specificationname:="EXPORTTEXT", FileName:="EXPORT_Q"
    MsgBox "デスクトップにエクスポートしました。"
 
End Sub

回答
投稿日時: 21/03/09 11:55:48
投稿者: radames1000
メールを送信

「,」を一つにしてください。
DoCmd.TransferText acExportFixed, specificationname:="EXPORTTEXT", FileName:="EXPORT_Q"
二つあるとその部分が""であるとみなされます。
今回は二番目が""だったのでSpecificationName:=""の扱いとなり、
続けて「specificationname:="EXPORTTEXT"」としているので
同じ名前付き引数を指定しているためエラーが出ます。

投稿日時: 21/03/09 12:34:25
投稿者: myzkktht

ご回答いただきありがとうございます。
,を外したところ、「実行時エラー'2495'このアクションまたはメソッドを実行するには、[Table Name/テーブル名]引数が必要です。」
とエラーが変わってしまいました。元々、定義を用いてインポートをするときに作ったVBAなので、メッセージ的にはインポート用のテーブルを記載せよとみえるのですが、実際はデスクトップにEXPORT.textというファイルを
EXPORT_QというクエリーからEXPORTTEXTという定義を呼び出して固定長で出力したいものになります。
 
分かりづらい説明で大変申し訳ございません。
大変恐縮ですがぜひご教示のほど、よろしくお願いいたします。

回答
投稿日時: 21/03/09 13:49:11
投稿者: radames1000
メールを送信

ドキュメントを見てどこがおかしいか考えてみてください。
 
https://docs.microsoft.com/ja-jp/office/vba/api/access.docmd.transfertext

投稿日時: 21/03/09 15:23:37
投稿者: myzkktht

radames1000様
ご回答いただきありがとうございます。
浅薄なもので回答を頂きましたサイトを元に確認をしておりましたが、構文の順番と関連を拝見させて
頂きましたが、恥ずかしながら構文エラーから抜け出せません。
勝手を言って恐縮ですがご助言賜れれば幸いです。
よろしくお願いいたします。
 
    Dim Path As String
    Path = CreateObject("WScript.Shell").Specialfolders("Desktop") & "\" & "EXPORT.text"
    DoCmd.TransferText acExportFixed, SpecificationName:="EXPORTTEXT", Query Name:="EXPORT_Q", FileName:="EXPORT.text"

回答
投稿日時: 21/03/09 18:05:55
投稿者: Suzu

DoCmd.TransferText acExportFixed, , specificationname:="EXPORTTEXT", FileName:="EXPORT_Q"
 
前半の赤い部分は、引数名を省略しています。
 
その場合、
DoCmd.TransferText TransferType, SpecificationName 〜〜
となりますので、
   acExportFixed が、[TransferType]、
   その直後に、「,」 を 2つ並べていますから、
   SpecificationName に、空白を渡している事になります。
 
続いて
後半の青の部分で、specificationname:="EXPORTTEXT" とし、
   すでに、空白を渡しているにもかかわらず、SpecificationName に、「EXPORTTEXT」 を渡しているので
 
重複して渡している事になるので、青の分で「この名前付き引数は既に指定されています」 となります。

投稿日時: 21/03/09 20:29:16
投稿者: myzkktht

皆様
懇切丁寧なご指導、誠にありがとうございます。
ようやく引数が必要ですから逃れられたと思ったのですが、acExportFixed,を
削除した状態にしてみたところ、今度は『名前付き引数がみつかりません』のメッセージと共に
QueryNameがハイライト化されてしまいました。QueryName:="EXPORT_Q",に対する処理が何か
足りないと思うのですがどうにも進めておれません。
  
いろいろ教えていただき恐縮ですが何とか頑張りたいと思っております。
図々しいですがぜひご教示のほど、よろしくお願いします。
  
Private Sub コマンド33_Click()
    Dim Path As String
    Path = CreateObject("WScript.Shell").Specialfolders("Desktop") & "\" & "EXPORT.txt"
      
    DoCmd.TransferText , SpecificationName:="EXPORT", QueryName:="EXPORT_Q", FileName:="EXPORT.txt"
    MsgBox "デスクトップにエクスポートしました。"
  
End Sub

回答
投稿日時: 21/03/09 20:55:34
投稿者: hatena
投稿者のウェブサイトに移動

radames1000さんの提示したリンク先の公式ドキュメントをもう一度よくみてください。
 

引用:
expression.TransferText (TransferType, SpecificationName, TableName, FileName, HasFieldNames, HTMLTableName, CodePage)

 
引数名に QueryName なんてないですよ。
 
引用:
TableName    
テキスト データのインポート先の Access テーブル、テキスト データのエクスポート元の Access テーブル、テキスト データのリンク先の Access テーブル、またはテキスト ファイルにエクスポートする結果の Access クエリの名前を、文字列式で指定します。

 
クエリの名前でも引数名は、TableName です。

回答
投稿日時: 21/03/09 21:04:34
投稿者: hatena
投稿者のウェブサイトに移動

関数の引数の設定法は、引数名を指定して設定する方法と、引数名を使わずに何番目かで指定する方法があります。
 
2つの方法を混在させることは可能ですが、読みづらくなるだけですのでメリットはないです。
どちらに一つに統一させましょう。
 
引数名で指定

DoCmd.TransferText SpecificationName:="EXPORT", QueryName:="EXPORT_Q", FileName:="EXPORT.txt"

 
何番目かで指定
DoCmd.TransferText , "EXPORT", "EXPORT_Q", "EXPORT.txt"

 
一番目の引数は省略(規定値になる TransferType:=acImportDelim)

投稿日時: 21/03/10 09:46:36
投稿者: myzkktht

おはようございます。皆様のおかげで解決直前まで行けたと思います。
本当にありがとうございます。
 
実は、こちらのクエリは無い知恵を絞って色々調べて、タイムカードの
データをクエリからユニオンクエリを作成、その結果を出力したいと
思っていたのですが、皆様のおかげで解決と思ったら、
「実行時エラー'3073' 更新可能なクエリであることが必要です」と
最終的に言われてしまいました。
 
調べたところ、ユニオンクエリなのでできないとのことでした。
https://docs.microsoft.com/ja-JP/office/troubleshoot/access/errors-updating-query-form-data
せっかく皆様に教えていただき、ここまで来たのにとても残念です。
 
これ以上はもうどうしようもないのか、何か回避策があるのであればと
藁をもすがるつもりで探しております。
 
もし、お分かりになるかたがいらっしゃれば憚らず恐縮ですが何卒
ご教示のほど、よろしくお願いします。
 

回答
投稿日時: 21/03/10 10:00:18
投稿者: Suzu

引用:
「実行時エラー'3073' 更新可能なクエリであることが必要です」と
最終的に言われてしまいました。
 
調べたところ、ユニオンクエリなのでできないとのことでした。
https://docs.microsoft.com/ja-JP/office/troubleshoot/access/errors-updating-query-form-data

 
エクスポート を行うにあたって、上記の記事は関係ないはずです。
「クエリオブジェクト」として、そのユニオンクエリが存在するのであれば
クエリを選択し、右クリック エクスポート テキストファイル から
 ウィザードが開きますから、その指示に従い、エクスポートできるか確認ください。
 
VBAは、手動で行う事を自動化するのです。
まずは、動作確認を手動で行ってから VBAに移りましょう。
 
(定義があるという事は、手動でエクスポートできたのだと思うのですが。。)
 
 
或いは、追加クエリを使い、ユニオンクエリのレコードを作業テーブルに追加後、エクスポートします。

投稿日時: 21/03/10 10:56:49
投稿者: myzkktht

Suzu様
 
早速のご返答ありがとうございます。
ご指摘いただきました通り、手動での動作は確認しております。
どうしても主導では担当者が限られるので、データのインポート、
エクスポートまでを自動化したいと思っており、エクスポートで
頓挫しておりました。
 
毎日、元データをインポート、エクスポート後に削除をする予定
なので、ユニオンクエリからテーブル作成クエリを作成、その
クエリを皆様に教えていただきましたVBAにてエクスポートを
しようと思います。
 
上記のような流れで対応したいと思っておりますが、考え方と
しては問題ないでしょうか。
 
ようやく少しだけですがわかってきたような気がしております。
改めまして皆様の貴重なご意見に感謝いたします。

回答
投稿日時: 21/03/10 11:03:44
投稿者: hatena
投稿者のウェブサイトに移動

ユニオンクエリでできないのは、更新することです。
 
エクスポートは問題なくできるはずです。
手動でもできるなら、VBAでもできるすはずです。
 
「実行時エラー'3073' 更新可能なクエリであることが必要です」というエラーは別の部分で発生していると思います。
そのエラーが出たときに、デバッグボタンをクリックするとエラー箇所が選択されますので、その部分のコードを提示してもらえますか。

投稿日時: 21/03/10 12:01:40
投稿者: myzkktht

hatena様
 
ご返信いただき本当にありがとうございます。
引数のエラーもなくなり、これでいよいよと思っていたのですが、デバッグボタンを押すと
黄色の→と共に以下がハイライトとなります。
    DoCmd.TransferText SpecificationName:="EXPORT", TableName:="EXPORT_Q", FileName:="EXPORT.txt"
 
一つ気付きました。上記実行中のACCESSの下部のメッセージに「インポートしています。中止するには…」と、
エクスポートをしているはずなのにインポートと出てきています。
まだ何か単純な間違いをしているのでしょうか…
 
全文です。もし何かわかれば図々しいですがぜひご教示のほど、よろしくお願いします。
 
Private Sub コマンド33_Click()
    Dim Path As String
    Path = CreateObject("WScript.Shell").Specialfolders("Desktop") & "\" & "EXPORT.txt"
     
    DoCmd.TransferText SpecificationName:="EXPORT", TableName:="EXPORT_Q", FileName:="EXPORT.txt"
    MsgBox "デスクトップにエクスポートしました。"
 
End Sub

回答
投稿日時: 21/03/10 12:24:28
投稿者: hatena
投稿者のウェブサイトに移動

エクスポートなら、TransferType:=acExportDelim を指定する必要があります。
 
DoCmd.TransferText TransferType:=acExportDelim, SpecificationName:="EXPORT", TableName:="EXPORT_Q", FileName:="EXPORT.txt"

回答
投稿日時: 21/03/10 13:18:14
投稿者: Suzu

引用:
ご指摘いただきました通り、手動での動作は確認しております。
どうしても主導では担当者が限られるので、データのインポート、
エクスポートまでを自動化したいと思っており、エクスポートで
頓挫しておりました。
 
毎日、元データをインポート、エクスポート後に削除をする予定
なので、ユニオンクエリからテーブル作成クエリを作成、その
クエリを皆様に教えていただきましたVBAにてエクスポートを
しようと思います。
 
上記のような流れで対応したいと思っておりますが、考え方と
しては問題ないでしょうか。

 
手動での動作は確認できているとの事ですので、
その操作では、「実行時エラー'3073' 更新可能なクエリであることが必要です」は出てこなかったのですよね。
 
 
引用:
デバッグボタンを押すと
黄色の→と共に以下がハイライトとなります。
    DoCmd.TransferText SpecificationName:="EXPORT", TableName:="EXPORT_Q", FileName:="EXPORT.txt"
これは、デバッグエラーとの事ですが、
 
1. 当方でコピペを行い確認しても、デバックエラーにはならない。
 
2. 先の 実行時エラー3073 が、ここで発生しているという事でしょうか?
    もし、実行時エラーが発生しているのであれば、
    先の「手動での動作は確認」と食い違いが発生している事になります。
    手動内容と、VBAの記述内容に 食い違いが無いか確認ください。
 
3. エクスポートなのであれば、hatena さんが既に指摘されている通り、TransferType 引数が必要です。
   固定長 インポート であれば、acExportFixed となります。
 
4. FileName:="EXPORT.txt" の場合、カレントパスの EXPORT.txt への出力となります。
    先に、デスクトップ上の、EXPORT.txt のパスを取得していますので、FileName:=Path となります。

投稿日時: 21/03/10 14:58:54
投稿者: myzkktht

hatena 様 Suzu 様 ご回答いただきました皆様
 
いろいろご確認いただきありがとうございます。
投稿したつもりがエラーでできておりませんでした。申し訳ありません。
hatena様に教えていただきました内容にて上書きで修正したところ、
エラーが出ず、デスクトップにエクスポートができました。
 
ただ、実は今回のエクスポートは取り込んだデータ(カンマ区切り)
だったものを固定長の定義を作成して、エクスポートをしようとして
おりましたが、手動ではエクスポートが正常にできるのですが、VBAで
行うと、カンマ区切りとなってしまってデスクトップに出てきます。
(定義名:export)
 
なぜ手動だと固定長でVBAだとカンマ区切りなのかがわかりません。
以下、コードなのですが、正常にEXPORTが呼び出せていないという
ことになるのでしょうか。
 
繰り返しとなり大変恐縮ですが、もしお分かりになればぜひご教示
頂きますようよろしくお願いします。
 
Private Sub コマンド33_Click()
    Dim Path As String
    Path = CreateObject("WScript.Shell").Specialfolders("Desktop") & "\" & "EXPORT.txt"
     
    DoCmd.TransferText TransferType:=acExportDelim, SpecificationName:="EXPORT", TableName:="EXPORT_Q", FileName:="EXPORT.txt"
    MsgBox "デスクトップにエクスポートしました。"
 
End Sub

回答
投稿日時: 21/03/10 16:31:19
投稿者: hatena
投稿者のウェブサイトに移動

固定長エクスポートであれば、TransferType は acExportFixed ですね。
 
Suzuさんがすぐ前の回答ですでに指摘されてますね。

投稿日時: 21/03/10 18:01:02
投稿者: myzkktht

Suzu様 hatena様 ご回答いただきました皆様
 
この度は本当にいろいろ教えていただきありがとうございました。
おかげさまで無事にエクスポートまでたどり着くことができました。
これひとえに皆様のおかげです。本当にありがとうございます。
 
この後は、一つのボタンのイベントでデータのインポート、エクスポート、
削除等、やってみようと思います。
 
最後にまた一つ(懲りなくてすいません)お聞かせください。
すべて以下で出力できるのですが、エクスポートファイル名"EXPORT.txt"を
"EXPORTyymmddhhnn"という形で時刻をセットさせたいと思っていたのですが、
相変わらずエラーとなっております。
自分で調べて以下までいったのですが、おそらく"EXPORT" & Format(Now(), "yyyymmdd_hhnn")
がまちがっているのか、いろいろ変えてもダメでした。
 
もしお分かりであれば最後に教えて頂ければ幸いです。
よろしくお願いします。
 
Private Sub コマンド33_Click()
    Dim Path As String
    Path = CreateObject("WScript.Shell").Specialfolders("Desktop") & "\" & "EXPORT_Q" , FileName:="EXPORT" & Format(Now(), "yyyymmdd_hhnn")
     
    DoCmd.TransferText TransferType:=acExportFixed, SpecificationName:="EXPORT", TableName:="EXPORT_Q", FileName:="EXPORT" & Format(Now(), "yyyymmdd_hhnn")
    MsgBox "デスクトップにエクスポートしました。"
 
End Sub

投稿日時: 21/03/11 21:37:58
投稿者: myzkktht

ご回答いただきました皆様
 
この度はいろいろご教示いただきました本当にありがとうございました。
もっともっと勉強して、いつかは私も役に立てることを願って頑張って
行きたいと思います。
 
ありがとうございました。