VBAでサブフォームの並び替えを操作しようとした時のエラー回避方法について

このQ&Aのポイント
  • VBAを使用してAccess2000でサブフォームの並び替えを操作しようとした時に、「直前の操作はキャンセルされました.」というエラーが表示される問題が発生しています。
  • メインフォームのオプショングループの更新後処理イベントで並び替えを行っていますが、エラーが発生してしまいます。
  • このエラーは、サブフォームのプロパティを変更することが原因と思われますが、具体的な回避策がわかりません。どなたか回避策を教えていただけないでしょうか。
回答を見る
  • ベストアンサー

vba 直前の操作はキャンセルされました

<環境>ACCESS2000 サブフォーム(データシートビュー)の並び替えを、メインフォームのオプショングループの 更新後処理イベントで操作しようと思っています。 コーディングは以下の通りです。 並び替え自体はうまく動作するのですが、メインフォームで閉じるボタンを押すと 「直前の操作はキャンセルされました.」とエラーが出てしまいます。 サブフォームのプロパティを替えることが原因なのでしょうか? どなたか回避策をお願いします。 <メインフォーム開く時> Public Function 開くイベント() DoCmd.OpenForm "Fメイン" Set FM = Forms![Fメイン] Set FS = Forms![Fメイン]![SubForm].Form 'テーブル作成 strSQL = "CREATE TABLE AAA (" strSQL = strSQL & " [選択] [bit] NULL ," strSQL = strSQL & " [番号] [varchar] (7) NOT NULL ," strSQL = strSQL & " [カナ] [varchar] (20) NULL ," strSQL = strSQL & " PRIMARY KEY(番号))" db.Execute strSQL 'データ作成 strSQL = "INSERT INTO AAA" strSQL = strSQL & " SELECT" strSQL = strSQL & " [選択] = 1 ," strSQL = strSQL & " [番号] = [番号] ," strSQL = strSQL & " [カナ] = [カナ] " strSQL = strSQL & " FROM BBB" db.Execute strSQL FS.RecordSource = "SELECT * FROM AAA ORDER BY 番号" FM.Refresh End Function <オプショングループ更新後処理> Private Sub GRP_並び順_AfterUpdate() Select Case Me!GRP_並び順 Case 1 With Me![SubForm].Form .OrderBy = "番号" .OrderByOn = True End With Case 2 With Me![SubForm].Form .OrderBy = "カナ" .OrderByOn = True End With End Select End Sub

noname#208236
noname#208236

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

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

訂正2 単にクエリをレコードソースにすれば済む問題のようにも思えます。

その他の回答 (2)

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

訂正  If tdf.Name = AAA Then  If tdf.Name = "AAA" Then です。

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

最初に直接的な回答から、 メニュー→ツール→オプションの『名前の自動修正』のチェックを外す。 最適化を試す、もしくは新規MDBを作成してすべてインポート。 念のために『名前の自動修正』オプションは無し。 で解決するかもしれません。 ところで、提示されたコードがエラーもなく進むのは不思議です。 'テーブル作成 strSQL = "CREATE TABLE AAA (" strSQL = strSQL & " [選択] [bit] NULL ," strSQL = strSQL & " [番号] [varchar] (7) NOT NULL ," strSQL = strSQL & " [カナ] [varchar] (20) NULL ," strSQL = strSQL & " PRIMARY KEY(番号))" db.Execute strSQL は 'テーブル作成 Dim strSQL as string strSQL = "CREATE TABLE AAA (" strSQL = strSQL & " 番号 varchar(7) CONSTRAINT BANGO PRIMARY KEY," strSQL = strSQL & " 選択 bit NULL," strSQL = strSQL & " カナ varchar(20) NULL)" Currentdb.Execute strSQL のような感じでは? 'データ作成 の方も、やりたいことは分かりますが? テーブル作成処理も無くして、単純にテーブル作成クエリで済ませてはどうですか?   Dim strSQL as string   Dim tdf As DAO.TableDef   '既存テーブル削除   For Each tdf In CurrentDb.TableDefs     If tdf.Name = AAA Then       CurrentDb.Execute ("drop table " & tdf.Name)     End If   Next   strSQL = "SELECT 1 AS 選択, 番号, カナ INTO AAA FROM BBB"   Currentdb.Execute strSQL のような感じで。

