Note: The other languages of the website are Google-translated. Back to English

如果特定單元格在Excel中為空,如何防止保存?

例如,您在工作表中設計了一個表單並與同事共享。 您希望您的同事在特定的單元格中填寫其姓名,以指示誰輸入了此表單,否則阻止他們保存該表單,您該怎​​麼辦? 在這裡,我將介紹一個VBA宏,以防止在Excel中特定單元格為空白時保存工作簿。

Office選項卡在Office中啟用選項卡式編輯和瀏覽,並使您的工作更加輕鬆...
Kutools for Excel 解決了你的大部分問題,並將你的生產力提高了 80%
  • 重用任何東西: 將最常用或最複雜的公式,圖表等添加到您的收藏夾中,並在將來快速重用它們。
  • 超過20種文字功能: 從文本字符串中提取數字; 提取或刪除部分文字; 將數字和貨幣轉換為英文單詞。
  • 合併工具:將多個工作簿和工作表合二為一; 合併多個單元格/行/列,而不會丟失數據; 合併重複的行和總和。
  • 分割工具:根據價值將數據分割成多個工作表; 一本工作簿可轉換為多個Excel,PDF或CSV文件; 一列到多列。
  • 跳過粘貼 隱藏/過濾的行; 計數與求和 按背景色; 向多個收件人批量發送個性化電子郵件。
  • 超級過濾器: 創建高級過濾方案並應用於任何工作表; 分類 按星期,日期,頻率等 篩選 用粗體,公式,註釋...
  • 超過300個強大的功能; 適用於 Office 2007-2021 和 365; 支持所有語言; 在您的企業或組織中輕鬆部署。

箭頭藍色右氣泡如果特定單元格在Excel中為空,則阻止保存

如果特定單元格在Excel中為空,則要防止保存當前工作簿,可以輕鬆應用以下VBA宏。

步驟1:按鍵,打開“ Microsoft Visual Basic for Applications”窗口 其他 + F11 同時鍵。

第2步:在項目瀏覽器中,展開 VBAProject(您的工作簿名稱.xlsm)Microsoft Excel對象,然後雙擊 的ThisWorkbook。 見左圖:

步驟3:在打開的ThisWorkbook窗口中,粘貼以下VBA宏:

VBA宏:如果特定單元格為空,則防止保存

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'Update by ExtendOffice 20220907
Dim xFileName As String
Dim xStr As String
Dim xStrWSH As String
Dim xWSh As Worksheet
Dim xWShs As Sheets
Dim xWSh1 As Worksheet
Dim xWB As Workbook

xStrWSH = "xHidWSH_LJY"
On Error Resume Next
Set xWB = Application.ActiveWorkbook
Set xWShs = xWB.Worksheets
Set xWSh = xWShs.Item(xStrWSH)

If xWSh Is Nothing Then

  Set xWSh1 = xWShs.Add
  xWSh1.Name = xStrWSH
  xWSh1.Visible = xlSheetVeryHidden
  Cancel = False

Else

  If Trim(Application.Sheets("Sheet1").Range("A1").Value) = "" Then
  Cancel = True
  MsgBox "Save cancelled"
  End If

End If

End Sub
備註:
1.在上述VBA代碼的第26行, “表 1” 是具體的工作表名稱,而“A1是特定的單元格,您可以根據需要進行更改。
2.在你輸入VBA後 的ThisWorkbook,您應該先保存工作簿。 然後您可以將啟用宏的文件發送給其他人。

現在,如果當前工作簿中的特定單元格為空白,則在保存時,將出現一個警告對話框,並告訴您“保存已取消”。請參見以下屏幕截圖:


箭頭藍色右氣泡相關文章


最佳辦公效率工具

