2016-06-15 6 views
0

ブックを保存できましたが、再度開いたときにExcelに問題が見つかりました「ファイル名」にいくつかの内容が含まれています。できるだけリカバリを実行しますか?このブックのソースを信頼する場合は、「はい」をクリックしてください。Excelはファイルを保存しますが、開いたときにエラーがスローされます: "コンテンツに問題が見つかりました..."

「はい」(つまり回復)は、違反する図形/図形/図表を削除する原因となります。

私の問題の原因とその治療方法について以下に説明します。

答えて

0

グラフに表示された値の配列を返したユーザー定義のワークシート関数(UDF)がありました。

UDFはこれらの値のうちのいくつかを2.69653970229349E + 308の不可能な値に設定していました(明らかに、DLLが1を返していました。#QNANは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でWBで同じように許可されていないvbaが値を1回だけ混乱させてしまうことはありますが、それを開くときにエラーが表示されることがあります。 OT:VBAでは、検証リストに255文字以上を追加しました。データが失われていないことを確認してください。エラーがポップアップすると、何が危険にさらされる可能性が高いかがわかります。 – Sgdva

関連する問題