エクセルでchangeプロジェクトを複数設定する場
すみません、マクロの基本的な部分を分かっておらず、Google検索などで知識を得た程度のど素人なのですが。
A1にあ・い
A2にう・え
A3にお・か
をプルダウンで選べるように設定していて
【い】を選んだ場合は選択肢を【う】と【お】のみにする
【あ】を選んだら選択肢を戻す
【え】を選んだ場合は選択肢を【あ】と【お】のみにする
【う】を選んだら選択肢を戻す
【か】を選んだ場合は選択肢を【あ】と【う】のみにする
【う】を選んだら選択肢を戻す
という挙動を設定したく、複数のchangeプロジェクトを書いてみたのですが、どうしても1箇所のみうまくいきません。(下のマクロでは【え】を選んだ場合、A3の選択肢が消えない。)
書き方・考え方自体が間違っているのかもしれませんが、教えていただけませんでしょうか。
Private Sub Worksheet_Change(ByVal Target As Range)
処理1 Target
処理2 Target
処理3 Target
End Sub
Private Sub 処理1(ByVal Target As Range)
If Intersect(Target, Range("A1")) Is Nothing Then
Exit Sub
Else
If Range("A1").Value = "い" Then
With Range("A2").Validation
.Delete
.Add _
Type:=xlValidateList, _
Formula1:="う"
End With
Range("A2") = "う"
With Range("A3").Validation
.Delete
.Add _
Type:=xlValidateList, _
Formula1:="お"
End With
Range("A3") = "お"
MsgBox "入場区分を【い】に設定した場合は、分配フラグは【え】、お客様情報取得フラグは【お】に固定となります。"
ElseIf Range("A1").Value = "あ" Then
With Range("A3").Validation
.Delete
.Add _
Type:=xlValidateList, _
Formula1:="お,か"
End With
With Range("A2").Validation
.Delete
.Add _
Type:=xlValidateList, _
Formula1:="=INDIRECT(A1)"
End With
End If
End If
End Sub
Private Sub 処理2(ByVal Target As Range)
If Intersect(Target, Range("A2")) Is Nothing Then
Exit Sub
Else
If Range("A2").Value = "え" Then
With Range("A3").Validation
.Delete
.Add _
Type:=xlValidateList, _
Formula1:="お"
End With
Range("A3") = "お"
With Range("A1").Validation
.Delete
.Add _
Type:=xlValidateList, _
Formula1:="あ"
End With
Range("A1") = "あ"
MsgBox "分配フラグを【え】に設定した場合は、入場認証区分は【あ】、お客様情報取得フラグは【お】に固定となります。"
ElseIf Range("A2").Value = "う" Then
With Range("A3").Validation
.Delete
.Add _
Type:=xlValidateList, _
Formula1:="お,か"
End With
With Range("A1").Validation
.Delete
.Add _
Type:=xlValidateList, _
Formula1:="=INDIRECT(A3)"
End With
End If
End If
End Sub
Private Sub 処理3(ByVal Target As Range)
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A3")) Is Nothing Then
Exit Sub
Else
If Range("A3").Value = "か" Then
With Range("A1").Validation
.Delete
.Add _
Type:=xlValidateList, _
Formula1:="あ"
End With
Range("A1") = "あ"
With Range("A2").Validation
.Delete
.Add _
Type:=xlValidateList, _
Formula1:="う"
End With
Range("A2") = "う"
MsgBox "お客さま情報をかに設定した場合は、入場区分は【あ】、分配フラグは【う】に固定となります。"
ElseIf Range("A3").Value = "お" Then
With Range("A1").Validation
.Delete
.Add _
Type:=xlValidateList, _
Formula1:="あ,い"
End With
With Range("A2").Validation
.Delete
.Add _
Type:=xlValidateList, _
Formula1:="=INDIRECT(A1)"
End With
End If
End If
End Sub
お礼
ご指摘の通り、空フォルダが原因だったようです。 作業簡素化の為に入力規則の設定は必要でしたので 対策として、リストにあえて常時表示するメッセージ (「この中から選んでください」みたいなもの)を その拡張子で作成しておく事にしました。 ありがとうございました。
補足
早々に回答頂きありがとうございます。 今はもう帰路で確認できないのですが、 確かに指定ファイル(拡張子)が無い時や、フォルダが空の場合があります。(別ソフトで作成された3種(拡張子)のファイルが混在し、所望ファイルのみをエクセル化して別フォルダへ保存したらその元ファイル1種は削除しますの) この時におきているという事ですね? 明日確認してみます。 ただ、1回エクセルを閉じて再起動させたらエラーが出なかった時もあった(・・・確か?)のが少し気になります。 明日、このパターンも含め色々試してみます。ありがとうございます。