Kutools for Excel 解決了你的大部分問題,並將你的生產力提高了 80%

  • 重用: 快速插入 複雜的公式,圖表 以及您以前使用過的任何東西; 加密單元 帶密碼 創建郵件列表 並發送電子郵件...
  • 超級公式欄 (輕鬆編輯多行文本和公式); 閱讀版式 (輕鬆讀取和編輯大量單元格); 粘貼到過濾範圍...
  • 合併單元格/行/列 不會丟失數據; 拆分單元格內容; 合併重複的行/列...防止細胞重複; 比較範圍...
  • 選擇重複或唯一 行; 選擇空白行 (所有單元格都是空的); 超級查找和模糊查找 在許多工作簿中; 隨機選擇...
  • 確切的副本 多個單元格,無需更改公式參考; 自動創建參考 到多張紙; 插入項目符號,複選框等...
  • 提取文字,添加文本,按位置刪除, 刪除空間; 創建和打印分頁小計; 在單元格內容和註釋之間轉換...
  • 超級濾鏡 (將過濾方案保存並應用於其他工作表); 高級排序 按月/週/日,頻率及更多; 特殊過濾器 用粗體,斜體...
  • 結合工作簿和工作表; 根據關鍵列合併表; 將數據分割成多個工作表; 批量轉換xls,xlsx和PDF...
  • 超過 300 項強大的功能. 支持 Office / Excel 2007-2021 和 365。支持所有語言。 在您的企業或組織中輕鬆部署。 完整功能 30 天免費試用。 60 天退款保證。
kte選項卡201905

Office選項卡為Office帶來了選項卡式界面,使您的工作更加輕鬆

  • 在Word,Excel,PowerPoint中啟用選項卡式編輯和閱讀,發布者,Access,Visio和Project。
  • 在同一窗口的新選項卡中而不是在新窗口中打開並創建多個文檔。
  • 將您的工作效率提高 50%,每天為您減少數百次鼠標點擊!
officetab底部
按評論排序
留言 (26)
還沒有評分。 成為第一位評論!
網站主持人對此評論進行了最小化
嗨 - 這非常有幫助......只有一個問題,如何在該字段中沒有值的情況下保存文件? 當我嘗試保存時,VBA 代碼將彈出“保存已取消”消息,這是預期的響應,但是,需要保存一次而沒有值來創建要重用的表單。

謝謝!
網站主持人對此評論進行了最小化
嗨,愛德華多,
在指定單元格中鍵入空格以假裝空白單元格怎麼樣? 請提醒以後刪除空間!
網站主持人對此評論進行了最小化
嗨,Eduardo,你能得到你的問題的答案嗎? 我遇到了同樣的問題,輸入空格只能保存表單。 有誰知道這個的解決方案?
網站主持人對此評論進行了最小化
你好,

請嘗試下面的 VBA 代碼:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'Update by ExtendOffice 20220907
Dim xFileName As String
Dim xStr As String
Dim xStrWSH As String
Dim xWSh As Worksheet
Dim xWShs As Sheets
Dim xWSh1 As Worksheet
Dim xWB As Workbook

xStrWSH = "xHidWSH_LJY"
On Error Resume Next
Set xWB = Application.ActiveWorkbook
Set xWShs = xWB.Worksheets
Set xWSh = xWShs.Item(xStrWSH)

If xWSh Is Nothing Then

  Set xWSh1 = xWShs.Add
  xWSh1.Name = xStrWSH
  xWSh1.Visible = xlSheetVeryHidden
  Cancel = False

Else

  If Trim(Application.Sheets("Sheet1").Range("A1").Value) = "" Then

    xFileName = ActiveWorkbook.Name
    xStr = Left(xFileName, InStrRev(xFileName, ".") - 1)
    ActiveWorkbook.SaveCopyAs "C:\Users\Amanda\Desktop\" & Replace(xFileName, xStr, xStr & " - copy")
    Cancel = True
    MsgBox "Save cancelled"

  End If

End If

End Sub

備註:
1.請更改片段 Sheet1A1 在第 26 行到實際工作表名稱和單元格。
2.請更改片段 C:\用戶\阿曼達\桌面\ 在第 30 行,其中包含要保存文件副本的實際路徑。
3.在你輸入VBA後 的ThisWorkbook, 你應該先保存工作簿. 之後,當您再次保存時,將復制該工作簿,以便您將其發送給其他人。

