- ベストアンサー
オブジェクト(コントロール)の名前を変更したい
- 諸事情があり、フォーム上のコマンドボタン40個くらいの名前を変更したいですが、メモリが不足しています。
- 試しに一つだけ名前を変更してみましたが、うまくいきませんでした。
- バージョンは2007で、指定のコントロールを追加、名前を変更、または削除することはできません。
- みんなの回答 (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://okwave.jp/qa/q7888223.html
お礼
名前を変更したいコントロールにvbaコードが書いてあったり、 フォーカスが当たる場合は要注意という事ですね。 ん?ん?ん? いまいちよくわからないのですが >当該フォーム以外から実行するのであれば、 コントロール名の変更は可能です。 との事ですが、 Forms("フォーム1")!コマンド0.Name = "あああ" これは、該当フォームから実行してる事にはならないのですか? と思ったら、 >上記のように、「Form_フォーム1.Name」ではなく、 >「"フォーム1"」と定数式を使用すれば、変更が可能になります。 >これは、「Form_フォーム1」を参照すると、 >「フォーム1」が非表示でメモリに読み込まれる >(≒フォームビューで開かれたのに近い状態になる)ためです。 との事なのですね。 要するに Form_フォーム1 と Forms("フォーム1") は別物のようですね。 Forms("フォーム1")形式に変えたらうまくできました。