エクセルVBAで、入力必須項目を設定し、未入力セルがある場合は保存ができないようにしたいのですが教えていただけませんか。
ブックには複数シートが存在し、入力必須項目を設定したいのはsheet1のみ。
sheet1のA1,A5, A9, B1, B5, B9の6つのセルはすべて必須入力。
未入力がある場合はファイルを閉じる時に保存が出来ないようにする。
出来ればどのセルが未入力なのかエラーメッセージが出るとベスト。
6項目すべて入力できていれば通常通りファイル保存して閉じることができる。
このブック作成者がブック作成、変更ができるようにしたい(ファイルを作成、変更する時はブランクなのでエラーメッセージが出てファイル保存ができないため)。
No.3ベストアンサー
- 回答日時:
No.1です!
前回の回答は質問にある
>未入力セルがあると保存できない設定
ではなかったですね!
「未入力セルがあれば、閉じれないようにする!」になっていました。
今回は未入力セルがあれば、「保存」・「閉じる」の両方が出来ないようにしてみました。
(「保存」・「閉じる」の操作の場合に同じコードにしているだけです)
Private Sub Workbook_BeforeClose(Cancel As Boolean) 'この行から
Dim k As Long
Dim str, buf As String
Dim myArray As Variant
myArray = Array("A4", "B7", "C8", "D19") '←好みの数だけセル番地を格納する
For k = 0 To UBound(myArray)
If Worksheets("Sheet1").Range(myArray(k)) = "" Then
str = WorksheetFunction.Substitute(Range(myArray(k)).Address, "$", "")
M = M + 1
buf = buf & str & ","
End If
Next k
If M > 0 Then
MsgBox "Sheet1の" & vbCrLf & Left(buf, Len(buf) - 1) & "セルが" & vbCrLf & "未入力です。"
Worksheets("Sheet1").Activate
Cancel = True
End If
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim k As Long
Dim str, buf As String
Dim myArray As Variant
myArray = Array("A4", "B7", "C8", "D19") '←好みの数だけセル番地を格納する
For k = 0 To UBound(myArray)
If Worksheets("Sheet1").Range(myArray(k)) = "" Then
str = WorksheetFunction.Substitute(Range(myArray(k)).Address, "$", "")
M = M + 1
buf = buf & str & ","
End If
Next k
If M > 0 Then
MsgBox "Sheet1の" & vbCrLf & Left(buf, Len(buf) - 1) & "セルが" & vbCrLf & "未入力です。"
Worksheets("Sheet1").Activate
Cancel = True
End If
End Sub 'この行まで
※ 「This Workbook」にコピー&ペーストしてください。
ご希望の方法でなかったらごめんなさいね。m(__)m
有難うございました。無事期限までにファイル完成しました!
何とお礼を言っていいか。
つたない私の頼みを聞いてくださって感謝です!!
No.4
- 回答日時:
>言葉足らずでしたが、入力必須が全部埋まるまでファイルを閉じさせないようにしたいのです
「保存をさせない」と,「ブックを閉じさせない」とでは違う仕事なので,マクロも当然別になります。
それとも?「保存をさせない」のご質問を撤回して「閉じさせない」だけを実現したくなったという事でしょうか。それなら一回ご相談を閉じて,新たなご質問として投稿し直していただいた方が良いと思えます。
とりあえず「保存させず,閉じさせない」の2本立てに変えたいというお話だとして。
たとえばThisWorkbookに,回答2のマクロとセットで
private sub workbook_beforeclose(Cancel as boolean)
thisworkbook.save
if not thisworkbook.saved then cancel = true
end sub
などのように仕込んでみます。
>マクロを強制的に有効にさせたい
マクロを有効にするためにマクロを使うって,それは缶詰の中に缶切りを入れておくようなモノです。そういう方法はありません。
通常はエクセル自体の設定で「マクロのセキュリティ」によって,管理します。
#参考
ブックはとりあえず開けるけど,マクロを有効にしないと「仕事が出来ない」ように仕込んで使わせるような事なら,やれば出来ます。
元のご相談とはちょっとかけ離れた課題なので,少し何が出来るか考えてみたり,別途ご相談を投稿してみてください。
No.2
- 回答日時:
>保存ができないようにしたい
thisworkbookシートに次のように作成しておきます。
private sub Workbook_BeforeSave(byval SaveAsUI as boolean, cancel as boolean)
dim h as range
dim res as string
for each h in worksheets("Sheet1").range("A1:B1,A5:B5,A9:B9")
if h = "" then
res = res & h.address(false, false) & " "
end if
next
if res = "" then exit sub
msgbox "Fill in blanks" & vblf & replace(trim(res), " ", ",")
cancel = true
end sub
>作成者
方法1)
ブックを、マクロを無効で開いて編集し、保存します。
方法2)
sub macro1()
application.enableevents = false
end sub
というマクロを実行してから保存します。
方法3)
sub macro2()
application.enableevents = false
thisworkbook.save
end sub
というマクロで保存させます。
この回答への補足
色々勝手にお願いしてすみません。
今会社でテストしたところ、入力必須の入力がない場合、エラーメッセージが出ますが、その後ファイルも閉じてしまいます。
言葉足らずでしたが、入力必須が全部埋まるまでファイルを閉じさせないようにしたいのです。
こちらもありがとうございました。できました。
作成者についてはマクロ無効が私にとっては一番いい手だと思うのですが、実はあと追加でお願いです。このファイルは複数作業者に渡すんですが、入力必須させる為に、マクロを強制的に有効にさせたいんですが、上記マクロ内容に追加できますか。でもその場合、作成者はマクロ無効でファイルを開くこともできないですよね。。
No.1
- 回答日時:
こんばんは!
参考になるかどうかわかりませんが・・・
Alt+F11キー → VBE画面の左下の「This Workbook」をダブルクリックして
↓のコードをコピー&ペーストしてみてください。
Private Sub Workbook_BeforeClose(Cancel As Boolean) 'この行から
Dim j, k, M As Long
Dim str, buf As String
Dim myArray As Variant
myArray = Array(1, 5, 9)
For j = 1 To 2
For k = 0 To 2
If Worksheets("Sheet1").Cells(myArray(k), j) = "" Then
str = WorksheetFunction.Substitute(Cells(myArray(k), j).Address, "$", "")
M = M + 1
buf = buf & str & ","
End If
Next k
Next j
If M > 0 Then
MsgBox "Sheet1の" & vbCrLf & Left(buf, Len(buf) - 1) & "セルが" & vbCrLf & "未入力です。"
Worksheets("Sheet1").Activate
Cancel = True
End If
End Sub 'この行まで
お役に立ちますかね?m(_ _)m
この回答への補足
keithinさんにもお願いしましたが、どちらかの方に回答頂けると嬉しいです。
追加で、このファイルは複数作業者に渡すんですが、入力必須させる為に、マクロを強制的に有効にさせたいんですが、上記マクロ内容に追加できますか。でも問題は、作成者はどうやって編集するのか、という事なんです。
ありがとうございます。出来ました。
ただ私の伝え方の問題ですが、私が指定した入力必須セルはサンプルなので実際は同じ行番号ではないんです。A4,B7,C8,D19と言った感じで。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
あるあるbotに投稿したけど採用されなかったあるある募集
あるあるbotに投稿したけど採用されなかったあるあるをこちらに投稿してください
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
エクセルでセルに入力しないと保存出来ない方法ありますか?
Excel(エクセル)
-
Excel VBA 空白セルがあったらメッセージボックスで知らせたい
Visual Basic(VBA)
-
エクセルVBA ブックを閉じる前に確認メッセージを表示したい
Excel(エクセル)
-
-
4
EXCELデータ保存時にメッセージを表示させたい。
Access(アクセス)
-
5
未記入がある場合はマクロを実行させない方法
その他(Microsoft Office)
-
6
エクセルを保存し終了する際にメッセージを入れたい
Excel(エクセル)
-
7
ExcelのVBAで、特定のセルを入力しないとファイルを保存できない設定で、その上書日時を別のセルに入力(但し条件有)
Excel(エクセル)
-
8
Excel VBA 入力漏れを確認し保存する方法
Excel(エクセル)
-
9
ExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。
Visual Basic(VBA)
-
10
エクセルのチェックボックスを保護対象から外すには
Windows Vista・XP
-
11
あるセルに特定の文字列を打つと、他のセルに決められた文字が自動入力するように
Excel(エクセル)
-
12
エクセル 空欄の場合 保存時にエラーを返す
Excel(エクセル)
-
13
Excelで未入力のセルがある場合にエラーメッセージをだしたい。
Excel(エクセル)
-
14
対象セル内(複数)が埋まったら文字を表示させたい
Excel(エクセル)
-
15
エクセルでプルダウンから項目が未選択だった場合にエラーを表示させる
Excel(エクセル)
-
16
文字の色も参照 VLOOKUP
Access(アクセス)
-
17
Excel VBA あるセルでENTERを押すと特定のセルへ移動したい
Excel(エクセル)
-
18
EXCEL:特定の文字が入力された日付を表示する方法
Excel(エクセル)
-
19
エクセルのセル空白時にセルを色付け+メッセージを表示
その他(Microsoft Office)
-
20
ある列のセルに特定の文字が入っていたら他のセルに決まった文字を入れる
Word(ワード)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELで特定のセルに表示...
-
Excel内での検索結果をシート...
-
クリックすると文章が表示され...
-
【EXCEL】先週の月曜日の日付を...
-
フォントの色を指定して削除出...
-
エクセル 数字をすべて○などの...
-
現在のセルの位置を返す関数は...
-
太字に設定されているセルの個...
-
エクセル 未入力セルがあると...
-
エクセルでPDFリンクを大量...
-
Excel ハイパーリンクのURLを別...
-
EXCELのセルや文字色の反映
-
エクセルでページ数をあるセル...
-
ページ内ハイパーリンクの表示...
-
Excelで、図形内の文字をセルに...
-
excelのソルバーをVBAで複数行...
-
選択したセル範囲に入っている...
-
セル背景や文字を点滅させる方法
-
エクセル 行列を入れ替えてオ...
-
マクロを実行すると画像がズレ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELで特定のセルに表示...
-
Excel内での検索結果をシート...
-
エクセル 数字をすべて○などの...
-
クリックすると文章が表示され...
-
太字に設定されているセルの個...
-
Excelで、図形内の文字をセルに...
-
Excelでセルをクリックす...
-
Excel ハイパーリンクのURLを別...
-
ページ内ハイパーリンクの表示...
-
マクロを実行すると画像がズレ...
-
現在のセルの位置を返す関数は...
-
セル背景や文字を点滅させる方法
-
エクセルでPDFリンクを大量...
-
EXCELのセルや文字色の反映
-
エクセル 未入力セルがあると...
-
【EXCEL】先週の月曜日の日付を...
-
エクセルでページ数をあるセル...
-
セルがクリックされた回数をカ...
-
VBA 見つからなかった時の処理
-
フォントの色を指定して削除出...
おすすめ情報