阿曼達
網站主持人對此評論進行了最小化
嗨,阿曼達,它不起作用:(。它給了我一個錯誤,也許我做錯了什麼。我只想保存一份表單(帶有空白字段),以便用戶可以打開並填寫。在哪裡如果文件為空,宏會提示他們並阻止他們保存文件。你能看一下嗎?
查看附件 (1 / 5)
網站主持人對此評論進行了最小化
你好,

請參閱上面的評論,我已經更新了 VBA。 該代碼應該非常適合您的情況。

阿曼達
網站主持人對此評論進行了最小化
工作,但現在復制的文件不能作為表單工作。 它只是提示保存取消。 我需要一個大部分空白的表單,以防止用戶在填寫特定字段之前進行保存。我當前的模板已填寫所有字段,但我需要一個空白的用戶文件。 對不起,我可能沒有正確解釋。
網站主持人對此評論進行了最小化
嗨,我想問一下它是否是從 A2 到 U2。 我應該寫什麼?
網站主持人對此評論進行了最小化
嗨,Wkai,
試試這個 VBA 代碼:
(此 VBA 代碼將檢測工作表“測試”中的範圍 A2:E5,如果範圍內存在空白單元格,則取消保存。)

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean,Cancel As Boolean)
將 xWSName 調暗為字符串
將 xRgAddress 調暗為字符串
將 xRg 調暗為範圍
將 xWs 調暗為工作表
將 xFNRg 調暗為範圍
xWSName = "測試"
xRgAddress = "A2:E5"
設置 xWs = Application.ActiveWorkbook.Worksheets.Item(xWSName)
設置 xRg = xWs.Range(xRgAddress)
設置 xFNRg = 無
在錯誤恢復下一頁
設置 xFNRg = xRg.SpecialCells(xlCellTypeBlanks, 23)
If Not TypeName(xFNRg.count) = "Nothing" Then
取消=真
MsgBox "保存已取消"
如果結束
END SUB
網站主持人對此評論進行了最小化
你好,很有用。 但是當我將它用於共享點上的文件時出現問題。 更改不會保存,但會創建一個新版本,重新打開時會顯示該版本,這非常令人困惑。 是否可以禁用這些新版本?
網站主持人對此評論進行了最小化
這真的很棒。 你知道我可以做些什麼來使這項工作適用於一系列工作表和許多單元格嗎? 此外,這些單元格並不總是相同的,因為在此特定工作簿中生成的工作表可能不需要每次都填充相同的單元格。 單元格將始終位於同一列中,就在生成的頁面邊框上方。 謝謝!
網站主持人對此評論進行了最小化
我有一個非常大的電子表格,其中包含很多信息。
有人可以幫我將代碼複製到 VBA - 我希望它是如果單元格 C2-C1000+ 中有任何信息,那麼單元格 O2-O1000+ 和 P2-P1000+ 需要用戶輸入 - 但是如果 C 列中的單元格是為空,則 O & P 列中的單元格也可以為空。 (例如)如果單元格 C3 沒有任何數據輸入,則單元格 O3-P3 可以為空。

謝謝 :)
網站主持人對此評論進行了最小化
嗨,伊澤爾,
請記住將以下代碼放入“ThisWorkbook”腳本窗口,並根據您的情況將以下代碼中的工作表名稱重命名為“Test”。

將 xIRg 調暗為範圍
將 xSRg 調暗為範圍
將 xBol 調暗為布爾值
將 xInt 調暗為整數
將 xStr 調暗為字符串
如果 ActiveSheet.Name = "Test" 那麼
設置 xRg = Range("C:C")
設置 xRRg = Intersect(xRg.Worksheet.UsedRange, xRg)
xBol = 假
在錯誤恢復下一頁
對於 xInt = 1 到 xRRg.Count
設置 xIRg = xRRg.Item(xInt)
如果 xIRg.Value2 <> "" 那麼
設置 xSRg = 無
如果 (Range("O" & xIRg.Row) = "") 或 (Range("P" & xIRg.Row) = "") 那麼
xBol = 真
退出
如果結束
如果結束
下一頁
如果 xBol 那麼
取消=真
MsgBox "保存已取消"
如果結束
如果結束
END SUB
網站主持人對此評論進行了最小化
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean,Cancel As Boolean)

使用工作表(“Sheet1”)
如果 WorksheetFunction.CountA(.Range("A1:A4")) <> WorksheetFunction.CountA(.Range("B1:C4")) / 2 那麼
取消=真
MsgBox "請在列 B 和 C 中輸入一個值", vbCritical, "錯誤!"
如果結束
結束

END SUB

只需將範圍從 a 更改為 c,從 b 更改為 o,希望它會有所幫助
網站主持人對此評論進行了最小化
您是否有一種方法可以對其進行編碼,以便需要填充 B 或 C 但不需要同時填充兩者?
網站主持人對此評論進行了最小化
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean,Cancel As Boolean)

