VBAで制御できない理由は?

このQ&Aのポイント
  • AllowDesignChanges制御できない理由を解説します。
  • AccessのフォームでAllowDesignChangesの制御を試みるとエラーが発生します。
  • AllowDesignChangesはVBAでは操作できないため、エラーが発生するのです。
回答を見る
  • ベストアンサー

AllowDesignChanges制御できない

AllowDesignChangesがVBAで制御できない理由は? アクセスのフォームで、 Private Sub Form_Open(Cancel As Integer) Me.AllowDesignChanges = False 'デザイン変更の許可をしない End Sub を実行すると、 実行時エラー"2448" このオブジェクトに値を代入することができません。 になります。 でもAllowDesignChangesのヘルプを見ると、 「"AllowDesignChanges/デザイン変更の許可" プロパティは、 フォームのプロパティ シートまたは Visual Basic を使って設定できます。」 と書いてあります。 という事は、VBAで操作できるって事ですよね? それなのになぜエラーになるのでしょうか?

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

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

AllowDesignChanges について知らなかったので見てみました。 Private Sub Form_Open(Cancel As Integer) Me.AllowDesignChanges = False 'デザイン変更の許可をしない End Sub ↑これは自分自身を変更しようとしているのでエラーになってるかと。 標準モジュール・他のフォーム・イミディエイトウィンドウからなら 変更が出来ます。 イミディエイトウィンドウからは フォーム 仮に名前を FM とすると これをフォームビューで開いておいてから ?forms!FM.AllowDesignChanges でTrue/False の確認が出来ます。 変更するには デザインビューで開いてから Docmd.Openform "FM" , Acdesign forms!FM.AllowDesignChanges = false のようにすれば可 なお、False にしてもデザインの変更は出来てしまいます? (・・? 何が変更になったのか・・というと フォームビューの時にプロパティシートが出て来なくなって その意味で変更不可になるようです。(他にも有るかもしれません) また、Access2010 では 非表示になって使用が出来なくなりました。 新たに加わったレイアウトビューでやってくれ・・ということの様です。 以下ヘルプより抜粋 Microsoft Office XP (2002) と比較した Microsoft Access 2010 オブジェクト モデルの変更点の要約を次に示します。 メモ 以下の表では、オブジェクト モデルのメンバーの状態が次のように表記されています。 非表示 メンバーは非推奨となっており、コードでの使用はお勧めできません。 削除 メンバーはオブジェクト モデルから削除されました。 変更 メンバーの構文が変更されています。 Form プロパティ 状態 AllowDesignChanges 非表示

AEBYPYG
質問者

お礼

イミディエイトウインドウでも出来るのですか。 バージョンによって変わってくるようですね。

その他の回答 (1)

  • m3_maki
  • ベストアンサー率64% (295/459)
回答No.1

> という事は、VBAで操作できるって事ですよね? > それなのになぜエラーになるのでしょうか? フォームをデザインビューで開けば可能、ということです。  DoCmd.OpenForm "フォーム1", acDesign  With Forms("フォーム1")   .AllowDesignChanges = False   ' その他の設定   ' ・・・  End With もちろん、現在フォームビューで開かれているフォームのコードで フォームをデザインビューで開き直して 自分を変更することはは不可能です。

AEBYPYG
質問者

お礼

出来ました。 >現在フォームビューで開かれているフォームのコードで Form_Openではできませんでした。

