Access マクロビルダーで使うIF文について

このQ&Aのポイント
  • Access2010のマクロビルダーを使ってリストから選択した項目に応じてクエリをExcel出力する方法について解説します。
  • 具体的な手順として、まずフォーム内のリストから項目を選択し、その後マクロ実行ボタンをクリックします。
  • リストで選択した項目に応じて、「クエリ1」または「クエリ2」がExcel形式で出力されます。しかし、実行時に「エラー13 型が一致しません」というエラーが発生してしまっています。
回答を見る
  • ベストアンサー

Access マクロビルダーで使うIF文について

よろしくお願いします。 Access2010のマクロビルダーを使って以下を作成しています。 ----------------------------------- ●やりたいこと 1.フォーム内にあるリスト(項目は"1"か"2")から選択する。 2.リストを選択した後、マクロ実行ボタンをクリックする。 3.リストで!”1”を選べばクエリ1がExcel出力される。   リストで!”2”を選べばクエリ2がExcel出力される。 ●フォーム フォーム名:フォーム1 リスト名:リスト1 (項目:"1","2") ●マクロビルダー If [Forms]![フォーム1]![リスト1]=1 Then アクション:「書式設定を保持したままエクスポート」 オブジェクト名:クエリ1 出力ファイル形式:*.xlsx 自動起動:いいえ 出力品質:画面 Else If [Forms]![フォーム1]![リスト1]=2 Then アクション:「書式設定を保持したままエクスポート」 オブジェクト名:クエリ2 出力ファイル形式:*.xlsx 自動起動:いいえ 出力品質:画面 If文の最後:メッセージ「リストから選択してください」 ----------------------------------- 以上を実行すると「エラー13 型が一致しません」とエラーが出てしまいます。 If文でつまずいている状況で、 検索してもなかなか有効な解決方法が見つかりません・・・。 どこを間違えているのでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

回答者1です。  フォーム内にリストを設置して  リストの  プロパティシートで、  値集合ソースは、1;2  値集合タイプは、値リスト  で、リストを選択してマクロが問題なく動きました。  リストの  値項目 "1","2"  の意味がよくわかりません。  項目を増やさずに、  値集合ソースのみ設定すれば良いのではないでしょうか。

semi076
質問者

お礼

> 値項目 "1","2" リストの項目追加画面で、1、2と入力したら、このような表示になっていました。 数値とテキストを混ぜて入力していたようで、 回答者様のを、そのままコピペしたところ問題なく動きました。 拙すぎるミスで、お恥ずかしいかぎりです。 この度は大変お手数をおかけしまして、すいませんでした。

その他の回答 (2)

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.2

リストボックスコントロールのプロパティの「その他」タブ中の 複数選択→しない にしたらどうなりますか? 最終的に10個くらいになるのなら、 Select Case やFor Next が使えるVBAの方が良さそうにも思えます。

回答No.1

データ型のエラーという質問の回答ではありませんが、 フォームでマクロを使って、複数のリストをエクセル形式でエクスポート表示したいということですよね。 フォーム内にコマンドボタンを複数作られてはどうでしょうか。 コマンドボタン1に 書式設定を保持したままエクスポート オブジェクトの種類 クエリ オブジェクト名 クエリ1 出力ファイル形式 エクセルブック(*.xlsx) 自動起動 いいえ 出力品質 画面 コマンドボタン2に 書式設定を保持したままエクスポート オブジェクトの種類 クエリ オブジェクト名 クエリ2 出力ファイル形式 エクセルブック(*.xlsx) 自動起動 いいえ 出力品質 画面 として、2つのボタンを作れば、IF文を使う必要はないのではないでしょうか

semi076
質問者

補足

早速のご回答ありがとうございます! 実行させたいクエリごとに、 ボタンを複数用意するんですね。 今回は2つのクエリしか出していませんが、 今後は「10種類のクエリを選択して出力」を考えているため、 フォーム内にあまり実行ボタンが増えるのは避けたいな、と思っています・・・。 せっかく案をいただいたのに、すいません。 このまま行き詰まるようだったら、回答者様の案を使わせていただきたいと思います。