使用工作表(“Sheet1”)
如果 WorksheetFunction.CountA(.Range("A1:A4")) <> WorksheetFunction.CountA(.Range("B1:C4")) / 2 那麼
取消=真
MsgBox "請在列 B 和 C 中輸入一個值", vbCritical, "錯誤!"
如果結束
結束

END SUB


只需將範圍從 a 更改為 c,從 b 更改為 o 和 p
希望它會有所幫助
網站主持人對此評論進行了最小化
下午好,我使用了上面的代碼,它運行良好。 我的問題是,如果我想在 2 個單元格上進行測試,代碼應該是什麼樣子? 我很絕望。 謝謝你我提前為你的幫助
網站主持人對此評論進行了最小化
您好我有一個 VBA 代碼,可以對一個 Excel 表中的數據進行排序和過濾,並在我的桌面上保存 48 個不同的報告。 但基於這些過濾器,一些生成的報告只有 1 行(標題)並且沒有數據。 如何將一些 VBA 代碼添加到我的文件中,以防止保存只有一行(標題)且沒有數據的文件?謝謝
網站主持人對此評論進行了最小化
Hi
我有一個 VBA 代碼,可以對一個 Excel 表中的數據進行排序和過濾,並在我的桌面上保存 48 個不同的報告。 但基於這些過濾器,一些生成的報告只有 1 行(標題)並且沒有數據。 如何將一些 VBA 代碼添加到我的文件中,以防止保存只有一行(標題)且沒有數據的文件?
謝謝
網站主持人對此評論進行了最小化
嗨,我嘗試了上述有效的公式。 我可以知道是否有任何公式可以強制用戶在保存之前填寫? 當我設置下拉菜單“請選擇”、“是”或“否”供他們選擇時。 但他們總是忘記選擇該字段並保持“請選擇”。 如果我添加此 VBA 代碼,則僅應用單元格為空白。 非常感謝您能提出建議。 謝謝
網站主持人對此評論進行了最小化
我嘗試了上述有效的公式。 我可以知道是否有任何公式可以強制用戶在保存之前填寫? 當我設置下拉菜單“請選擇”、“是”或“否”供他們選擇時。 但他們總是忘記選擇該字段並保持“請選擇”。 如果我添加此 VBA 代碼,則僅應用單元格為空白。 非常感謝您能提出建議。 謝謝
網站主持人對此評論進行了最小化
嗨快樂,
只需替換空值“Sheets("TEST").Range("A1").Value = ""”到指定文本“Sheets("TEST").Range("A1").Value = "請選擇"”整個代碼將更改如下:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
如果 Application.Sheets("TEST").Range("A1").Value = "請選擇" 那麼
取消=真
MsgBox "保存已取消"
如果結束
END SUB

網站主持人對此評論進行了最小化
這不起作用,它狀態保存已取消,但最終仍保存工作簿
網站主持人對此評論進行了最小化
注意:在VBA代碼中,“TEST”為具體工作表名稱,“A1”為具體單元格,可根據需要進行更改。

比如你的sheet命名為“Sheet1”,指定單元格為B2,運行前需要在VBA代碼中修改sheet名稱和單元格地址
網站主持人對此評論進行了最小化
,您好!
io avrei bisogno di imppostare una 宏觀類似於 quella di Eduardo。 特別是,ho due tabelle:
'- 初步表 A18:P28
'- 第二表 A33:P41。
Vorrei impedire che l'utente salvi il file se ha compilato la cella A18 e le altre attigue (B18:P18) le ha lasciate vuote oppure se ha compilato la cella A33 e ha lasciato vuole le attigue (B33:P33)。 In questo caso, come dovrei imppostare la macro? Grazie in anticipo a chi risponderà!
網站主持人對此評論進行了最小化
你好,

你的意思是如果A18被填充而B18:P18為空白,你想阻止保存文件嗎? 如果A33被填充而B33:P33為空白,您還想防止保存?
是否要在滿足兩個條件或滿足其中一個條件時阻止保存?
另外,請使用英語。 提前致謝。

阿曼達
這裡還沒有評論
留下你的意見
以訪客身份發帖
×
評價此帖子:
0   字符
推薦地點

關注我們

版權所有©2009 - 萬維網。extendoffice.com。 | 版權所有。 供電 ExtendOffice。 |
Microsoft和Office徽標是Microsoft Corporation在美國和/或其他國家的商標或註冊商標。
受Sectigo SSL保護