2016-11-15 29 views
0

而不是將所有宏存儲在每個工作簿中,我們希望將它們存儲在一個全局宏中。我們嘗試使用Personal.xlsb文件,但每次Excel崩潰或系統管理員強制重新啓動時,打開它創建personal.v.01 .... v.100文件,並且它們互相干擾,損壞等。相反,我們試圖爲每個我們製作的excel工作簿添加一個小宏,然後應該用全部宏打開一個全局excel工作簿,但是它不打開它(normal.xlsb),問題在哪裏?如果我手動運行它,它工作得很好,它只是不自動運行..使用包含所有宏的vba打開另一個工作簿

Option Explicit 
Public Sub Workbook_Open() 
Dim sFullName As String 
Dim xlApp As Excel.Application 
Dim wbReturn As Workbook 
sFullName = "Z:\Dokumentstyring\normal.xlsb" 
Set xlApp = GetObject(, "Excel.Application") 'need to do so to open it in same instance otherwise the global macros can not be called. 
Set wbReturn = xlApp.Workbooks.Open(filename:=sFullName, ReadOnly:=True) 
If wbReturn Is Nothing Then 
MsgBox "Failed to open workbook, maybe z drive is down?" 
Else 
ThisWorkbook.Activate'Dont know how to pass object to modules, so instead activate it and in createbutton set wb= activeworkbook.. 
Application.Run ("normal.xlsb!CreateButtons") 
End If 
End Sub 
Public Sub Workbook_BeforeClose(Cancel As Boolean) 
Dim wb As Workbook 
For Each wb In Application.Workbooks 
If InStr(UCase(wb.Name), "PARTSLIST") > 0 And wb.Name <> ThisWorkbook.Name Then Exit Sub 
Next wb 
On Error Resume Next 
Workbooks("normal.xlsb").Close 
Workbooks("filter.xlsx").Close 
End Sub 
+0

你試過使用'AddIn'嗎?所有的宏,然後引用它,然後'MYAddInName.MyFunctionName(x,y,z)'等等 –

+0

你是唯一一個打開/使用個人excel文件的人嗎? – user1

+0

@Nathan_Sav如何在網絡驅動器上發佈插件的新版本,而不需要用戶打開他們的Excel和新鏈接?不,我們是50人使用personal.xlsb文件,因此移動到正常的.xlsb文件,我們打開爲只讀 – skatun

回答

1

您創建的插件,因爲只是一個空洞的工作簿,拿着什麼,但代碼

像這樣

enter image description here

然後,在VBA中添加對您想使用的工作簿的引用,如下所示。我的文檔「是網絡驅動器上的文件夾,而不是」本地文檔「。

enter image description here

然後你就可以調用像這樣。

enter image description here

0

因此,基於從@Nathan_Sav和@Ralph輸入我得出一個部分很好的解決方案:

我已經打電話給我addinn正常,並保存在這個Z:Dokumenstyring \ Normal.xlam

然後我刪除了所有的代碼在正常的ThisWorkbook:

Private Sub Workbook_Open() 

    Dim ExcelArgs As String 
    Dim arg As String 
    ExcelArgs = Environ("ExcelArgs") 

    'Call deleteMacros.deletePersonalFiles 
    'MsgBox ExcelArgs 
    If InStr(UCase(ExcelArgs), "CREO,") > 0 Then 
     Application.DisplayAlerts = False 
     If Len(ExcelArgs) > Len("CREO,") Then 
      arg = Split(ExcelArgs, ",")(1) 
      Call Creo.addNewPartToPartslist(arg) 
     End If 
     Application.DisplayAlerts = True 
    End If 

    If InStr(UCase(ExcelArgs), "DOKLIST,") > 0 Then 
     Application.DisplayAlerts = False 
     If Len(ExcelArgs) > Len("DOKLIST,") Then 
      arg = Split(ExcelArgs, ",")(1) 
      Call ProsjektListen.dbDumpDocOut(arg) 
     End If 
     Application.DisplayAlerts = True 
    End If 

,並把這個新工作簿稱爲Z:Dokumenstyring \的Cre o.xlsm

我有這麼編輯了我所有的蝙蝠文件(以前被使用personal.xlsb):

echo "Launch excel" 
Set ExcelArgs=CREO,ADDPART 

"C:\Program Files (x86)\Microsoft Office\OFFICE16\Excel.exe" /x /r "z:\Dokumentstyring\Creo.xlsm" 

所以,當我運行的批處理文件它增加了一個參數,環境,開始creo.xlsm ,然後啓動啓動我的用戶表單的插件。

所以如果我現在想更新那個用戶表單的外觀,我通過修改Z:Dokumenstyring \ NormalDebug.xlam來完成這個工作,然後我保存一個我用Z寫的副本:Dokumenstyring \ Normal.xlam,我也告訴每個用戶不要將插件複製到Excel中的默認位置,而是將其保存在Z:Dokumenstyring \ Normal.xlam中。

我的形狀在我的Excel表格中似乎只與程序中的宏名稱一起工作,但如果兩個程序具有相同的名稱,但位於不同的程序中,則可能會有衝突。所以我也改變了這個

ws1.Shapes(tempName).OnAction = "Normal.xlam!Custom_Button_Click" 

然而,每次點擊啓動一個插件的新實例,如何避免這種情況? enter image description here

相關問題