Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


5336 / 13646 ツリー ←次へ | 前へ→

【51435】change イベント もとあし 07/9/18(火) 12:14 質問[未読]
【51436】Re:change イベント Jaka 07/9/18(火) 12:54 発言[未読]
【51438】Re:change イベント もとあし 07/9/18(火) 14:10 質問[未読]
【51441】Re:change イベント Jaka 07/9/18(火) 15:56 発言[未読]
【51442】Re:change イベント もとあし 07/9/18(火) 16:01 お礼[未読]
【51444】Re:change イベント Jaka 07/9/18(火) 16:10 発言[未読]
【51447】Re:change イベント もとあし 07/9/18(火) 16:54 お礼[未読]
【51450】Re:change イベント ichinose 07/9/18(火) 20:27 発言[未読]

【51435】change イベント
質問  もとあし  - 07/9/18(火) 12:14 -

引用なし
パスワード
   こんにちは。

ワークシートチェンジイベントで、例えば、A1セルに正しい入力がされると、
A2の入力規則で、リストができるシートがあります。

そのA1への値入力を外部からのマクロで正しい入力を行っても、
A2にリストができません。

マクロでの入力はワークシートチェンジイベントは無効なのでしょうか。

どうしたら、A1のセルを変更したと認識させることが、できるのでしょうか?

教えてください。

【51436】Re:change イベント
発言  Jaka  - 07/9/18(火) 12:54 -

引用なし
パスワード
   >マクロでの入力はワークシートチェンジイベントは無効なのでしょうか。
そんなことは無いです。by2002SP3

Sub wwww()
Range("a1").Value = "あ"
End Sub

*****************
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(0, 0) = "A1" Then
  If Target.Value = "あ" Then
   With Range("A2").Validation
     .Delete
     .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
     xlBetween, Formula1:="1,2,3,4,5"
     .IgnoreBlank = True
     .InCellDropdown = True
     .InputTitle = ""
     .ErrorTitle = ""
     .InputMessage = ""
     .ErrorMessage = ""
     .IMEMode = xlIMEModeNoControl
     .ShowInput = True
     .ShowError = True
   End With
  End If
End If
End Sub

【51438】Re:change イベント
質問  もとあし  - 07/9/18(火) 14:10 -

引用なし
パスワード
   Jaka さん、こんにちは。

ありがとうございます。
>>マクロでの入力はワークシートチェンジイベントは無効なのでしょうか。
>そんなことは無いです。by2002SP3

実際にJakaさんのコードをコピペして試しました。
いけました!
ですが、手元のものは、なぜかリストが作成されません。
Worksheet_Changeイベントは私が作成したものではないのですが、
Jakaさんのコード例を変えてみると以下のような形です。

Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Address = "$A$1" Then
    TEST
  End If
End Sub

'**同ブック内にある別の標準モジュールで**
Sub TEST()
  If Range("A1").Value = "あ" Then
   With Range("A2").Validation
     .Delete
     .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
     xlBetween, Formula1:="1,2,3,4,5"
     .ErrorMessage = "正しい値をいれてください"
     .IMEMode = xlIMEModeAlpha
   End With
  End If
End Sub

いろいろ記述を変えてみたりしたのですが、さっぱり分かりません。
すみませんが、何が問題なのか教えてください。

よろしくお願いします。

【51441】Re:change イベント
発言  Jaka  - 07/9/18(火) 15:56 -

引用なし
パスワード
   こちらの環境では、提示されたコードでちゃんと表示されてましたけど...。
提示したコードを新規ブックにて試されてみてはどうでしょう。

【51442】Re:change イベント
お礼  もとあし  - 07/9/18(火) 16:01 -

引用なし
パスワード
   自己レスです。

結局何がいけないのか、分からなかったのですが、2つに分かれていた
ワークシートのWorksheet_changeのコードと
標準モジュールの別コードをJakaさんのコードになぞって合体させましたら、
うまく行きました。

そしてブックのマクロを作成した担当者へお願いをして、
そのように変更してもらえることになりました。

何がいけなかったのか、未だに分からないので、もしお分かりの方には
ぜひ教えていただきたいのですが、ひとまず解決とします。

ありがとうございました。

【51444】Re:change イベント
発言  Jaka  - 07/9/18(火) 16:10 -

引用なし
パスワード
   ▼もとあし さん:
>結局何がいけないのか、分からなかったのですが、2つに分かれていた
>ワークシートのWorksheet_changeのコードと
>標準モジュールの別コードをJakaさんのコードになぞって合体させましたら、
>うまく行きました。
いえ、初めは別コードを標準モジュールに書いて試したんですが、
何となく一緒にした方がわかりやすいかもという理由で一緒にしました。

考えられること、
チェンジイベントがFlaseにされてそのままとか、
同じ名前のプロシジャー名があるとかなど。

【51447】Re:change イベント
お礼  もとあし  - 07/9/18(火) 16:54 -

引用なし
パスワード
   Jaka さん、
>▼もとあし さん:

>いえ、初めは別コードを標準モジュールに書いて試したんですが、
>何となく一緒にした方がわかりやすいかもという理由で一緒にしました。

え!そうなんですか!

>考えられること、
>チェンジイベントがFlaseにされてそのままとか、
>同じ名前のプロシジャー名があるとかなど。

ところが、falseにもなっていなかったですし、
同じ名前のプロシージャー名もありませんでした。
すっきりさせたいのですが...
今は、ちょっとバタバタしているので、ゆっくり検証できないのですが、
時間ができたら、原因を追究したいと思っています。

ありがとうございました!

【51450】Re:change イベント
発言  ichinose  - 07/9/18(火) 20:27 -

引用なし
パスワード
   もとあし さん、Jaka さん、こんばんは。
>
>ありがとうございます。
>>>マクロでの入力はワークシートチェンジイベントは無効なのでしょうか。
>>そんなことは無いです。by2002SP3
>
>実際にJakaさんのコードをコピペして試しました。
>いけました!
>ですが、手元のものは、なぜかリストが作成されません。
>Worksheet_Changeイベントは私が作成したものではないのですが、
>Jakaさんのコード例を変えてみると以下のような形です。
>
>Private Sub Worksheet_Change(ByVal Target As Range)
>  If Target.Address = "$A$1" Then
    msgbox Target.Address(, , , True)
>    TEST
>  End If
>End Sub
>
>'**同ブック内にある別の標準モジュールで**
>Sub TEST()
  msgbox Range("a1").Address(, , , True)
>  If Range("A1").Value = "あ" Then
>   With Range("A2").Validation
>     .Delete
>     .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
>     xlBetween, Formula1:="1,2,3,4,5"
>     .ErrorMessage = "正しい値をいれてください"
>     .IMEMode = xlIMEModeAlpha
>   End With
>  End If
>End Sub
>
として再度ためしてみてください。

ふたつMsgbox関数では、同じアドレスを表示していますか?

違うアドレスが表示された場合は、それが原因です。

TESTを標準モジュールに記述するなら、

当該シートモジュールに

'===============================================
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Address = "$A$1" Then
    TEST Target
  End If
End Sub


標準モジュールに
'===================================================
Sub TEST(ByVal rng As Range)
  If rng.Value = "あ" Then
   With rng.Offset(1, 0).Validation
     .Delete
     .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
     xlBetween, Formula1:="1,2,3,4,5"
     .ErrorMessage = "正しい値をいれてください"
     .IMEMode = xlIMEModeAlpha
   End With
  End If
End Sub


というようにRangeオブジェクトをパラメータで渡せば、上記のような
間違いはないですよ!!

5336 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free