- ベストアンサー
VBAでセルに入力規則(選択し)を設定する
- VBAを使って、セルに入力規則(選択し)を設定する方法について教えてください。
- EXCELのシート上のボタンにコードを書いて実行すると、「アプリケーション定義又はオブジェクト定義のエラー」が出てしまいます。このエラーの原因と対策を教えてください。
- ボタンの中にあるコードで、セルE7にセルE147からE158までに設定した「選択し」をセットする方法を教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
またまた、myRangeです。 原因がわかりました。 試したところエクセルのバージョンによって上手くいったりいかなかったりするようです。 xl2000は、質問者の言うとおりエラーが出る xl2010は、上手く動作する (xl2003、2007は使える環境にないので試していません) 但し、CommandButtonを使わないで直接マクロを実行するとどちらでも動作します。 で、解決策として、コードの最初に、 Range("E7").Select を入れてセルE7をアクティブにしてやるとバージョンに関係なく動作するようです。 以上です。
その他の回答 (3)
- myRange
- ベストアンサー率71% (339/472)
回答2、myRangeです。 あらら、シートは保護してなかったですか。。 では、提示したコードだけではなくて、 質問者のシート構成、コードの場所など以下のことを補足してください。 さすれば、すぐ解決するでしょう。。。(^^;;; ●入力規則をセットするセルE7のシート名 ●リストのE147~E158のシート名(E7と同じでしょうが念のため) ●ボタンの配置してあるシート名 ●ボタンの種類はフォームのボタンなのか、コントロールツールボックスのボタンなのか ●コードの書いてある場所(標準モジュールか、ボタンのあるシートモジュールか) ●コードを端折らずに、Sub xxxx_Click()~~End Subまで全て提示 ▲データの内容は不要です。 以上です。
お礼
補足事項に関しては以下の通りです。 ●入力規則をセットするセルE7のシート名 ⇒sheet1 ●リストのE147~E158のシート名(E7と同じでしょうが念のため)⇒sheet1 ●ボタンの配置してあるシート名 ⇒sheet1 ●ボタンの種類はフォームのボタンなのか、コントロールツールボックスのボタンなのか コントロールツーボックスのボタンです。 ●コードの書いてある場所(標準モジュールか、ボタンのあるシートモジュールか)⇒ボタンの中です。 ●コードを端折らずに、Sub xxxx_Click()~~End Subまで全て提示 以下のとおりです。 Private Sub CommandButton1_Click() ActiveSheet.Unprotect Dim CRng As Range Set CRng = Range("E7") With CRng.Validation .Delete .Add Type:=xlValidateList, Formula1:="=$E$147:$E$158" End With MsgBox "選択肢の更新が完了しました。", vbOKOnly + vbInformation End Sub 念のため、新しいBookを作り、sheet1にボタンを追加してコードを記述してみました。 当然、sheet1のボタン以外には何もコードが記述されていない状態です。参照もしていません。 しかし、結果は同じようにエラーです。 コードそのもがおかしいのでは?と感じていますが。
- myRange
- ベストアンサー率71% (339/472)
コード的には問題はないので、考えられるとしたら。。。 シートの保護、をしてませんか? であれば、 コードの最初で Activesheet.UnProtect コードの最後で、 Activesheet.Protect としてみるといいでしょう。 ●尚、Protect,UnProtectの引数(PassWordなどは省略してます) 引数は、シート保護のマクロ記録を取ってみるとわかります。 以上です。
お礼
回答、ありがとうございます。 シートの保護はしていません。 念のため、Activesheet.UnProtect を追加しましたが、結果は変わらずエラーとなりました。 データがおかしいのかと思い、選択肢に文字を再セットしましたが、結果はエラーでした。
- greyseal
- ベストアンサー率50% (9/18)
エラーが出たという場所のセルの住所を「E147からE158まで」を「E10からE15まで」に変えただけですが、ちゃんとできましたよ? Sub test() Dim CRng As Range Set CRng = Range("E7") With CRng.Validation .Delete .Add Type:=xlValidateList, Formula1:="=$E$10:$E$15" '←147を10に、158を15に。 End With End Sub
お礼
ご回答、ありがとうございます。 ご回答のとおり私もやってみましたが、同じエラーが出てしまいました。 ボタンを新しく作成し、やってみましたがやはり、エラーです。 何が違うのでしょうか。 私のPCは OS:XP エクセル:Excel2000 VB:Visual Basic 6.0 です。
お礼
ご回答、ありがとうございます。 Range("E7").Select を追加しましたら、うまく動作するようになりました。 どうもありがとうございました。