2016-06-15 1 views
0

Мне удалось сохранить книгу, но затем, когда я ее снова открыл, Excel пожаловался: «Мы обнаружили проблему с некоторым содержанием в «filename». Вы хотите, чтобы мы пытались восстановить столько, сколько можем? Если вы доверяете источнику этой книги, нажмите «Да».Excel сохраняет файл, но выдает ошибку при его открытии: «Мы нашли проблему с некоторым содержимым в ...»

«Да» (то есть, восстановление) вызывает оскорбление. Чертежи/Формы/Графики, подлежащие удалению.

Ниже описывается причина моей проблемы и ее лечения.

ответ

0

У меня была пользовательская функция рабочего листа (UDF), которая вернула массив значений, который был отображен на диаграмме.

UDF установил некоторые из этих значений на значение невозможного 2.69653970229349E + 308 (видимо, dll возвращалось 1. # QNAN, который Excel превратился в 2.69653970229349E + 308).

Удивительно, что Excel позволил сохранить это значение в ячейке и сохранить книгу. Однако при открытии книги полученная ошибка была получена, а диаграмма нарушения была удалена во время «восстановления».

Исключение заключалось в том, чтобы на диаграмме отображались только реалистичные значения.

Вот код, отредактированный из довольно большого проекта VBA.

'Global array, Values returned by the UDF 
Public MainReturnValues(1 To 57, 1 To 2) As Variant 

Public Function MainWorksheetFunction(_ 
     i_rRangeWithInputData As Range _ 
    ) As Variant 

    '[... Process input data ...] 

    'Load global array MainReturnValues(,), i.e., values returned by the UDF 
    LoadMainWorksheetFunctionReturnValues 

    'Now load UDF return values 
    MainWorksheetFunction = MainReturnValues 

End Function 

'Load global array MainReturnValues(,), i.e., values returned by the UDF 
Private Function LoadMainWorksheetFunctionReturnValues(_ 
    ) As Boolean 

    Dim l_vErrNull As Variant 
    Dim l_dChartXs(1 To 57) As Double, _ 
     l_dChartYs(1 To 57) As Double 
    Dim c As Long, _ 
     r As Long 

    '~~~~~~~ First fill area with xlErrNull to Prevent Log Chart Graphing 0 Errors 
    '~~~~~~~ Excel will "pick up the pen" when cells contain CVErr(xlErrNull) 
    l_vErrNull = CVErr(xlErrNull) 
    For r = LBound(MainReturnValues, 1) To UBound(MainReturnValues, 1) 
     For c = LBound(MainReturnValues, 2) To UBound(MainReturnValues, 2) 
     MainReturnValues(r, c) = l_vErrNull 
     Next c 
    Next r 
    '~~~~~~~ End First fill area with xlErrNull ~~~~~~~ 

    '[... Load values into l_dChartXs() and l_dChartYs() using C# dll ...] 

    For r = 1 To 57 

     'Don't try to plot ridiculous values. I suspect this causes this error: 
     '"We found a problem with some content in 'aaa.xlsb'. Do you want us to try to recover as much as we can? If you trust the source of this workbook, click Yes." 
     On Error Resume Next 'Catch 1.#QNAN 
     If ((l_dChartXs(r) > 1E+308) Or (l_dChartYs(r) > 1E+308)) Then 

     Else 'Value is not ridiculous 
     On Error GoTo 0 

     'Xs in first column 
     MainReturnValues(r, 1) = l_dChartXs(r) 

     'Ys in second column 
     MainReturnValues(r, 2) = l_dChartYs(r) 
     End If 
    Next r 

    LoadMainWorksheetFunctionReturnValues = True 
Exit Function 

Я надеюсь, что это кому-то поможет.

+0

Существует много ситуаций, когда excel смущает и позволяет однократно использовать значение vba, которое не допускает его таким же образом в WB, но есть, поэтому при попытке открыть его появляется ошибка. OT: для меня произошло, когда VBA, я добавляю более 255 символов в список проверки, просто убедитесь, что вы не потеряете эти данные - при появлении ошибки он скажет вам, что, скорее всего, будет скомпрометировано. – Sgdva

Смежные вопросы