アプリ版:「スタンプのみでお礼する」機能のリリースについて

諸事情があり、フォーム上のコマンドボタン40個くらいの名前を変更したいのですが
まず、一つだけ変更できるか実験してみたのですがうまくできません。

Sub オブジェクト名変更()
DoCmd.OpenForm Form_フォーム1.Name, acDesign
Form_フォーム1.コマンド0.Name = "あああ"
DoCmd.Save acForm, Form_フォーム1
End Sub

を実行すると
メモリが不足しています。(Error 7)
と出たり、
実行時エラー 29054
指定のコントロールを追加、名前を変更、または削除することはできません。
と出たりします。

これって無理って事でしょうか?
バージョンは2007です。

A 回答 (1件)

> これって無理って事でしょうか?



当該フォーム以外から実行するのであれば、コントロール名の変更は可能です。

ただ、そのコントロールの各イベントにコードを割り当てていたり、コード上でそれらを
参照していた場合、名前が一致しなくなるため、注意が必要です。
(「Private Sub コマンド0_Click」が呼び出せなくなったり、「コマンド0.SetFocus」が
 コンパイルエラーになったり、といった事態になります)

以下のコードを適用する際は、以上の注意事項を踏まえた上で行ってください。
(なお、以下のコードでは、フォームを閉じる際に、確認メッセージなしで変更を保存
 させるよう、DoCmd.Closeの第3引数に「acSaveYes」を指定していますので、
 併せてご注意下さい)

Public Sub オブジェクト名変更()

  DoCmd.OpenForm "フォーム1", acDesign
  Forms("フォーム1")!コマンド0.Name = "あああ"
  DoCmd.Close acForm, "フォーム1", acSaveYes

End Sub


上記のように、「Form_フォーム1.Name」ではなく、「"フォーム1"」と定数式を
使用すれば、変更が可能になります。

これは、「Form_フォーム1」を参照すると、「フォーム1」が非表示でメモリに
読み込まれる(≒フォームビューで開かれたのに近い状態になる)ためです。

このため、せっかくデザインビューで開く指定をした意味がなくなってしまって
います。
(DoCmd.OpenFormで開くのとは異なり、「Form_フォーム1」の形で参照すると、
 同じフォームを同時に複数表示が可能になるため、このようなことが起こります)

詳細については、以前のQ&Aを参照してみてください:
http://oshiete.goo.ne.jp/qa/7888223.html
    • good
    • 0
この回答へのお礼

名前を変更したいコントロールにvbaコードが書いてあったり、
フォーカスが当たる場合は要注意という事ですね。

ん?ん?ん?
いまいちよくわからないのですが

>当該フォーム以外から実行するのであれば、
コントロール名の変更は可能です。

との事ですが、
Forms("フォーム1")!コマンド0.Name = "あああ"
これは、該当フォームから実行してる事にはならないのですか?

と思ったら、
>上記のように、「Form_フォーム1.Name」ではなく、
>「"フォーム1"」と定数式を使用すれば、変更が可能になります。
>これは、「Form_フォーム1」を参照すると、
>「フォーム1」が非表示でメモリに読み込まれる
>(≒フォームビューで開かれたのに近い状態になる)ためです。

との事なのですね。

要するに
Form_フォーム1

Forms("フォーム1")
は別物のようですね。

 Forms("フォーム1")形式に変えたらうまくできました。

お礼日時:2013/01/18 19:56

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

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


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