Xử lý lỗi không lưu được tệp Excel đã chỉnh sửa

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 .xlsm hoặ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.

Thẻ: VBA Excel lỗi lưu file công thức không nhất quán oleobject

Đăng vào ngày 4 tháng 8 lúc 20:09