这是一个很长的问题,我害怕。
我们要求客户在excel文档中填写一些客户数据。这些数据以列(Id,Name,Phone等)分隔。我有一个隐藏的工作表,其中这些列标题映射到我们在数据库中使用的字段。出于安全原因,我不希望/不能将此文件作为启用宏的文档分发。但是当他们发回文件时我想在这个文件上执行一个宏,它将内容保存到CSV中,这样就可以在DB中导入这个文件了。
我正在考虑在PERSONAL.XSLB文件中创建宏,以便我可以在返回的XSLX文件上使用它。
这是正确的处理方式吗?或者我应该使用不同的方法吗?
感谢您的帮助
[编辑] 顺便说一句,如果已经有了答案,我就找不到了。也许我没有使用正确的搜索字词。
答案 0 :(得分:1)
对于Add-in
来说这听起来很棒 - 我在这里写了一篇关于它的帖子:How to make a reusable button from a macro?
以下是VBA的简短摘要:
(1)保存xlsm
或xlsb
文件,其名称对于加载项的版本而言很容易递增。
(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)将文件再次保存为xlam
或xla
文件,您现在可以轻松获取脚本了!