2012-04-18 166 views
0

我有一個xl加載項(.xlam文件),它使用其中一張工作表來存儲從UserForm收集的數據。保存一個xlam文件

如果Excel關閉,那麼我想這個文件保存在加載項目錄中。目前這裏: C:\用戶\ MYNAME \應用程序數據\漫遊\微軟\加載項\ ExcelStartUp_ExcelVersion.xlam

所以在插件的我已經得到了前關閉事件如下:

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

看起來不錯,但它似乎將一個xlam的副本保存到CurDir中。所以它就是在我們的文件系統周圍重現自我!我如何解決這個問題?

好吧 - 事情只是超現實的轉向!如果我在xlam文件的代碼的一個窗口,然後打開立即窗口,然後將以下兩行

?ThisWorkbook.Path 
?Thisworkbook.fullname 
+0

你的代碼適合我。它只是覆蓋加載項而不是創建副本。我在你的問題中錯過了一個觀點嗎? – 2012-04-18 10:11:41

+0

@SiddharthRout ....我編輯了這篇文章。你有沒有添加到你的C-Drive的xlam文件?轉到vba編輯器並選擇一個xlam文件代碼窗口,然後嘗試運行這兩行代碼? – whytheq 2012-04-18 10:17:36

+0

是的,我看到了編輯。我的Addin位於'C:\ Users \ Siddharth Rout \ AppData \ Roaming \ Microsoft \ AddIns'和上面'Thisworkbook'中的代碼相同,並且它只是覆蓋加載項而不是複製它。 – 2012-04-18 10:20:13

回答

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 
+0

我得到Doug的真正奇怪的行爲是,如果我雙擊說插入的代碼模塊,然後打開立即窗口,然後運行下面兩行'ThisWorkbook.Path','?thisworkbook。全名「他們並不一致! ....'?的ThisWorkbook。fullname'不是插件的全名,而是Activeworkbook的全名! – whytheq 2012-04-18 21:02:49

+0

你知道是什麼原因導致了你寫的第一個問題 - addins被保存在奇怪的地方嗎?我的答案是否解決了這個問題? – 2012-04-18 22:27:19

+0

你說_first_問題Doug - 但我相信這些都是同樣的問題。還沒有嘗試過你的代碼。由於我很少打開一個以上的Excel實例(在此計算機上),所以這不太可能會有所作爲。 – whytheq 2012-04-19 07:05:43