『2つのVBAを動かしたいとき』(SHIN) VBA初心者です。 EXCELで2つのVBAを何とか作成しましたが2つ同時に記載すると動きません。 1つづつのVBA単体ですとちゃんと動作するので内容は間違ってないと思うのですがどこがいけないのでしょうか 1.ファイルを閉じるとき必要な入力がされていない場合、アラートを  だすVBA Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim cell1 As Range Dim msg As String Dim addStr As String msg = "未選択項目があります:" addStr = "を選択してください。" For Each cell1 In ActiveSheet.Range("必須項目") If cell1.Value = "選択してください" Then msg = msg & vbCrLf & cell1.Offset(, -1).MergeArea(1).Value & addStr End If Next If InStr(msg, addStr) Then MsgBox msg, vbInformation Cancel = True End If End Sub 2.特定のセルで入力を促すよう未入力の場合、文字が入力されているVBA Private Sub Worksheet_SelectionChange(ByVal Target As Range) Const myWd As String = "123" With Range("W51") If Not Intersect(Target, Range("W51")) Is Nothing Then If Target = myWd Then Target = "" .Font.ColorIndex = 0 End If Else If .Value = "" Then .Value = myWd .Font.ColorIndex = 16 End If End If End With End Sub < 使用 Excel:Excel2016、使用 OS:Windows10 > ---- 2つのVBA・・・? (nn) 2022/01/11(火) 17:06 ---- >2つ同時に記載すると動きません。 Workbook_BeforeClose はThisWorkbookに、 Worksheet_SelectionChange は該当のWorkSheetに 記載してあるで正しいですか? (tkit) 2022/01/11(火) 17:07 ---- 多分プロシージャ名が適当、記載する箇所も適当なのでしょう? Workbook_BeforeClose では、Select操作はしていないですし、 Worksheet_SelectionChange では、ブックを閉じることはしていない。 (tkit) 2022/01/11(火) 17:12 ---- 両方ともThisWorkbookに記載しております。 (SHIN) 2022/01/11(火) 17:13 ---- Worksheet_SelectionChangeはThisWorkbookに書いても働きません。 (参考) 2022/01/11(火) 17:41 ----  >多分プロシージャ名が適当、記載する箇所も適当なのでしょう?  その通りですね。 (・・・) 2022/01/11(火) 17:45 ---- Worksheet_SelectionChangeのコードですが、 インデントをつけていれば避けられるであろう大きなミスがあるように見えます。 インデントの練習のつもりで確認してみてください。 (参考) 2022/01/11(火) 17:56 ---- Private Sub Worksheet_SelectionChange(ByVal Target As Range) Const myWd As String = "123" With Range("W51") If Not Intersect(Target, Range("W51")) Is Nothing Then If Target = myWd Then Target = "" .Font.ColorIndex = 0 End If Else If .Value = "" Then .Value = myWd .Font.ColorIndex = 16 End If End If End With End Sub インデントの方法もわからないかもしれない、と思いこちらでつけました。 何か気づきませんか (参考) 2022/01/11(火) 18:03 ---- If Target = myWd Thenで型が違うと出てしまいます (SHIN) 2022/01/12(水) 09:40 ---- W51セルのみの処理ならTargetを.Valueに変えれば良いです。 少し下にあるコードもそうなっているでしょう。 (参考) 2022/01/12(水) 10:45 ---- 勉強足らずですみません。 複数セル(例えばA1、B1、W51)それぞれに適用する場合は どのように記載すればよろしいのでしょうか (SHIN) 2022/01/12(水) 12:01 ---- 複数セルへの適用の前に、まず1つのセルで必要十分な機能を満足させることが先です。 現状のコードではまだそれはできていないように思います。 (参考) 2022/01/12(水) 12:31 ---- 1つのセルの場合は、これでエラーなく動きました Private Sub Worksheet_SelectionChange(ByVal Target As Range) Const myWd As String = "承認日" With Range("W51") If Not Intersect(Target, Range("W51")) Is Nothing Then If .Value = myWd Then .Value = "" .Font.ColorIndex = 0 End If Else If .Value = "" Then .Value = myWd .Font.ColorIndex = 16 End If End If End With End Sub (SHIN) 2022/01/12(水) 14:49 ---- >複数セル(例えばA1、B1、W51)それぞれに適用する場合は 単純に、3つ書けばよろしいかと思います。 (With ・・・ から End With までを3つ) それでは芸が無いということであれば、 「Range("W51")」と指定してあるところを変数で指定するようにして、 変数を変更しながらループすればよろしいかと思います。 (わからん) 2022/01/12(水) 15:09 ---- 既に次の問題に向かったようですが、 以下は解決しましたか? >2つ同時に記載すると動きません。 >1つづつのVBA単体ですとちゃんと動作する 一度状況を整理されてはどうでしょう? (tkit) 2022/01/12(水) 15:33