- 締切済み
アクティブセルが移動しない
エクセルでマクロを作成したのですがマクロ実行後にアクティブセルが方向キーで移動しない場合があります。(マウスでクリックするとそこへアクティブセルは移動できますが) マクロにはInputBoxがあり正常に処理が進んだ場合はアクティブセルは移動できますが、キャンセルした場合やマクロで規定した値以外を入力した場合にアクティブセルが移動しなくなります。移動しなくなってもそのファイルを閉じて再度開くと正常にアクティブセルは移動できます。 マクロの記述に問題があるとは思っていますがどうしたら良いかわかりません。どうかご教授ください。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- Wendy02
- ベストアンサー率57% (3570/6232)
Wendy02です。 間違いに気がつきました。今回は、数字のみですから、以下のように、IsNumeric が適切でした。 訂正します。お調べください。 '---------------------------------------------------------------------- Dim ret As Variant Dim myDate As Integer ret = Application.InputBox(Prompt:="値を入れてください", Title:="タイトル", Default:="", Type:=2) If Not IsNumeric(ret) Or ret = "False" Then MsgBox "値が数値でないか、空かキャンセルしました" Exit Sub End If 'Integer 型に変換 myDate = CInt(ret) If myDate >= 1 And myDate <= 31 Then ' ---処理--- Else MsgBox "日付が無効です" End If '----------------------------------------------------------------------
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 実際、私は、もう少し複雑なコードを書きますが、簡単な書き方ですと、以下のようになります。 私の場合は、実際に、日付として通るのかどうかチェックを入れます。例えば、6/31 などはありませんね。また、「"値から空かキャンセルしました"」以外は、本来は、ループして、再び、「"値を入れてください。"」 と出すようにします。 以下のコードでは、ループ になっていないので、InputBox の前で、Start: ~ MsgBox "日付が無効です" の後に、Goto Start などとしますが、これは、あまり一般的ではありません。 Type:1 ですと、何も入れないで、「OK」を押したときに、エラーが返ります。 On Error トラップでは、キャッチできないはずです。 '----------------------------------------- Dim ret As Variant Dim myDate As Integer ret = Application.InputBox(Prompt:="値を入れてください", Title:="タイトル", Default:="", Type:=2) If ret = "" Or ret = "False" Then MsgBox "値が空か、キャンセルしました" Exit Sub End If 'Integer 型に変換 myDate = CInt(ret) If myDate >= 1 And myDate <= 31 Then ' ---処理--- Else MsgBox "日付が無効です" End If '-----------------------------------------
- NCU
- ベストアンサー率10% (32/318)
再現できませんし、ご提示のコードで特定のキーが無効になるはずもありません。 多分これ以上一歩も進まないと思います。
お礼
お礼が遅くなり申し訳ありません。 勤務先のパソコンでも同様の現象が起き解決できませんでした。NCUさんが言われる通り「これ以上一歩も進みません」でした。できればこの解決方法やヒントなどをいただきたかったと思います。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 >マクロの記述に問題があるとは思っていますがどうしたら良いかわかりません。 そのマクロの内容を当ててくださいってことかな(^_^;) ただ、一応、マクロの記述に問題があるというなら、それを公開するのは、掲示板の共通のマナーです。自分が、どのような値を入れたときに、こういうコードで、問題が発生する、ということを書いてください。 InputBox は、二種類あって、片方がメソッド、もう片方が関数ですね。それさえ明示していません。 >InputBoxがあり正常に処理が進んだ場合はアクティブセルは移動できますが、キャンセルした場合やマクロで規定した値以外を入力した場合にアクティブセルが移動しなくなります。 エラーが出ていませんか? 'サンプル Sub TestInputBoxes() Dim ret As Variant 'InputBox関数 ret = InputBox("値を入れてください") If ret <> "" Then MsgBox "InputBox関数: " & ret Else MsgBox "戻り値が空です。" End If 'InputBoxメソッド ret = Application.InputBox("値を入れてください", "Inputメソッド", Type:=2) If Not (ret = "" Or ret = "False") Then MsgBox "InputBoxメソッド: " & ret Else MsgBox "規定値以外です。" End If End Sub
補足
マクロの概要を示さず大変失礼しました。以下の通りです。 Sub TestInputBoxes() Dim myDate As Variant myDate = Application.InputBox(Prompt:="値を入れてください", Title:="タイトル", Default:="",Type:=1) If myDate >= 1 and myDate <=31 Then ---処理--- Else MsgBox "日付が無効またはキャンセルしました" End If End Sub
こんばんは。 マクロに問題があると思うなら、そのマクロを提示するべきでは? キャンセルや規定以外の値を入力した場合の処理はどうなっているのでしょうか?
お礼
提示していただいた様にやってみましたがやはりアクティブセルが移動しません。勤務先のパソコンでも同じ現象が起きます。せっかくのアドバイスですが解決できませんでした。 ありがとうございました。