
エクセル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も見ています
-
エクセルでセルに入力しないと保存出来ない方法ありますか?
Excel(エクセル)
-
Excel VBA 空白セルがあったらメッセージボックスで知らせたい
Visual Basic(VBA)
-
ExcelのVBAで、特定のセルを入力しないとファイルを保存できない設定で、その上書日時を別のセルに入力(但し条件有)
Excel(エクセル)
-
-
4
エクセルを保存し終了する際にメッセージを入れたい
Excel(エクセル)
-
5
EXCELデータ保存時にメッセージを表示させたい。
Access(アクセス)
-
6
Excel 条件によって入力禁止にする
Excel(エクセル)
-
7
Excel マクロ VBAで未入力セルエラーのメッセージ表示を、指定のセル名で表示したい
Excel(エクセル)
-
8
エクセルVBAで、条件に一致するセルへ移動
Excel(エクセル)
-
9
エクセルVBA ブックを閉じる前に確認メッセージを表示したい
Excel(エクセル)
-
10
Excelで未入力のセルがある場合にエラーメッセージをだしたい。
Excel(エクセル)
-
11
エクセルでプルダウンから項目が未選択だった場合にエラーを表示させる
Excel(エクセル)
-
12
エクセルでファイルを開いたとき、メッセージを表示したい。
Access(アクセス)
-
13
excel2003 罫線だけを保護したい
Excel(エクセル)
-
14
Excelのセルにユーザー名を表示する方法
Excel(エクセル)
-
15
エクセルの対象セルの1つしか入力できないようにする方法。
Excel(エクセル)
-
16
あるセルに特定の文字列を打つと、他のセルに決められた文字が自動入力するように
Excel(エクセル)
-
17
ユーザーフォームをホイールでスクロールする方法(Excel2000VBA)
Excel(エクセル)
-
18
エクセルファイルを開く時、常に同じシートから開くようにするには?
Windows Vista・XP
-
19
エクセル 空欄の場合 保存時にエラーを返す
Excel(エクセル)
-
20
「Cancel = True」とはどういう意味でし
Word(ワード)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
クリックすると文章が表示され...
-
EXCELで特定のセルに表示...
-
エクセル 数字をすべて○などの...
-
セルデータの一時保存
-
エクセルで独自のキーボードシ...
-
DRセルのリンクをCセルにハイパ...
-
マクロで未来?の日付を算出する
-
太字に設定されているセルの個...
-
Excel ハイパーリンクのURLを別...
-
エクセルでの特定位置のセル内...
-
VBA 見つからなかった時の処理
-
Excelの関数で時刻を固定する方法
-
セルの値が変ると自動でマクロ...
-
Excelでセルをクリックす...
-
セルの内容をテキストボックス...
-
エクセルで時間と連動して数値...
-
Excel内での検索結果をシート...
-
マクロを実行すると画像がズレ...
-
sheetsの保護されていないセル...
-
現在のセルの位置を返す関数は...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELで特定のセルに表示...
-
Excel内での検索結果をシート...
-
エクセル 数字をすべて○などの...
-
クリックすると文章が表示され...
-
Excelで、図形内の文字をセルに...
-
Excel ハイパーリンクのURLを別...
-
Excelでセルをクリックす...
-
太字に設定されているセルの個...
-
マクロを実行すると画像がズレ...
-
現在のセルの位置を返す関数は...
-
Excel:セルの値(文字列)を数...
-
Excel2007 色のカウント (VBA)
-
セルの内容をテキストボックス...
-
セルがクリックされた回数をカ...
-
エクセル 未入力セルがあると...
-
エクセルマクロ 赤色の文字を検...
-
選択したセル範囲に入っている...
-
アポストロフィーの一括挿入 ...
-
エクセルでPDFリンクを大量...
-
エクセルでセルをダブルクリッ...
おすすめ情報