- ベストアンサー
エクセル入力規則のマクロについての質問
- エクセル入力規則のマクロについて質問です。excel2003 os=WindowsXP の環境で、E列の10行目から57行目、I列の10行目から60行目に1から9999までの数字のみ入力可能の条件を設定しようとしていますが、プログラムが正常に動作しません。
- RangeメソッドとSelectionオブジェクトを使用して、セル範囲を指定し、Validationオブジェクトを使用して入力制限を設定しています。しかし、上手く動作していません。
- 要件としては、E列とI列の指定された範囲には、整数のみ入力可能とし、入力数値の制限は1から9999までとなっています。現在のプログラムでは、この要件を満たすことができません。どのように修正すれば良いでしょうか。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
回答2、myRangeです。 原因は、 >シートは、1つだけで、 このシートが1枚しかないというところにあります。 シートが1枚しかないと、そのシートのActivateイベントが発生しないのです。 で、WorkSheet_Activateイベントは削除して 入力規則設定のコードを次の2つのどちらかに書いてください。 (1)標準モジュールにAuto_Openプロシージャを作成しそこに書く Sub Auto_Open() ここに質問者のコード End Sub -------------------------------------------------------------- (2)ThisWorkBookモジュールのWorkBook_Openイベントに書く Private Sub Workbook_Open() ここに質問者のコード End Sub ------------------------------------------------------------- ●覚えておくこと● シートが一枚の時は、そのシートのActivateイベントは発生しない! 以上です。
その他の回答 (2)
- myRange
- ベストアンサー率71% (339/472)
2つのことが考えられます。 (1)一つ目は、このコードを該当シートとは別なシートモジュールに書いている場合 例えば、入力規則をセットするシートを"Sheet3"だとして、 このコードをSheet3以外のシートモジュールに書いてしまった。 同じことですが、、 このコードをちゃんと"Sheet3"のモジュールに書いたのに 入力規則がセットされたどうか別なシートで確認している。 (2)二つ目は、このコードを標準モジュールに書いている場合 恐らく、(1)の方だと思いますが。。。。 そこらを確認してみたらどうでしょう。 以上です。
お礼
myRange様 ありがとうございます。 MicrosoftExcelObjectsのSheet1(入力)に CommandButton1_Click()、 Worksheet_Change(ByVal Target As Range)、 Worksheet_Activate() の3つがあり、 標準モジュールに CommandButton1_Clickをクリックしたときに呼ばれるマクロがあります。 シートは、1つだけで、CommandButton1をクリックした後に シートが増えて増えたシートの内容をCSVに出力し、 増やしたシートを削除しています。
- Hardking
- ベストアンサー率45% (73/160)
入力値の最小値/最大値の制限だけことならば 別案として、VBAではなくエクセルの入力規則設定ではどうでしょうか。 1.該当セルの範囲指定する。 2.メニュー項目「データ」→「入力規則」を選択し入力規則ダイアログを開く。 3.条件の設定をする。 入力値の種類:整数 データ :次の値の間 最小値 :1 最大値 :9999 空白を無視する:チャックオフ
お礼
Hardking様 ありがとございます。 VBAでできればと思ったので。
お礼
myRange様 ありがとございます。 正常に動作しました。 基本がなってなかったってことですね。 助かりました。