Khi cố gắng lưu tệp .xlsx đã chỉnh sửa bằng cách nhấn Ctrl + S, bạn có thể gặp thông báo lỗi sau:
Lỗi đã phát hiện khi lưu "C:\Users\demo\Downloads\工作簿1.xlsx". Microsoft Excel có thể lưu tệp này bằng cách xóa hoặc sửa một số tính năng. Nhấp vào "Tiếp tục" để sửa trong một tệp mới. Nhấp vào "Hủy" để hủy lưu tệp này.
Các phương pháp đã thử và kết quả:
- Lưu dưới dạng
.xlsmhoặc.xlsb: Thất bại. - Lưu dưới dạng
.xls: Thành công. - Chuyển đổi tệp
.xlsđã lưu về.xlsx: Thất bại. - Chỉnh sửa tệp
.xlsđã lưu: Có thể lưu được. - Chỉnh sửa hoặc lưu bằng WPS: Thành công. Tuy nhiên, tệp
.xlsxđược tạo bởi WPS vẫn gặp vấn đề tương tự khi mở bằng Excel.
Khi sử dụng tính năng "Kiểm tra lỗi" trong Excel, các lỗi như "Công thức không được bảo vệ" và "Công thức không nhất quán" đã được phát hiện.
Để giải quyết vấn đề này, hai đoạn mã VBA sau đã được thử nghiệm:
1. Bỏ qua lỗi "Công thức không được bảo vệ" và "Công thức không nhất quán" hàng loạt:
Sub BatchIgnoreUnprotectedFormulaAndInconsistentFormulaErrors()
' Khai báo biến
Dim ws As Worksheet
Dim cell As Range
' Tắt cập nhật màn hình để tăng tốc độ xử lý
Application.ScreenUpdating = False
' Duyệt qua tất cả các trang tính trong sổ làm việc hiện tại
For Each ws In ActiveWorkbook.Worksheets
' Duyệt qua tất cả các ô đã sử dụng trên trang tính hiện tại
For Each cell In ws.UsedRange
' Kiểm tra lỗi "Ô công thức không được bảo vệ"
If cell.Errors.Item(xlUnlockedFormulaCells).Value = True Then
' Nếu tồn tại, bỏ qua lỗi này
cell.Errors(xlUnlockedFormulaCells).Ignore = True
End If
' Kiểm tra lỗi "Công thức không nhất quán"
If cell.Errors.Item(xlInconsistentFormula).Value = True Then
' Nếu tồn tại, bỏ qua lỗi này
cell.Errors(xlInconsistentFormula).Ignore = True
End If
Next cell
Next ws
' Bật lại cập nhật màn hình
Application.ScreenUpdating = True
' Thông báo hoàn thành
MsgBox "Đã bỏ qua hàng loạt lỗi "Công thức không được bảo vệ" và "Công thức không nhất quán" trên tất cả các trang tính!", vbInformation
End Sub
2. Khóa các ô chứa công thức và bảo vệ trang tính:
Sub LockFormulasAndProtectSheets()
' Khai báo biến
Dim ws As Worksheet
Dim cell As Range
Dim formulaCells As Range
Dim hasPassword As Boolean
Dim sheetPassword As String
' Tắt cập nhật màn hình để tăng tốc độ xử lý
Application.ScreenUpdating = False
' Duyệt qua tất cả các trang tính trong sổ làm việc hiện tại
For Each ws In ActiveWorkbook.Worksheets
' Kiểm tra xem trang tính đã được bảo vệ chưa
hasPassword = ws.ProtectContents
' Nếu trang tính đã được bảo vệ, thử bỏ bảo vệ (không có mật khẩu)
If hasPassword Then
On Error Resume Next
ws.Unprotect "" ' Thử bỏ bảo vệ bằng mật khẩu trống
If Err.Number <> 0 Then
' Nếu bỏ bảo vệ thất bại, yêu cầu người dùng nhập mật khẩu
sheetPassword = InputBox("Vui lòng nhập mật khẩu cho trang tính '" & ws.Name & "':", "Mật khẩu trang tính")
If sheetPassword = "" Then
' Người dùng hủy bỏ, bỏ qua trang tính này
On Error GoTo 0
GoTo NextSheet
End If
ws.Unprotect sheetPassword
On Error GoTo 0
Else
On Error GoTo 0
End If
End If
' Bỏ khóa tất cả các ô
ws.Cells.Locked = False
' Tìm tất cả các ô chứa công thức
On Error Resume Next
Set formulaCells = ws.UsedRange.SpecialCells(xlCellTypeFormulas)
On Error GoTo 0
' Nếu tìm thấy các ô chứa công thức
If Not formulaCells Is Nothing Then
' Khóa tất cả các ô chứa công thức
formulaCells.Locked = True
' Bỏ qua lỗi "Ô công thức không được bảo vệ"
For Each cell In formulaCells
If cell.Errors.Item(xlUnlockedFormulaCells).Value = True Then
cell.Errors(xlUnlockedFormulaCells).Ignore = True
End If
Next cell
End If
' Bảo vệ lại trang tính (sử dụng mật khẩu cũ hoặc mật khẩu trống)
If hasPassword Then
If sheetPassword <> "" Then
ws.Protect Password:=sheetPassword, DrawingObjects:=True, Contents:=True, Scenarios:=True
Else
ws.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
End If
Else
' Nếu trang tính ban đầu không được bảo vệ, bây giờ bảo vệ nó (không có mật khẩu)
ws.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
End If
' Đặt lại biến mật khẩu
sheetPassword = ""
NextSheet:
Next ws
' Bật lại cập nhật màn hình
Application.ScreenUpdating = True
' Thông báo hoàn thành
MsgBox "Đã khóa tất cả các ô chứa công thức và bảo vệ trang tính!" & vbCrLf & _
"Đồng thời bỏ qua tất cả các lỗi 'Ô công thức không được bảo vệ'.", vbInformation
End Sub
Sau khi thực hiện các đoạn mã trên, vấn đề lưu tệp vẫn không được giải quyết.
Ban đầu, có nghi ngờ về vấn đề tương thích khi chỉnh sửa tệp .xlsx do WPS tạo ra bằng Excel. Tuy nhiên, sau khi giải nén tệp .xlsx được lưu bằng ET (WPS) và phát hiện có tệp \\xl\\embeddings\\oleObject1.bin bên trong, vấn đề đã được xác định. Bằng cách mở tệp .xlsx, sử dụng chức năng "Chọn đối tượng" hoặc "Ngăn chọn", sau đó xóa các đối tượng (hình ảnh) đáng ngờ, tệp đã có thể lưu lại bình thường.