2014-05-20 41 views
1

這恐怕是一個漫長的問題。在XSLX文檔中使用Excel宏

我們要求客戶用一些客戶數據填寫excel文檔。這些數據以列(Id,Name,Phone等)分隔。我有一個隱藏的工作表,其中這些列標題映射到我們在數據庫中使用的字段。出於安全原因,我不希望/不能將此文件分發爲啓用宏的文檔。但是當他們發回文件時,我想在這個文件上執行一個宏,這個宏將內容保存爲CSV文件,因此這個文件可以導入到數據庫中。

我正在考慮在PERSONAL.XSLB文件中創建宏,以便我可以在返回的XSLX文件上使用它。

這是正確的方式來處理它是這樣嗎?或者我應該使用不同的方法?

感謝所有幫助

[編輯] 通過,如果已經有這個答案的方式,我找不到它。也許我沒有使用正確的搜索字詞。

回答

1

這聽起來像一個Add-in一個很好的機會 - 我寫了一篇關於它的位置:How to make a reusable button from a macro?

這裏是VBA的簡短摘要:

(1)保存的xlsmxlsb文件使用一個易於增加版本的加載項的名稱。

(2)添加下面的腳本到的ThisWorkbook,以確保您創建一個菜單欄打開工作簿時,當工作簿被激活:

Private Sub Workbook_Open() 
    Call CreateMenuBar 
End Sub 

Private Sub Workbook_Activate() 
    Call CreateMenuBar 
End Sub 

(3)創建一個新的模塊,並添加下面的代碼創建,刪除和更新菜單欄:

Option Explicit 
Sub CreateMenuBar() 

    Dim MenuObject As CommandBarPopup 
    Dim MenuItem As Object 
    Dim SubMenuItem As Object 

    'clear the old menu bar 
    Call DeleteMenuBar("&MyMenuBar") 

    'create the menu bar and drop down options 
    Set MenuObject = Application.CommandBars(1).Controls.Add(Type:=msoControlPopup, _ 
     before:=10, Temporary:=True) 
    MenuObject.Caption = "&MyMenuBar" 
    MenuObject.OnAction = "UpdateMenuBar" 

    'first level menu option 
    Set MenuItem = MenuObject.Controls.Add(Type:=msoControlPopup) 
    MenuItem.Caption = "&First Menu Stuff" 

     'link to first script 
     Set SubMenuItem = MenuItem.Controls.Add(Type:=msoControlButton) 
     SubMenuItem.Caption = "&First Script" 
     SubMenuItem.OnAction = "Script1" 

     'link to second script 
     Set SubMenuItem = MenuItem.Controls.Add(Type:=msoControlButton) 
     SubMenuItem.Caption = "&Second Script" 
     SubMenuItem.OnAction = "Script2" 

    'first level menu option 
    Set MenuItem = MenuObject.Controls.Add(Type:=msoControlPopup) 
    MenuItem.Caption = "&Second Menu Stuff" 

     'link to third script 
     Set SubMenuItem = MenuItem.Controls.Add(Type:=msoControlButton) 
     SubMenuItem.Caption = "&Third Script" 
     SubMenuItem.OnAction = "Script3" 

End Sub 

Sub DeleteMenuBar(MenuName As String) 
    On Error Resume Next 
    Application.CommandBars(1).Controls(MenuName).Delete 
    On Error GoTo 0 
End Sub 

Sub UpdateMenuBar() 
    'do special checks, like verifying sheets, in this routine 
End Sub 

(4)確認你的腳本工作,並保存文件。

(5)將該文件再次保存爲xlamxla文件,現在您的腳本已變得方便!

+0

謝謝丹,我會試試看。 – Stephan