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

Làm cách nào để ngăn lưu nếu ô cụ thể bị trống trong Excel?

Ví dụ: bạn đã thiết kế một biểu mẫu trong trang tính và chia sẻ với đồng nghiệp của mình. Bạn hy vọng đồng nghiệp của bạn điền tên của họ vào ô cụ thể để cho biết ai đã nhập biểu mẫu này, nếu không, ngăn họ lưu biểu mẫu, bạn có thể làm thế nào? Ở đây tôi sẽ giới thiệu một macro VBA để ngăn việc lưu sổ làm việc nếu ô cụ thể bị trống trong Excel.

Tab Office Cho phép Chỉnh sửa và Duyệt theo Tab trong Office, và Giúp Công việc của Bạn Dễ dàng hơn Nhiều ...
Kutools cho Excel giải quyết hầu hết các vấn đề của bạn và tăng 80% năng suất của bạn
  • Tái sử dụng mọi thứ: Thêm các công thức, biểu đồ và bất kỳ thứ gì khác được sử dụng nhiều nhất hoặc phức tạp vào mục yêu thích của bạn và nhanh chóng sử dụng lại chúng trong tương lai.
  • Hơn 20 tính năng văn bản: Trích xuất số từ chuỗi văn bản; Trích xuất hoặc loại bỏ một phần nội dung; Chuyển đổi số và tiền tệ sang từ tiếng Anh.
  • Công cụ hợp nhất: Nhiều Workbook và Sheets thành một; Hợp nhất nhiều ô / hàng / cột mà không làm mất dữ liệu; Hợp nhất các hàng và tổng trùng lặp.
  • Công cụ tách: Chia Dữ liệu thành Nhiều Trang tính Dựa trên Giá trị; Một sổ làm việc cho nhiều tệp Excel, PDF hoặc CSV; Một cột đến nhiều cột.
  • Dán bỏ qua Hàng ẩn / được lọc; Đếm và tổng theo Màu nền; Gửi hàng loạt email được cá nhân hóa cho nhiều người nhận.
  • Bộ lọc siêu: Tạo lược đồ lọc nâng cao và áp dụng cho bất kỳ trang tính nào; Sắp xếp theo tuần, ngày, tần suất và hơn thế nữa; Lọc bằng cách in đậm, công thức, chú thích ...
  • Hơn 300 tính năng mạnh mẽ; Hoạt động với Office 2007-2021 và 365; Hỗ trợ tất cả các ngôn ngữ; Dễ dàng triển khai trong doanh nghiệp hoặc tổ chức của bạn.

mũi tên màu xanh bong bóng bên phảiNgăn lưu nếu ô cụ thể trống trong Excel

Để ngăn việc lưu sổ làm việc hiện tại nếu ô cụ thể bị trống trong Excel, bạn có thể áp dụng macro VBA sau một cách dễ dàng.

Bước 1: Mở cửa sổ Microsoft Visual Basic for Applications bằng cách nhấn Khác + F11 chìa khóa trong thời gian chờ đợi.

Bước 2: Trong Project Explorer, hãy mở rộng VBAProject (Tên sổ làm việc của bạn.xlsm)Đối tượng Microsoft Excel, rồi bấm đúp vào Sổ làm việc này. Xem ảnh chụp màn hình bên trái:

Bước 3: Trong cửa sổ ThisWorkbook đang mở, dán macro VBA sau:

VBA Macro: Ngăn lưu nếu ô cụ thể bị trống

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
LƯU Ý
1. Trong hàng thứ 26 của mã VBA ở trên, "Trang tính 1" là tên trang tính cụ thể và "A1"là ô cụ thể và bạn có thể thay đổi chúng khi cần.
2. Sau khi bạn nhập VBA vào Sổ làm việc này, bạn nên lưu sổ làm việc trước. Và sau đó, bạn có thể gửi tệp hỗ trợ macro cho người khác.

Bây giờ nếu ô cụ thể trống trong sổ làm việc hiện tại, khi bạn lưu nó, một hộp thoại cảnh báo sẽ xuất hiện và cho bạn biết "Lưu đã hủy". Xem ảnh chụp màn hình sau:


