【エクセル2003 マクロ】


下記内容のマクロを教えて下さい。よろしくお願いします。
「注意事項」
・シートには保護がかかっています(過去の質問を参考下さい:http://q.hatena.ne.jp/1242637415
・保護がかかっていますがあA1、B1はロックを外し入力可能な状態です
・B1はリストを使いプルダウンして担当者名を選択することが可能です

①A1は空白でB1も空白の場合、エラーメッセージの表示はなし
②A1は入力済でB1も入力済みの場合、エラーメッセージの表示はなし
③A1は入力済でB1は空白の場合、エラーメッセージで「担当者を選択して下さい」と表示
④A1は空白でB1は入力済の場合、エラーメッセージで「作業内容を入力して下さい」と表示

以上、よろしくお願いします。

回答の条件
  • 1人2回まで
  • 13歳以上
  • 登録:2011/02/01 16:25:06
  • 終了:2011/02/01 18:45:09

ベストアンサー

id:SALINGER No.1

SALINGER回答回数3454ベストアンサー獲得回数9692011/02/01 17:25:18

ポイント100pt

VBEからオブジェクトエクスプローラからThisWorkbookをダブルクリックするとブックモジュールが開くのでそこに

次ぎのコードをコピペしてください。


Private Sub Workbook_BeforeClose(Cancel As Boolean)
    With ActiveSheet
        If .Range("A1") = "" And .Range("B1") <> "" Then
            MsgBox "作業内容を入力して下さい", vbExclamation
            Cancel = True
        End If
        If .Range("A1") <> "" And .Range("B1") = "" Then
            MsgBox "担当者を選択して下さい", vbExclamation
            Cancel = True
        End If
    End With
End Sub

ここでは、閉じるときにメッセージを出すということですので、

メッセージが出るときはCancel=Trueを指定することで閉じる動作をキャンセルするようにしました。

それと、リンク先のコードがActivesheetを対象にしているので選択中のシートのA1とB1にしています。

特定のシートの場合は、Activesheetの一箇所を変更してください。

id:msvista

質問に不備がありました。

シートが複数枚あります。仮にA。B。Cとした場合、

BのシートのA1とB1だけに対応したいのです。

後出しになり申し訳ありません。一人の回答数を2回に変更しましたので

再回答、お願いします。

2011/02/01 17:40:10
  • id:windofjuly
    うぃんど 2011/02/01 16:48:49
    どのタイミングでA1とB1をチェックして、どこにエラーメッセージを出すのでしょうか?
  • id:msvista
    ファイルを閉じる時がいいですね
  • id:SALINGER
    2行目のActivesheet一箇所を
    WorkSheets("B")
    のように対象となるシート名にしてください。
  • id:msvista
    Thisworkbook に下記内容を貼り付けたのですが
    全然、動かないです。シートBのworkseetに貼り付けてもダメでした。

    Private Sub Workbook_Open()
    Dim ws As Worksheet
    For Each ws In Worksheets()
    ws.Unprotect Password:="1234"
    If ws.Name <> "AAA" Then
    ws.Protect Password:="1234", DrawingObjects:=True, contents:=True, UserInterfaceOnly:=True
    End If
    Next
    End Sub
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
    With Worksheets("B")
    If .Range("E13") = "" And .Range("G13") <> "" Then
    MsgBox "作業内容を入力して下さい", vbExclamation
    Cancel = True
    End If
    If .Range("E13") <> "" And .Range("G13") = "" Then
    MsgBox "担当者を選択して下さい", vbExclamation
    Cancel = True
    End If
    End With
    End Sub


  • id:SALINGER
    >シートBのworkseetに貼り付けてもダメでした。
    必ずThisWorkbookに貼りつけてください。
     
    そのコードをそのままコピペして、G13をプルダウンにしたりして同じ環境を作ってみてますが、
    私の環境ではちゃんとブックを閉じるときにメッセージボックスが開きます。
    片方のセルだけ入力してブックを閉じたときにメッセージボックスは出ませんか?
    何かエラーが出るとかは?
  • id:msvista
    後出しばかりで申し訳ないので、
    質問をやり直します。
    みなさん、これに懲りずに回答お願いします!
  • id:sayo213sayo
    コメント荒らし キタ━━(━(━(-( ( (゚∀゚) ) )-)━)━) ━━ !!!!!
     
    質問者に質問していながら回答しない
    大御所が回答している時にはイルカ賞が取れなそうだから回答しない作戦かwww
  • id:sayo213sayo
    コメント荒らし キタ━━(━(━(-( ( (゚∀゚) ) )-)━)━) ━━ !!!!!
     
    質問者に質問していながら回答しない
    大御所が回答している時にはイルカ賞が取れなそうだから回答しない作戦かwww

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません