2010-07-22 27 views
5

我有一個XLA文件要作爲Excel加載項部署到組織中的許多用戶。我的意圖是將其部署到用戶在「Application Data \ MyCompany」中的「文檔和設置」文件夾中的目錄中。 (事實上​​,這一切都是通過一個包裝器來完成的,該包裝器在本地複製最新版本的XLA並將其作爲Excel加載項安裝)。如何阻止Excel存儲XLA的絕對路徑?

但是,如果用戶創建引用此XLA中定義的函數的工作表,則Excel似乎在函數調用中存儲XLA的絕對路徑。因此,如果用戶將該工作表發送給同事,Excel無法解析該函數​​,因爲他們的XLA副本位於不同的絕對路徑(因爲他們的用戶名是絕對路徑的一部分)。

我的信念到現在爲止只要XLA作爲插件安裝,但是這看起來並不是這樣的,Excel的「應對」就是這樣。

是否真的如此,我需要爲我的加載項爲所有用戶強制執行相同的絕對路徑?這在一個單一的組織內是可能的,但我真的不能相信這是真的,因爲它嚴重阻礙了共享XLS文件。

謝謝。

回答

4

有沒有好辦法做到這一點。我將我的xla文件放在網絡共享上而不是本地,並通過UNC路徑進行安裝。這隻適用於我,因爲每個人都可以訪問該份額,但這可能並非如此。下面是一些其他的替代品

http://www.dailydoseofexcel.com/archives/2008/06/02/fixing-links-to-udfs-in-addins/

+0

感謝您的鏈接 - 看起來像一個有用的資源。沒有找到它,雖然谷歌搜索 – 2010-07-22 15:14:34

0

你能指定一個基於環境變量的路徑嗎?例如。 %APPDATA%\MyCompany

+0

這就是我'但是如果%APPDATA%針對不同的機器(例如不同的已安裝的驅動器)進行了不同的擴展,那麼我面臨着同樣的問題。 我相信這肯定是一個解決的問題,否則就不可能將基於XLA的Excel加載項可靠地分配給公衆。 – 2010-07-22 14:31:54

+2

@John所以你說的是Excel擴展環境變量並將_expanded_值存儲在一個新保存的文件中:-(我會打電話給__bug__。 – 2010-07-29 14:09:16

2

我只是用這樣一個子刪除路徑:

Sub RemoveXlaPath() 
' 
' Goal: delete the path reference to the add-in, i.e. everything before and including the '!' 
' ='C:\Program Files (x86)\Microsoft Office\Office14\LIBRARY\populator.xlam'!famedata(...) 
' 
    Cells.Replace What:="'C:\*xla*'!", Replacement:="", _ 
        LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, _ 
        SearchFormat:=False, ReplaceFormat:=False 
End Sub 
+0

..可能不是最清潔的方式來處理這個,但對我來說最實際 - 謝謝@gerdami! – Kay 2017-01-11 10:49:27

0

我所做的是,如果我給用戶一個XLS,它在其上打開一些代碼 - 將XLA作爲開放事件的一部分進行安裝。它還卸載舊版本(如果有的話)(刪除和命令欄)。這個自我分配。理論上它可以清理任何路徑。這假定每個人都可以訪問某個共享驅動器,這樣可以防止他們將XLA複製到本地驅動器。或者通過電子郵件向共享驅動器發送帶XLA的XLA快捷方式。如果可能的話,你不需要在本地驅動器上安裝XLA。

如果XLA必須位於本地驅動器上 - 不確定這是否可行,但打開事件時的XLS可檢查修復任何路徑並安裝/安裝xla - 如果它知道它在哪裏。但是,如果您通過互聯網向XLS發送電子郵件,則XLS的開啓事件可以檢查XLA是否可用,並放置一個消息框告訴用戶該做什麼 - 安裝此xla,這將是一個單獨的附件。作爲開放活動的一部分,XLA可以清理任何路徑 - 只是一些想法。

另一種可能性是XLA on open event可以修改打開事件中的XLS,以便如果分發了XLS,則XLS將能夠檢查XLA是否可用。棘手。

0

這是一個糟糕的疏忽,使加載項幾乎不可管理共享使用。除此之外,使用.XLAM加載項是避免必須使用啓用宏的電子表格的一種好方法(共享電子表格可以分發而不使用宏,而宏可以駐留在.XLAM中)