関連するQ&A

  • サブフォームの並べ替えをVBAで指定したい

    親フォームを開くときにサブフォームの並べ替えを実行したいのですが 親フォームのフォームモジュールに Private Sub Form_Load() With Me.Controls("サブフォーム ") .OrderBy = "日時 DESC" .OrderByOn = True End With End Sub としてるのですが、 OrderByの部分で、 実行時エラー438になります。 サブフォーム名は「サブフォーム」です。 サブフォームの中に日時と言うコントロールは存在します。 なぜエラーになるのでしょうか? ちなみにOrderByをなくしても .OrderByOn = True で同じエラーが発生します。

  • 「Me.Form」と「Me」の違いは?

    アクセスのフォームで並べ替えをする時、 --------------------------------------------------------- Private Sub cmd_昇順_Click() With Me.Form .OrderBy = "フィールド1 ASC" .OrderByOn = True End With End Sub でも Private Sub cmd_昇順_Click() With Me .OrderBy = "フィールド1 ASC" .OrderByOn = True End With End Sub --------------------------------------------------------- でも出来ますが、 「Form」は必要なのでしょうか? あってもなくてもどっちでもいいなら、理由が知りたいです。

  • ACCESSとVBAとレコード

    こんにちわ。 このサイトは何回も利用させて頂いてるのですが、今回も宜しくお願い致します。 環境はOS:Xp・Access2000です。 フォームを開くときにレコードを並べ替えたいのですが、単に「顧客コード」を昇順で並べ替えるには Private Sub Form_Load() Me.OrderBy = "顧客コード" Me.OrderByOn = True End Sub というのは解ったのですが、 何の関連付けもしてない、指定のテーブルの内容を並べ替えるにはどのように記述したらよいのでしょうか? 「Me」の箇所をそのテーブル名 (例えば、顧客テーブル.OrderBy = "顧客コード") のようにすれば良いのでしょうか? 宜しくお願いします。

  • Access フォームから並び替えレポート

    お知恵をお貸しください。 Access2010 フォームでオプショングループを2種類用意しました。 規則グループ 昇順 降順 並び替えグループ ID ふりがな レポートに Private Sub Report_Open(Cancel As Integer) Select Case Forms!フォーム4!fra並べ替え Case 1 Me.OrderBy = "ID ASC" Me.OrderByOn = True Case 2 Me.OrderBy = "ふりがな ASC" Me.OrderByOn = True End Select End Sub 並び替えでは、昇順のみうまくレポートを行えますが。 規則で ID ふりがな を昇順 降順 に行えません。 なにを加えればよいのでしょうか。 よろしくお願いします。

  • access2000の構文エラー

    みなさんこんにちは。access2000で会社の住所録を作っているんですが、vbaでプログラムを作っているときにどうしても分からない構文エラーがでるので教えてください・・・ 以下の & "ORDER BY 姓カナ,名カナ;" がどうしてもひっかかります。 ちなみに全体は下です。 よろしくお願い致します。 '概要:サブフォームに個人リストを表示する Private Sub SetSubIndividual() Dim strSql As String Dim frm As Form_個人情報入力 Set frm = Form_個人情報入力 If IsNull(frm.TXT姓カナ) Then Exit Sub strSql = "SELECT 個人ID AS 番号, [姓] & ' ' & [名] & '(' & [姓カナ] & ' ' & [名カナ] & ')' AS 名前 " _ & "FROM 個人情報 " _ & "WHERE 姓カナ Like '" & frm.TXT姓カナ & "*' " & "ORDER BY 姓カナ,名カナ;" frm.FRM名簿SUB.Form.RecordSource = strSql frm.FRM名簿SUB.Requery frm.GRP選択 = fncGetHeader(frm.TXT姓カナ) End Sub

  • VBA 変数について

    VBA初心者でございます。 VBAでgrpという変数を設定し、それをキーにしてオートフィルタをしたいです。 以下のコードではエラーがでてしまうのは、なぜでしょうか? どうぞ宜しくお願いいたします。 Sub 絞り込み2() Dim grp Set grp = Worksheets("リスト").Cells(3, 2) Worksheets("マスタ0701").AutoFilterMode = False With Worksheets("マスタ0701").Range(Cells(3, "B"), Cells(Rows.Count, "CK").End(xlUp)) .AutoFilter Field:=13, Criteria1:=grp '.CurrentRegion.Select Range(Cells(3, "B"), Cells(Rows.Count, "CK").End(xlUp)).SpecialCells(xlVisible).Copy Worksheets("検索結果").Range("A1") '.AutoFilter End With End Sub

  • サブフォームに対してGoToRecordするには?

    フォームに対してRequeryすると先頭のレコードへ移動してしまうので Requeryする前のレコードの番号を取得して Requery後にそのレコード番号へ移動したいのですが Sub test() i = Forms("Form").Controls("SubForm").Form.CurrentRecord Forms("Form").Controls("SubForm").Requery DoCmd.GoToRecord acActiveDataObject, Forms("Form").Controls("SubForm"), acGoTo, i End Sub これをすると、実行時エラー2498 指定した式は、いずれかの引数とデータ型が対応していません。 になりますが、 どこがおかしいのでしょうか?

  • ACCESS VBAサブフォーム(DATA SHEET)の値の取得方法

    いつもお世話になっております。 ACCESS VBAでメインフォームに貼りついているサブフォームの値をとりたいのですが、うまくいっていません。 現状は module1でaをPublicで宣言 サブフォーム中のFORM_CURRENT()中で me.field1.setfocus a = me.field1.value として取得しています。 (実装ではメインのほうのボタンAを押したときに サブフォーム、FORM_CURRENT()で取得しておいた値を 別の変数に入れようとしています。) サブフォームのみで実行するとうまくいくようですが、 メインフォームに貼り付けるとうまくいかないようです。 (メインフォームに貼り付けて、サブフォームのFORM_CURRENTにブレイクを 貼って止めようとするが止まらない) そこでメインフォームボタンAクリックイベントで dim a1 as integer Forms![mainform]![subform].form.[field1].setfocus a1 = Forms![mainform]![subform].form.[field1].value として値をとろうと思ったのですが メインフォームからサブフォームにフォーカスをうつせない? らしく、サポートされていませんの旨のメッセージがでてしまいます。 やりたいこととしては、メインフォームに貼りついたサブフォームの 選択レコードのフィールド値を、メインフォームのボタンを押したときに 取得する。ということなのですが、うまくいっていません。 別の方法でもいいので、実現方法をご存知の方、よろしくお願いします。 ちなみにACCESSは2000を使用、ADOはサポートされていますがDAOは 非サポートのようです。

  • Access メインからサブのfunctionを呼ぶには?

    メインフォームからサブフォームに書いてあるFunctionを呼び出すにはどうしたらよろしいでしょうか? Call [Form_subform].testfunction では、だめなんですか?

  • RowSource プロパティ

    アクセスvbaでコンボボックスの値を設定する時に Sub マクロ1() With Form_フォーム .コンボ.RowSourceType = "値リスト" .コンボ.RowSource = """aaa"",""bbb""" End With End Sub Sub マクロ2() With Form_フォーム .コンボ.RowSourceType = "値リスト" .コンボ.RowSource = "aaa,bbb" End With End Sub ではどちらがいいのでしょうか? どちらも問題なく実行できます。 文字列だからダブルコーテーションで囲って入れてあげた方が良いのでしょうか?

専門家に質問してみよう