mũi tên màu xanh bong bóng bên phảiBài viết liên quan


Các công cụ năng suất văn phòng tốt nhất

Kutools cho Excel giải quyết hầu hết các vấn đề của bạn và tăng 80% năng suất của bạn

  • Tái sử dụng: Chèn nhanh công thức phức tạp, biểu đồ và bất cứ thứ gì bạn đã sử dụng trước đây; Mã hóa ô với mật khẩu; Tạo danh sách gửi thư và gửi email ...
  • Thanh siêu công thức (dễ dàng chỉnh sửa nhiều dòng văn bản và công thức); Bố cục đọc (dễ dàng đọc và chỉnh sửa số lượng ô lớn); Dán vào Dải ô đã Lọchữu ích. Cảm ơn !
  • Hợp nhất các ô / hàng / cột mà không làm mất dữ liệu; Nội dung phân chia ô; Kết hợp các hàng / cột trùng lặp... Ngăn chặn các ô trùng lặp; So sánh các dãyhữu ích. Cảm ơn !
  • Chọn trùng lặp hoặc duy nhất Hàng; Chọn hàng trống (tất cả các ô đều trống); Tìm siêu và Tìm mờ trong Nhiều Sổ làm việc; Chọn ngẫu nhiên ...
  • Bản sao chính xác Nhiều ô mà không thay đổi tham chiếu công thức; Tự động tạo tài liệu tham khảo sang Nhiều Trang tính; Chèn Bullets, Hộp kiểm và hơn thế nữa ...
  • Trích xuất văn bản, Thêm Văn bản, Xóa theo Vị trí, Xóa không gian; Tạo và In Tổng số phân trang; Chuyển đổi giữa nội dung ô và nhận xéthữu ích. Cảm ơn !
  • Siêu lọc (lưu và áp dụng các lược đồ lọc cho các trang tính khác); Sắp xếp nâng cao theo tháng / tuần / ngày, tần suất và hơn thế nữa; Bộ lọc đặc biệt bằng cách in đậm, in nghiêng ...
  • Kết hợp Workbook và WorkSheets; Hợp nhất các bảng dựa trên các cột chính; Chia dữ liệu thành nhiều trang tính; Chuyển đổi hàng loạt xls, xlsx và PDFhữu ích. Cảm ơn !
  • Hơn 300 tính năng mạnh mẽ. Hỗ trợ Office / Excel 2007-2021 và 365. Hỗ trợ tất cả các ngôn ngữ. Dễ dàng triển khai trong doanh nghiệp hoặc tổ chức của bạn. Đầy đủ tính năng Dùng thử miễn phí 30 ngày. Bảo đảm hoàn lại tiền trong 60 ngày.
tab kte 201905

Tab Office mang lại giao diện Tab cho Office và giúp công việc của bạn trở nên dễ dàng hơn nhiều

  • Cho phép chỉnh sửa và đọc theo thẻ trong Word, Excel, PowerPoint, Publisher, Access, Visio và Project.
  • Mở và tạo nhiều tài liệu trong các tab mới của cùng một cửa sổ, thay vì trong các cửa sổ mới.
  • Tăng 50% năng suất của bạn và giảm hàng trăm cú nhấp chuột cho bạn mỗi ngày!
officetab dưới cùng
Nhận xét (26)
Chưa có xếp hạng. Hãy là người đầu tiên xếp hạng!
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
xin chào - điều này rất hữu ích ... Chỉ có một câu hỏi, làm cách nào để lưu tệp mà không có giá trị trong trường đó? Khi tôi cố gắng lưu, mã VBA sẽ bật ra thông báo "Lưu Đã hủy", đó là phản hồi dự định, tuy nhiên, cần lưu một lần mà không có giá trị để tạo biểu mẫu được sử dụng lại.

Cảm ơn!
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Xin chào Eduardo,
Điều gì về việc gõ một khoảng trống trong ô được chỉ định để giả vờ với một ô trống? Hãy nhắc nhở để loại bỏ không gian trong tương lai!
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Xin chào Eduardo, bạn có thể nhận được câu trả lời cho câu hỏi của mình không? Tôi đã gặp phải vấn đề tương tự và việc nhập vào một khoảng trống chỉ cho phép biểu mẫu được lưu. Có ai biết về một giải pháp cho điều này?
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Chào bạn,

