Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在XSLX文档上使用Excel宏_Excel_Xlsx_Vba - Fatal编程技术网

在XSLX文档上使用Excel宏

在XSLX文档上使用Excel宏,excel,xlsx,vba,Excel,Xlsx,Vba,恐怕这将是一个很长的问题 我们要求客户在excel文档中填写一些客户数据。此数据以列(Id、姓名、电话等)分隔。我有一个隐藏的工作表,其中这些列标题映射到我们在数据库中使用的字段。出于安全原因,我不希望/无法将此文件作为启用宏的文档分发。但是当他们发送回文件时,我想在这个文件上执行一个宏,它将内容保存到CSV中,这样这个文件就可以导入数据库 我正在考虑在PERSONAL.XSLB文件中创建宏,以便在返回的XSLX文件中使用它 这是正确的处理方式吗?或者我应该使用不同的方法 谢谢你的帮助 [编辑]

恐怕这将是一个很长的问题

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

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

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

谢谢你的帮助

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

这听起来像是一个
加载项的好机会
——我在这里写了一篇文章:

以下是VBA的简短摘要:

(1) 保存一个
xlsm
xlsb
文件,该文件的名称很容易根据外接程序的版本递增

(2) 将以下脚本添加到此工作簿中,以确保在打开工作簿和激活工作簿时创建菜单栏:

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) 将文件再次保存为
xlam
xla
文件,您现在就可以方便地使用脚本了

谢谢你,丹,我会试试的。