[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『未入力時の警告表示について』(あんず)
マクロ設定
「Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
flag = 0
For Each seru In ActiveSheet.Range("要入力")
If seru.Value = "" Then
MsgBox seru.Address & " が未入力です。"
flag = 1
End If
Next
If flag = 1 Then
Cancel = True
End If
End Sub」
上記にて設定しやりたい事はほぼ出来たのですが
警告文を、「$A$1が未入力です」では無く
A1が日付入力セルの場合
「日付が未入力です」と表示させる事は可能でしょうか?
宜しくお願いいたします
< 使用 Excel:Excel2013、使用 OS:unknown >
日付入力セルがA1セルだけかどうかわかりませんが、
名前をまた定義しておいて、
そのセル範囲の中に今見ているセルがあるかどうか、
Intersect関数で調べてみて、条件分岐してはいかがでしょうか?
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim c As Range Dim sProm As String Dim flg As Boolean
For Each c In Range("要入力") If c.Value = Empty Then If Intersect(Range("日付"), c) Is Nothing Then sProm = c.Address(False, False) Else sProm = "日付" End If
MsgBox sProm & "が未入力!", vbCritical flg = True End If Next Cancel = flg End Sub
※蛇足ですが。。。
変数の宣言は省略しないでちゃんと宣言しましょう^^
その癖をつけておかないと、いつか大変困ることが起きる可能性があります。
(まっつわん) 2017/01/06(金) 09:36
もし、A1セルならば日付、B1セルならば金額…と複数の条件があるのであれば Select Caseステートメントがいいかもしれない。 (ねむねむ) 2017/01/06(金) 09:41
分かりづらく申し訳ありませんでした。
細かく書くと
A1が「日付」
I3が「開始時間」
K3:L3が「終了時間」
A12が「作業者名」
と4箇所が1つでも未入力時、保存すると警告を出したい
と友人にお願いし作ってもらいました。
全て未入力の場合「$A$1が未入力です」「$I$3が未入力です」「$K$3が未入力です」「$A$12が未入力です」
と順番に警告文が出ます。
それを「日付が未入力です」「開始時間が未入力です」「終了時間が未入力です」
「作業者名が未入力です」と表示させたい。
が全ぼうです。
お手数おかけし申し訳ありません
(あんず) 2017/01/06(金) 11:37
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Dim c As Range Dim sProm As String
For Each c In Range("要入力") If c.Value = Empty Then Select Case c.Address(False, False) Case "A1" sProm = sProm & "日付 " Case "I3" sProm = sProm & "開始時間 " Case "K3" sProm = sProm & "終了時間 " Case "A12" sProm = sProm & "作業者名 " End Select End If Next
If sProm <> "" Then MsgBox sProm & "が未入力です", vbCritical Cancel = True End If End Sub (???) 2017/01/06(金) 11:57
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim s As String
With Sheets(1) s = IIf(.Range("A1").Value = Empty, s & vbLf & "「日付が未入力です」", s = s & "") s = IIf(.Range("I3").Value = Empty, s & vbLf & "「開始時間が未入力です」", s = s & "") s = IIf(.Range("K3").Value = Empty, s & vbLf & "「終了時間が未入力です」", s = s & "") s = IIf(.Range("A12").Value = Empty, s & vbLf & "「作業者名が未入力です」", s = s & "") End With If Len(s) > 0 Then MsgBox Mid(sProm, 2) Cancel = True End If End Sub
>K3:L3が「終了時間」
これは終了時間が2つあるわけではなく、セルを結合しているという意味ですよね?
(まっつわん) 2017/01/06(金) 12:03
(まっつわん) 2017/01/06(金) 12:06
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Dim sProm As String
If Range("A1").Value = Empty Then sProm = sProm & "日付 " End If If Range("I3").Value = Empty Then sProm = sProm & "開始時間 " End If If Range("K3").Value = Empty Then sProm = sProm & "終了時間 " End If If Range("A12").Value = Empty Then sProm = sProm & "作業者名 " End If
If sProm <> "" Then MsgBox sProm & "が未入力です", vbCritical Cancel = True End If End Sub (???) 2017/01/06(金) 12:11
本当に有難うございました
無事に出来ました。
丸投げ等すみませんでした
(あんず) 2017/01/06(金) 13:42
もう見ないかな。
ちょっと、質問のテーマ以外のことを。
ブックを閉じるタイミングでは、どのシートがアクティブになっているのか それは、操作者の気分(?)次第ですね。
>>For Each seru In ActiveSheet.Range("要入力")
要入力 という名前のセル領域が、たまたま アクティブになっているシートに必ずあるか??
この 要入力 という名前、おそらくブックレベルで定義された名前でしょうから、 まっつわんさんが「さりげなく」記述しておられる
>>For Each c In Range("要入力")
この記述にする必要があります。 こうしておけば、そのタイミングで、どのシートがアクティブになっていようと、正しいセル領域を参照します。
(β) 2017/01/06(金) 13:47
本当に難しいです。
VBA入力後もまだまだ課題は残っています...
頑張ります。
有難うございました
(あんず) 2017/01/06(金) 14:10
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.