Vui lòng thử mã VBA bên dưới:
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

LƯU Ý
1. Vui lòng thay đổi đoạn mã Sheet1A1 trong hàng thứ 26 đến tên trang tính và ô thực tế.
2. Vui lòng thay đổi đoạn mã C: \ Users \ Amanda \ Desktop \ trong hàng thứ 30 với đường dẫn thực tế mà bạn muốn lưu bản sao của tệp.
3. Sau khi bạn nhập VBA vào Sổ làm việc này, bạn nên lưu sổ làm việc trước. Sau đó, khi bạn lưu lại, sổ làm việc sẽ được sao chép để bạn có thể gửi cho người khác.

Amanda
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Xin chào Amanda, nó không hoạt động :(. Nó đã cho tôi một lỗi, có lẽ tôi đang làm sai điều gì đó. Tôi chỉ muốn lưu một bản sao của biểu mẫu (với các trường trống) để người dùng có thể mở và điền vào. Ở đâu macro sẽ nhắc họ và ngăn họ lưu tệp nếu nó trống. Bạn có thể vui lòng xem được không?
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Chào bạn,

Vui lòng xem bình luận ở trên, tôi đã cập nhật VBA. Mã sẽ hoạt động hoàn hảo cho trường hợp của bạn.

Amanda
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Hoạt động nhưng bây giờ tệp được sao chép không hoạt động dưới dạng biểu mẫu. Nó chỉ nhắc hủy lưu. Tôi cần một biểu mẫu gần như trống để ngăn người dùng lưu cho đến khi các trường cụ thể được điền vào. Mẫu hiện tại của tôi có tất cả các trường được điền, nhưng tôi cần tệp Người dùng trống. Xin lỗi, tôi có thể đã không giải thích một cách chính xác.
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Chào tôi muốn hỏi là từ A2 đến U2. Tôi nên viết cái gì?
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Xin chào Wkai,
Hãy thử mã VBA này:
(Mã VBA này sẽ phát hiện Phạm vi A2: E5 trong Trang tính “Kiểm tra” và hủy lưu nếu có các ô trống tồn tại trong phạm vi.)

Private Sub Workbook_BeforeSave (ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim xWSName dưới dạng chuỗi
Dim xRgAddress dưới dạng chuỗi
Dim xRg theo phạm vi
Làm mờ xWs dưới dạng trang tính
Dim xFNRg theo phạm vi
xWSName = "KIỂM TRA"
xRgAddress = "A2: E5"
Đặt xWs = Application.ActiveWorkbook.Worksheets.Item (xWSName)
Đặt xRg = xWs.Range (xRgAddress)
Đặt xFNRg = Không có gì
On Error Resume Next
Đặt xFNRg = xRg.SpecialCells (xlCellTypeBlanks, 23)
If Not TypeName (xFNRg.count) = "Không có gì" thì
Hủy bỏ = Đúng
MsgBox "Đã hủy lưu"
Cuối Nếu
End Sub
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Xin chào, rất hữu ích. NHƯNG có một vấn đề khi tôi sử dụng nó cho các tệp trên điểm chia sẻ. Các thay đổi không được lưu nhưng một phiên bản mới được tạo ra hiển thị khi mở lại khá khó hiểu. Có thể tắt các phiên bản mới này không?
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Điều này thực sự tuyệt vời. Bạn có biết tôi có thể làm gì để làm cho điều này hoạt động cho một loạt các trang tính và một số ô không? Ngoài ra, các ô này không phải lúc nào cũng giống nhau, vì có những trang được tạo trong sổ làm việc cụ thể này có thể không có cùng ô cần được điền mỗi lần. Các ô sẽ luôn nằm trong cùng một cột, ngay phía trên đường viền trang cũng được tạo. Thanks!
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Tôi có một bảng tính rất lớn chứa rất nhiều thông tin.
Ai đó có thể vui lòng giúp tôi một mã để sao chép vào VBA - Tôi muốn nó là nếu Ô C2-C1000 + có bất kỳ thông tin nào trong đó thì ô O2-O1000 + và P2-P1000 + yêu cầu người dùng nhập - tuy nhiên nếu ô trong Cột C thì trống thì ô trong Cột O & P cũng có thể trống. (ví dụ) nếu ô C3 không có bất kỳ đầu vào dữ liệu nào thì ô O3-P3 có thể để trống.

Cho tôi biết :)
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Xin chào Yzelle,
Hãy nhớ đặt mã bên dưới vào cửa sổ tập lệnh “ThisWorkbook” và đổi tên trang tính thành “Test” trong mã bên dưới dựa trên điều kiện của bạn.

Dim xIRg As Range
Dim xSRg dưới dạng phạm vi
Dim xBol dưới dạng Boolean
Dim xInt dưới dạng số nguyên
Làm mờ xStr dưới dạng chuỗi
If ActiveSheet.Name = "Test" Then
Đặt xRg = Range ("C: C")
Đặt xRRg = Intersect (xRg.Worksheet.UsedRange, xRg)
xBol = Sai
On Error Resume Next
Đối với xInt = 1 Đến xRRg.Count
Đặt xIRg = xRRg.Item (xInt)
Nếu xIRg.Value2 <> "" Thì
Đặt xSRg = Không có gì
Nếu (Phạm vi ("O" & xIRg.Row) = "") Hoặc (Phạm vi ("P" & xIRg.Row) = "") Thì
xBol = Đúng
Thoát cho
Cuối Nếu
Cuối Nếu
Sau
Nếu xBol Thì
Hủy bỏ = Đúng
MsgBox "Đã hủy lưu"
Cuối Nếu
Cuối Nếu
End Sub
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Private Sub Workbook_BeforeSave (ByVal SaveAsUI As Boolean, Cancel As Boolean)

Với Trang tính ("Trang 1")
Nếu WorksheetFunction.CountA (.Range ("A1: A4")) <> WorksheetFunction.CountA (.Range ("B1: C4")) / 2 Sau đó
Hủy bỏ = Đúng
MsgBox "Vui lòng nhập giá trị vào cột B và C", vbCritical, "Lỗi!"
Cuối Nếu
Kết thúc với

End Sub

Chỉ cần thay đổi phạm vi từ a thành c, và từ b sang o và phope nó sẽ hữu ích
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Bạn có cách nào để mã này có thể được mã hóa để B hoặc C cần được điền nhưng không bắt buộc phải điền cả hai không?
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Private Sub Workbook_BeforeSave (ByVal SaveAsUI As Boolean, Cancel As Boolean)

Với Trang tính ("Trang 1")
Nếu WorksheetFunction.CountA (.Range ("A1: A4")) <> WorksheetFunction.CountA (.Range ("B1: C4")) / 2 Sau đó
Hủy bỏ = Đúng
MsgBox "Vui lòng nhập giá trị vào cột B và C", vbCritical, "Lỗi!"
Cuối Nếu
Kết thúc với

End Sub


Chỉ cần thay đổi phạm vi từ a thành c, và từ b thành o và p
hy vọng nó sẽ giúp
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
chào buổi chiều, tôi đã sử dụng mã ở trên và nó hoạt động hoàn hảo. câu hỏi của tôi là mã sẽ như thế nào nếu tôi muốn kiểm tra trên 2 ô? Tôi khá tuyệt vọng. cảm ơn bạn, tôi tạm ứng vì sự trợ giúp của bạn
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Xin chào, tôi có mã VBA sắp xếp và lọc dữ liệu từ một bảng excel và lưu 48 báo cáo khác nhau trên màn hình của tôi. nhưng dựa trên các bộ lọc đó, một số báo cáo được tạo chỉ có 1 hàng (tiêu đề) và không có dữ liệu. Làm cách nào tôi có thể thêm một số mã VBA vào tệp của mình để ngăn lưu các tệp chỉ có một hàng (tiêu đề) và không có dữ liệu? Cảm ơn bạn
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Hi
Tôi có mã VBA sắp xếp và lọc dữ liệu từ một bảng excel và lưu 48 báo cáo khác nhau trên máy tính để bàn của mình. nhưng dựa trên các bộ lọc đó, một số báo cáo được tạo chỉ có 1 hàng (tiêu đề) và không có dữ liệu. Làm cách nào để thêm một số mã VBA vào tệp của mình để ngăn chặn việc lưu các tệp chỉ có một hàng (tiêu đề) và không có dữ liệu?
Cảm ơn bạn
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Xin chào, tôi đã thử công thức trên mà hoạt động. Tôi có thể biết có bất kỳ công thức nào có thể buộc người dùng điền vào trước khi họ có thể lưu không? Khi tôi đặt menu kéo xuống "Vui lòng chọn", "Có" hoặc "Không" để họ chọn. Nhưng họ luôn quên chọn trường đó và vẫn "Vui lòng chọn". Nếu tôi thêm mã VBA này, chỉ áp dụng ô trống. Rất đánh giá cao bạn có thể tư vấn. Cảm ơn bạn
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Tôi đã thử công thức trên mà hoạt động. Tôi có thể biết có bất kỳ công thức nào có thể buộc người dùng điền vào trước khi họ có thể lưu không? Khi tôi đặt menu kéo xuống "Vui lòng chọn", "Có" hoặc "Không" để họ chọn. Nhưng họ luôn quên chọn trường đó và vẫn "Vui lòng chọn". Nếu tôi thêm mã VBA này, chỉ áp dụng ô trống. Rất đánh giá cao bạn có thể tư vấn. Cảm ơn bạn
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Chào hạnh phúc,
Chỉ cần thay thế giá trị trống “Trang tính ("KIỂM TRA"). Phạm vi ("A1"). Giá trị = ""”Đến văn bản được chỉ định“Trang tính ("KIỂM TRA"). Phạm vi ("A1"). Giá trị = "Vui lòng chọn"”Và toàn bộ mã sẽ được thay đổi như sau:
Private Sub Workbook_BeforeSave (ByVal SaveAsUI As Boolean, Cancel As Boolean)
If Application.Sheets ("TEST"). Range ("A1"). Value = "Please select" Then
Hủy bỏ = Đúng
MsgBox "Đã hủy lưu"
Cuối Nếu
End Sub

Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Điều này không hoạt động, nó nói rằng lưu đã bị hủy nhưng cuối cùng vẫn lưu sổ làm việc
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Lưu ý: Trong mã VBA, "TEST" là tên trang tính cụ thể và "A1" là ô cụ thể và bạn có thể thay đổi chúng khi cần.

Ví dụ: trang tính của bạn được đặt tên là "Sheet1" và ô được chỉ định là B2, bạn cần thay đổi tên trang tính và địa chỉ ô trong mã VBA trước khi chạy nó
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Xin chào,
io avrei bisogno di impostare una macro mô phỏng một quella di Eduardo. Cụ thể, ho do tabelle:
'- prima tabella A18: P28
'- seconda tabella 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). Trong questo caso, đến dovrei impostare la macro? Grazie trong dự đoán một chi risponderà!
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Chào bạn,

Ý của bạn là bạn muốn ngăn không cho lưu tệp nếu A18 được điền trong khi B18: P18 trống? Bạn cũng muốn ngăn việc lưu nếu A33 được điền trong khi B33: P33 trống?
Bạn có muốn ngăn lưu khi cả hai tiêu chí được đáp ứng hay khi một trong hai tiêu chí được đáp ứng không?
Ngoài ra, hãy sử dụng tiếng Anh. Cảm ơn trước.

Amanda
Không có bình luận nào được đăng ở đây
Để lại ý kiến ​​của bạn
Đăng với tư cách khách
×
Đánh giá bài viết này:
0   Nhân vật
Các vị trí được đề xuất

Kết nối với chúng tôi

Bản quyền © 2009 - www.extendoffice.com. | Đã đăng ký Bản quyền. cung cấp bởi ExtendOffice. | BẢN ĐỒ CHI NHÁNH
Microsoft và logo Office là các nhãn hiệu hoặc nhãn hiệu đã đăng ký của Microsoft Corporation tại Hoa Kỳ và / hoặc các quốc gia khác.
Được bảo vệ bởi Sectigo SSL