関連するQ&A

  • Accessマクロでのエクスポート

    Accessマクロで「書式設定を保持したままエクスポート」を使用し、テーブルをExcelにエクスポートしています。 終了時に、正常終了メッセージを出力していますが、エクスポート時のファイル選択ダイアログで「キャンセル」を押下した際も、この終了メッセージが出力されてしまいます。 マクロのアクションカタログにて、「ファイル選択ダイアログでキャンセルが押されたか?」を判定することはできますでしょうか?

  • AccessVBA エクセル出力時にエラー

    Private Sub コマンド1_Ckick() If リスト = "1"Then DoCmd. TransferSpreadsheet acExport_ , , "クエリ1","MicrosoftExcel(*.xlxs)" ElseIf リスト = "2"Then DoCmd. TransferSpreadsheet acExport_ , , "クエリ2","MicrosoftExcel(*.xlxs)" End If End Sub ------------ リスト(1 Or 2)を選択後、コマンド1をクリックすると、 リストの選択に合わせてクエリをエクセル出力したいです。 行数が10万行と多い為、 行数制限があるマクロビルダーの「書式を保持してエクスポート」を使わず XLXS形式で出力したいです。 しかし、上のVBAを実行したところ、 「データベースまたはオブジェクトは読み取り専用なので更新できません」 というエラーが出てしまいます。 どこを訂正すればよいのかわからず困っています。 どうかご教授の程、よろしくお願いいたします。

  • access 2000のマクロビルダで困っています

    access2000のマクロビルダでアドバイスお願いします。 とあるフォームで 「a」というテキストボックスがあります。 条件検索用のボックス「A」を設けて、「検索」というコマンドボタンを作成しました。 このボタンを マウスボタンクリックした時に、マクロビルダで、条件を設定し 抽出するというものです。 これは希望通りに抽出できたのですが、 次に、同じフォームで「b」というテキストボックスを設けて、条件検索用ボックスで「B」を作成しましたが、 これを、「検索」という一つのコマンドボタンで「a」と「b」2つの検索条件を満たす、リストをマクロビルダで作成したいのですが、 やり方がどう頑張っても分かりません。 できれば、マクロビルダで、もし無理なら、VBAでアドバイスを頂ければ大変ありがたいです。 どうかよろしくお願いします。

  • ACCESS マクロでWhere条件式について質問

    マクロについてですが、「アクションを開く」アクションで引数のWhere条件式について質問です。 やりたいことは、フォームA・フォームBがあり、共通のフィールド"顧客ID"があります。この二つのフォームを連動させて並行に表示させたいと思います。 マクロに登録する内容は、 アクション「フォームを開く」 引数(フォーム名)フォームA   (Where条件式)[Forms]![フォームA]![顧客ID]=[Forms]![フォームB]![顧客ID] アクション「オブジェクトの選択」 引数(オブジェクトの種類)フォーム  (オブジェクト名)フォームB 上のように(Where条件式)で[Forms]![フォームA]![顧客ID]]=[Forms]![フォームB]![顧客ID] とすると、レコードは何も表示されませんでした。 しかし、[顧客ID]=[Forms]![フォームB]![顧客ID]とすると正しく表示します。なぜ、[Forms]![フォームA]![顧客ID]]=[Forms]![フォームB]![顧客ID]とすると、ダメなのでしょうか??

  • AccessのマクロでExcelにエクスポートしたい

    レコード数が5万程度あるクエリを マクロでExcelにエクスポートしたいのですが、 「出力」を選ぶと、「出力する行が多すぎて、指定した出力形式またはMicrosoft Accessの制限を越えています。」のエラーメッセージが表示されてしまいます。 マクロではなく、普通にエクスポートする際は、 Excelのバージョンを選択できるので、正常処理できるのですが、マクロの場合はどうすればいいのでしょうか? 宜しくお願いします。

  • アクセス2000のマクロでエクスポートってありますか?

    アクセスのマクロにはオブジェクトの保存や、フォームを開くなどがありますが、 エクスポートやインポートはありますか? VBAは使えないのですが、よろしくおねがいします。

  • ACCESS VBA フォーム複数条件

    ACCESSフォーム内のテキストボックスが空欄かどうかで条件分岐させる方法を教えてください。 フォーム内に複数テキストボックスがあります。 テキスト1 テキスト2 テキスト3 このテキストボックスの入力があるかどうかで、 エクスポートするクエリを変更したいです。 それぞれのテキストボックスの入力値は、 対応するクエリの抽出条件になっています。 少なくとも、テキスト1には入力があるという条件で、 ・テキスト2が空白なら、クエリ2を出力する ・テキスト3が空白なら、クエリ3を出力する という処理を行いたいのです。 マクロビルダーで、IFを使った処理は作ることができたのですが、 VBAを使って、同じ処理ができるようにしたいです。 どうかご教授のほど、よろしくお願いします。

  • マクロでエクスポート(アクセス97)

    W2000・アクセス97・エクセル2000です。 アクセスのクエリーを、マクロを使用して、新規にエクセルにエクスポートしたいです。 マクロでは、 ・変換の種類 エクスポート ・ワークシートの種類 Excel97(2000は選択の中になし) ・テーブル名 エクスポートしたいクエリーを指定 ここまでは、わかりましたが、ここまででマクロを実行すると、 ”このアクションまたはメゾットを実行するには、[file name/ファイル名]が必要です” と、表示され、エラーになります。 できましたら、この後、どのようにすればよいのか? もしくは、こういう方法で、というのがありましたら、お教えくださいませ。詳しく解説してくれている、URLのご紹介でも、かまいません。 お手数ですが、どなたか、よろしくお願い申し上げます。

  • 【Access2013】エラー回避 他

    https://okwave.jp/qa/q9714515.htmlの続きです。 「書式設定を保持したままエクスポート」というマクロを多用しています。 ここでは細かい設定ができるのでいろいろなAccessで使用していたのですが、出力先フォルダやファイル名が限定されてしまうのがネックになっていました。 そこでhttps://okwave.jp/qa/q9714515.htmlにてVBAでの出力方法をご教示いただいたのですが、3つほど困ったことがあります。 1.「書式設定を保持したままエクスポート」したい ググると「DoCmd.OutputTo メソッドを使え」とのことですが、添付画像のVBAにどのように組み込めばいいのか分かりません。 2.「名前を付けて保存」画面が出ない 当該Accessを開いた後「Excel出力」ボタンをクリックすると「名前を付けて保存」画面が出ず、タスクマネージャからExcelをダブルクリックしないと表示されないのです。 Accessをデザイン編集したあとクリックすると出てきます。 3.xlsxファイルを開くとエラーが出る 出力したxlsxファイルを開くと、添付画像の「~の一部の内容に~」「~の修復」という2つエラーが出ます。 2つ目のエラーに関しては、「書式設定を保持したままエクスポート」では「修復されたレコード」のみ、VBAでは「削除されたレコード」と「修復されたレコード」が表示されます。 それぞれの方法で保存したデータを見る限り、書式の違いはあるもののデータの抜け等はありませんでした。 これら3つをすべて解決する方法はありませんか?

  • Access2003でコンボボックスからデータを抽出したい

    自己啓発でAccess2003を勉強しています。 Access2003でコンボボックスで名前を選択して、データ(住所)を抽出したものをリストボックスに表示させたいのですがどこがまちがっているかわかりません。こんなことで3週間ぐらい悩んでいます。 回答またはアドバイスをお願いします。 もしくはもっと簡単なやりかたがあればお願いします。 (1)「氏名」、「住所」のテーブルを作成。テーブル名は「01データ」 (2)「氏名」、「住所」のクエリを作成。クエリ名は「クエリ1」 (3)フォームでコンボボックスとリストを作成。フォーム名は「印刷」 ⇒コンボボックスの名前は「検索」。 ⇒値集合ソースはSELECT [01データ].ID, [01データ].氏名 FROM 01データ; これで「氏名」が選択できた。 (4)クエリの「氏名」抽出条件にLike [forms]![印刷]![検索] (5)検索するマクロを作成。マクロ名「M検索」 アクションは 全レコードの表示 フィルタの実行 ⇒Where条件は[Forms]![印刷]![検索]=[クエリ1]![氏名] (6)マクロ「M検索」をコンボボックスのプロパティ「イベント」タブから変更時に設定する。 (7)フォーム「印刷」を開き、コンボボックスで氏名を選択すると『クエリ1!氏名』と表示されてしまいます。 (8)フォーム「印刷」のリストボックスは全レコードが表示されている。

専門家に質問してみよう