関連するQ&A

  • フォームを開いた時にVBAでデザイン変更の許可の設

    フォームを開いた時にVBAでデザイン変更の許可の設定が出来ない(access2003) デザインビューで手作業で操作するのではなく VBAで値を設定したいのですが Private Sub Form_Open(Cancel As Integer) Me.AllowDesignChanges = False End Sub をすると ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・  実行時エラー '2448':  このオブジェクトに値を代入することはできません。 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ と言うエラーが出てしまいます。 標準モジュールで Sub test() Form_フォーム1.AllowDesignChanges = False End Sub としても同じエラーが出ます。 フォームのデザイン変更の許可は デザインビューで手作業で操作するしかないのでしょうか?

  • 更新の許可(AllowEdits)について

    Access2013を使用しています。 フォームのプロパティ →更新の許可 いいえ VBAに以下のコードを記述しました。 Private Sub 更新許可_Click() Me.AllowEdits = True End Sub Private Sub 更新不可_Click() Me.AllowEdits = False End Sub 更新許可ボタンをクリックしたとき、問題なく更新出来るようになるのですが 更新不可ボタンをクリックしても、更新出来てしまいます。 何処に原因があるのでしょうか。 なお、True→ -1 、False→0に書き換えてみましたが変化が有りませんでした。 出来ましたら、具体策をお願い致します。

  • サブフォームのビューを切り替えたい

    親フォーム(フォーム1)にサブフォームとして、 テーブルをソースとするサブフォーム(テーブル1のサブフォーム)を配置しました。 親フォームからサブフォームのビューを変更したいのですが どうすればいいか教えてください。 親フォームのコマンドボタンにはそれぞれ Private Sub 単票フォームへ切り替え_Click() Me.Controls("テーブル1のサブフォーム").Form.DefaultView = 1 '帳票フォーム End Sub Private Sub 帳票フォームへ切り替え_Click() Me.Controls("テーブル1のサブフォーム").Form.DefaultView = 0 '単票フォーム End Sub としたのですが、 実行すると 実行時エラー 2136 "このプロパティを設定するには、フォームまたはレポートをデザインビューで開きます"。 となってしまいます。 Private Sub 帳票フォームへ切り替え_Click() DoCmd.SelectObject acForm, "テーブル1のサブフォーム" DoCmd.RunCommand acCmdFormView End Sub にしたところ、 実行時エラー 2489 “オブジェクト テーブル1が開いていません、” になります。 サブフォームに埋め込んでいて親フォームを開いていても 開いてない事になるのですね。 フォームビューの時に、切り替える事は不可能なのでしょうか? 帳票ビュー表示用フォーム、 単票ビュー表示用フォーム を作るしかないのでしょうか?

  • 最小化最大化のボタンの表示をVBAで設定できない

    アクセス2003を使用しています。 VBAでフォームの最小化最大化のボタンの制御をしたいのですがエラーになってしまいます。 詳しい内容は Private Sub Form_Load() Me.MinMaxButtons = 0 End Sub とすると、  実行時エラー '2448':  このオブジェクトに値を代入することはできません。 となってしまいます。 そのままヘルプを開くと ********************************************************** フォームまたはデータ アクセス ページを読み取り専用にする フォームを読み取り専用にするには、フォームのプロパティを設定します。データ アクセス ページを読み取り専用にするには、グループ レベル プロパティを設定し、データ アクセス ページに含まれるグループごとに読み取り専用にします。 ********************************************************** となっています。 MinMaxButtonsのヘルプには ********************************************************** フォームの最大化ボタンと最小化ボタンを表示するかどうかを示します。 値の取得および設定が可能です。 ********************************************************** と書かれてるのでVBAで設定可能だと思いますがなぜかできません。 よろしくお願い致します。

  • 文法 何がおかしい? VBAです

    エクセルを開いたときに、 ユーザーフォームのモーダルモードにしたくないのですが それをvbaで設定したいのですが Private Sub UserForm_Initialize() Me.Showmodal = False End Sub ではダメなのでしょうか? エラーになってしまいます。

  • Access VBAによるフォームの色変更。

    個人での捜索に行き詰ってしまいましたので、ご相談させていただきます。 ○使用環境 WindowsXP Access2007 VBAで色変更する、Accessのフォームについて質問させていただきます。 下記の記述で「フォーム名」というフォームをボタンで開こうとしています。 Private Sub コマンド2_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)   DoCmd.OpenForm Form_フォーム名.Name   Form_フォーム名.Section(0).BackColor = "12349952" End Sub Private Sub コマンド3_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)   DoCmd.OpenForm Form_フォーム名.Name   Form_フォーム名.Section(0).BackColor = "1643706" End Sub その際、ボタンによって背景色を変更して表示しようとしています。 デザインビューで「フォーム名」のプロパティを変更した直後はボタンの操作で背景色が変わりますが、 一度、「フォーム名」をクローズして、再度ボタンの操作でオープン するときには反映されなくなっています。 もしかしたら、自身の方で何か見落としがあるかもしれませんが、同様の事象をご存知の方がおられましたら、ご指南いただきたいです。 宜しくお願い致します。

  • アクセスIfブロックに対応するEnd Ifエラ-

    こんにちは。 アクセスで各レコードの印刷部数がそれぞれ異なるため、各レコードに入力した(フォームから)部数指定で 看板を印刷するようVBAを入力したところ。。。フォーマット時の方でIfブロックに対する End Ifがありませんとコンパイルエラーが出てEnD Ifが反転しています。 VBA初心者で、このVBA事態もネットで調べてコピペしたもので。。。エラー事態を自力で直せません。。。宜しくお願いいたします。 レポートの詳細にテキストボックスを置き名前-[cut]/可視-[いいえ[/コントロールソース-[=1]/ 集計実行-[グループ全体] 詳細のプロパティ Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer) Dim 指定枚数 As Integer 指定枚数 = Forms![フォーム名]![部数指定フィールド名] If IsNull([cut]) Then [cut] = 1 If [cut] <> 指定枚数 Then Me.NextRecord = False Me.MoveLayout = True Me.PrintSection = True End If End Sub Private Sub 詳細_Print(Cancel As Integer, PrintCount As Integer) Dim 指定枚数 As Integer 指定枚数 = Forms![フォーム名]![部数指定フィールド名] If [cut] <> 指定枚数 Then [cut] = [cut] + 1 Else: [cut] = 1 End If End Sub 宜しくお願いいたします。

  • フォームのデータシートビューにてVBAで直接記述したSQL文を実行した結果を返すことは不可能でしょうか?

    リストボックス、コンボボックスなら Private Sub Form_Open(Cancel As Integer) With Form_フォーム1.リスト2 .RowSourceType = "Table/Query" .RowSource = "SELECT テーブル.フィールド, FROM テーブル" End With End Sub で結果を返すことは可能なのですが フォームをデータシートとして Private Sub Form_Load() Me.RowSourceType = "Table/Query" Me.RowSource = "SELECT テーブル.フィールド, FROM テーブル" End Sub とするのは不可能ですか? これを実行すると 「コンパイルエラー メソッドまたはメンバーが見つかりません」 となり、 「RowSourceType =」が選択されます。 そしてVBAの停止の意の四角ボタンを押すとユーザーフォームが図のようになります。 私のやりたいことは、クエリではなくVBAでSQL文を書き、データシートビューで表示させたいのですがやはり不可能でしょうか? (変数を代入できるため) 何でもいいのでご教授よろしくお願いします。

  • VBA ユーザーフォームの Keypreview について

    いつもお世話になっています。 VBAのユーザーフォーム上で、KeyDown イベントを使いたいのですが、下のコードが動きませんでした。 Private Sub UserForm_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If e.KeyCode = Keys.z Then MsgBox "効いてるよ!" End If End Sub エラー表示も出ません。 ウェブで調べたところ、VBでは「KeyPreview」プロパティーを「true」にすれば解決するという記事をあちこちで見かけましたが、VBA(Excel2003)のユーザーフォームプロパティには、そのような項目が見当たりません。コード上で無理やり設定してみるとエラーになります。 どのようにすれば解決するでしょうか? お知恵をお貸し下さい。

  • Vba UserForm SetFocus

    ExcelのVbaでUserForm上に英単語のタイピング練習のソフトを作ろうとしていますが、うまくいきません。コントロールのイベントについての理解が不足しているのが分かりました。 ユーザフォーム上の複数のテキストボックス間のフォーカスの移動について教えて下さい。 UserForm1にテキストボックスを3つ、コマンドボタンを1つ配置しました。それぞれTextBox1、TextBox2、TextBox3、CommandButton1とします。 Private Sub CommandButton1_Click() TextBox3.SetFocus ・・・(1) End Sub Private Sub TextBox3_Enter() MsgBox "In TextBox3" TextBox2.SetFocus ・・・(2) End Sub 各TextBoxのTabStopプロパティは「True」、「TabIndex」は番号順になっています。 コマンドボタンのTabStopプロパティは「False」にしています。 フォームを表示し、コマンドボタンをクリックするとエラーが発生します。 (2)の実行の後(?)、(1)がエラー表示されます。 各イベントの発生のタイミング、連鎖、終了等の理解が不足していて、その理由がよく分かりません。どなたか教えていただけないでしょうか。よろしくお願いします。

専門家に質問してみよう