0

UserForm から収集したデータを格納するためにシートの 1 つを使用する xl アドイン (.xlam ファイル) があります。

Excel が閉じたら、このファイルをアドイン ディレクトリに保存したいと思います。

現在ここ:
C:\Users\myName\AppData\Roaming\Microsoft\AddIns\ExcelStartUp_ExcelVersion.xlam

アドインの before close イベントでは、次のことを行いました。

Private Sub Workbook_BeforeClose(Cancel As Boolean)
ThisWorkbook.Save
End Sub

問題ないように見えますが、xlam のコピーを CurDir が何であれ保存します。つまり、ファイルシステムの周りで自分自身を再現しています!

xlam ファイルのコード ウィンドウの 1 つでイミディエイト ウィンドウを開くと、次の 2 行に一貫性がありません。

 ?ThisWorkbook.Path
 ?Thisworkbook.fullname
4

3 に答える 3

1

私は同じ問題に遭遇しており、特定の状況下でアドインが ReadOnly ステータスを True に変更することが原因であることがわかりました (どの状況で正確に特定することはできませんが、Excel の複数のインスタンスを開いていることにリンクしているようです)。

したがって、解決策は、次のようにコードにチェックを追加することです。

If ThisWorkbook.ReadOnly = False Then
    ThisWorkbook.Save
End If
于 2019-11-26T14:11:07.800 に答える
0

Excelの複数のインスタンスが開いているときに、この動作(アドインはあちこちに保存されます)が発生しました。(実際には昨夜グーグルで検索していましたが、それを確認するものは何も見つかりませんでした。)複数のインスタンスをチェックするBeforeCloseイベントから呼び出された関数があります。

Private Sub App_WorkbookBeforeClose(Cancel As Boolean)
If Not ThisWorkbook.Saved Then
    If MsgBox(ThisWorkbook.Name & " Addin" & vbCrLf & "is unsaved. Save?", _
              vbExclamation + vbYesNo, "Unsaved Addin") = vbYes Then
        If ExcelInstanceCount > 1 Then
            MsgBox "More than one Excel instance running." & vbCrLf & _
               "Save cancelled", _
                vbInformation, "Sorry"
           Exit Sub
        Else
            ThisWorkbook.Save
        End If
    End If
End If
End Sub

Function GetExcelInstanceCount() As Long
Dim hwnd As Long
Dim i As Long
Do
    hwnd = FindWindowEx(0&, hwnd, "XLMAIN", vbNullString)
    i = i + 1
Loop Until hwnd = 0
GetExcelInstanceCount = i - 1
End Function
于 2012-04-18T14:48:53.283 に答える