
エクセル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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 顧客ごとに違う点検案内を作成するマクロ 4 2022/09/16 05:34
- Excel(エクセル) エクセルでシート保護のかかり方の違いとセルの非保護の設定 3 2022/08/09 10:02
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/21 09:28
- Excel(エクセル) エクセルVBA、間違っているコード内容を正して頂けませんか? エクセルワークシートに納品書を作ったの 2 2023/08/02 21:13
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Excel(エクセル) エクセルの散布図で新たに入力した値のデータラベルが空欄になる現象 1 2022/04/26 09:31
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) Excelのマクロコードについて教えてください。 1 2022/03/27 13:25
このQ&Aを見た人はこんなQ&Aも見ています
-
エクセルでセルに入力しないと保存出来ない方法ありますか?
Excel(エクセル)
-
Excel VBA 空白セルがあったらメッセージボックスで知らせたい
Visual Basic(VBA)
-
エクセルを保存し終了する際にメッセージを入れたい
Excel(エクセル)
-
-
4
ExcelのVBAで、特定のセルを入力しないとファイルを保存できない設定で、その上書日時を別のセルに入力(但し条件有)
Excel(エクセル)
-
5
EXCELデータ保存時にメッセージを表示させたい。
Access(アクセス)
-
6
Excel 条件によって入力禁止にする
Excel(エクセル)
-
7
Excel マクロ VBAで未入力セルエラーのメッセージ表示を、指定のセル名で表示したい
Excel(エクセル)
-
8
エクセルVBAで、条件に一致するセルへ移動
Excel(エクセル)
-
9
エクセルVBA ブックを閉じる前に確認メッセージを表示したい
Excel(エクセル)
-
10
Excelで未入力のセルがある場合にエラーメッセージをだしたい。
Excel(エクセル)
-
11
Excelのセルにユーザー名を表示する方法
Excel(エクセル)
-
12
excel2003 罫線だけを保護したい
Excel(エクセル)
-
13
ユーザーフォームをホイールでスクロールする方法(Excel2000VBA)
Excel(エクセル)
-
14
ExcelVBAで必須セルを入力しないと保存不可設定したが、未入力有でメールして来られる。対策は?先日の変更
Excel(エクセル)
-
15
エクセルファイルを開く時、常に同じシートから開くようにするには?
Windows Vista・XP
-
16
あるセルに特定の文字列を打つと、他のセルに決められた文字が自動入力するように
Excel(エクセル)
-
17
エクセルの対象セルの1つしか入力できないようにする方法。
Excel(エクセル)
-
18
エクセル 空欄の場合 保存時にエラーを返す
Excel(エクセル)
-
19
コマンドプロンプトの「%1」と「%~1」の違いがわからない
その他(プログラミング・Web制作)
-
20
「Cancel = True」とはどういう意味でし
Word(ワード)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
特定のセルだけ結果がおかしい...
-
エクセルのdatedif関数を使って...
-
エクセルのVBAで集計をしたい
-
【マクロ】【配列】3つのシー...
-
vba テキストボックスとリフト...
-
エクセル ドロップダウンリスト...
-
【関数】同じ関数なのに、エラ...
-
Office2021のエクセルで米国株...
-
【マクロ】列を折りたたみ非表...
-
9月17日でサービス終了らし...
-
【マクロ】アクティブセルの時...
-
ページが変なふうに切れる
-
【条件付き書式】シートの中で...
-
【マクロ】3行に上から下に並...
-
【マクロ】オートフィルターの...
-
【マクロ】EXCELで読込したCSV...
-
【画像あり】オートフィルター...
-
他のシートの検索
-
エクセルの循環参照、?
-
Excelファイルを開くと私だけVA...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
9月17日でサービス終了らし...
-
エクセル
-
【マクロ】WEBシステムから保存...
-
エクセルの循環参照、?
-
エクセル ドロップダウンリスト...
-
エクセルのdatedif関数を使って...
-
特定のセルだけ結果がおかしい...
-
【マクロ】A列にある、日付(本...
-
【マクロ】EXCELで読込したCSV...
-
【マクロ】アクティブセルの時...
-
【エクセル】期限アラートについて
-
iPhoneのExcelアプリで、別のシ...
-
【関数】同じ関数なのに、エラ...
-
Excelの新しい空白のブックを開...
-
【マクロ】3行に上から下に並...
-
【マクロ】宣言は、何のために...
-
VBA チェックボックスをオーバ...
-
Excelについての質問です 並べ...
-
【マクロ】アクティブセルの2...
-
【関数】不規則な文章から●●-●●...
おすすめ情報