1

Excel AddIn、.NET 4.0、NetOffice 1.5.1.2、ExcelDNA 1.29、C# インストーラーは、次のように VBA を使用して xls (install.xls) を呼び出します。install.xls の最後で、Excel が終了します。ただし、Excel を閉じた後、Excel がクラッシュし、「Excel が動作を停止しました... レポートを Microsoft に送信してください」という 2 つのボタンが表示されます。1 つは「送信しない」、もう 1 つは送信です。

これは、Windows XP + Excel 2007 または WinXP + Excel 2010 でのみ発生します。また、デバッグ中に、Application.Wait を MsgBox に置き換えると、クラッシュの問題がまったく発生しないことに気付きます。ある種のタイミングの問題があるように感じますが、実際には何の手がかりもありません。この問題は私を夢中にさせます。助けてください。ありがとう!

Private Sub Workbook_Open()

Dim quit As Integer
Dim added As Boolean
added = Add_Addin
Application.Wait (Now + TimeValue("0:00:02"))
If Workbooks.Count = 1 Then
    Application.Wait Now + TimeValue("0:00:03")
    Application.quit
Else
    Application.Wait Now + TimeValue("0:00:03")
    Me.Close
End If

End Sub


Private Function Add_Addin() As Boolean
    On Error GoTo ERR_

Dim addinFile As String

addinFile = ThisWorkbook.Path & "\" & "MyAdd-In.xll"

If Len(addinFile) > 0 Then
        Dim LEA As AddIn
        Set LEA = Application.AddIns.Add(addinFile)
        If (Not LEA Is Nothing) Then
            LEA.Installed = True
        Else
            MsgBox "Failed to add XLL"
        End If

    'If (Application.RegisterXLL(addinFile) = True) Then
     '   MsgBox "Yeah, succeed registering XLL"
    'Else
     '   MsgBox "Failed to register XLL"
    'End If

Else
    MsgBox "XLL file not found"
End If

addinFile = ThisWorkbook.Path & "\" & "MyFunc.xla"
If Len(addinFile) > 0 Then
        Dim LEA2 As AddIn
        Set LEA2 = Application.AddIns.Add(addinFile)
        If (Not LEA2 Is Nothing) Then
            LEA2.Installed = True
        Else
            MsgBox "Failed to add xla"
        End If
Else
    MsgBox "xla file not found"
End If

Add_Addin = True

Exit Function

ERR_:
    MsgBox ("Error " & Err.Number & " " & Err.Description)
    Add_Addin = False

End Function
4

1 に答える 1

0

私はそれを考え出した。Excelが開いたときに、コールバックと非同期でWebサービス呼び出しを開始しました。Excelを破棄または閉じる後に、Webサービス呼び出しのコールバックを実行すると、クラッシュが発生しました。コールバックは、Webサービスからの結果に基づいてリボンボタンを無効化/有効化します。コールバックで他のことをする前に、Excelがnullであるか、破棄されているかを確認することで修正しました。

于 2013-03-14T20:17:36.407 に答える