在XLSX文档上使用Excel宏

时间:2014-05-20 09:28:31

标签: excel excel-vba xlsx vba

这是一个很长的问题,我害怕。

我们要求客户在excel文档中填写一些客户数据。这些数据以列(Id,Name,Phone等)分隔。我有一个隐藏的工作表,其中这些列标题映射到我们在数据库中使用的字段。出于安全原因,我不希望/不能将此文件作为启用宏的文档分发。但是当他们发回文件时我想在这个文件上执行一个宏,它将内容保存到CSV中,这样就可以在DB中导入这个文件了。

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

这是正确的处理方式吗?或者我应该使用不同的方法吗?

感谢您的帮助

[编辑] 顺便说一句,如果已经有了答案,我就找不到了。也许我没有使用正确的搜索字词。

1 个答案:

答案 0 :(得分: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文件,您现在可以轻松获取脚本了!