在Excel中使用VBA自定义功能区(Ribbon)

5
我已经学习到,在Excel中创建自定义选项卡在this帖子中不可能实现!(与MSProject不同)
具体来说,我能否更改宏的路径以适应当前位置?
编辑 看起来这个page可能会导致答案,但我仍然不知道如何操作。
对于情况的更详细描述:
用户将下载一个文件,其中包含材料、设备、劳动力的列表。每一列都包含有关数量、定价等方面的信息。 当用户单击我想要创建的按钮时(我已经手动创建了),另一个工作簿中的名为“Main”的宏将启动并将整个工作表(内容)复制到自身,并对其执行一些程序所需的操作。
当我向客户发送新版本时,我面临的问题是,他必须将其放置在正确的位置才能正常使用。由于涉及Mac和Windows计算机的混合,我更愿意看到一个情况,即将按钮分配给用户打开包含代码的工作簿B的过程。
这样,只需要打开一次新版本,然后进行连续使用,用户可以打开下载的文件,单击适当的按钮,工作簿B将自行打开并执行。
也许还有其他方法来解决这个问题。我还没有检查是否更容易将按钮分配给快速访问工具栏...

1
“宏的路径”是什么意思? - Mathieu Guindon
Ribbon 中的图标/按钮指向 Excel 文件中的宏,位置/路径是我分配它们时指定的。但是当用户从另一个目录(例如“下载”)打开相同的文件并尝试使用按钮运行宏时,它仍然指向先前的文件,因此宏的路径也是如此。我想有更好的方法来解释这个问题 :) - oneindelijk
把它们分组到一个插件中会不会更简单呢? - Mathieu Guindon
嗨,retailcoder,一个插件可以被嵌入到特定的Excel文件中吗?(它是一个xlsm文件) - oneindelijk
1个回答

9

这是我用来添加自定义工具栏的代码:

Set cbToolbar = Application.CommandBars.Add(csToolbarName, msoBarTop, False, True)

With cbToolbar
    Set ctButton1 = .Controls.Add(Type:=msoControlButton, ID:=2950)
    Set ctButton2 = .Controls.Add(Type:=msoControlButton, ID:=2950)
    Set ctButton3 = .Controls.Add(Type:=msoControlButton, ID:=2950)
End With

With ctButton1
    .Style = msoButtonIconAndCaption
    .Caption = "Set &Picklists"
    .FaceId = 176
    .OnAction = "SetPicklist"
End With

With ctButton2
    .Style = msoButtonIconAndCaption
    .Caption = "Set &Defaults"
    .FaceId = 279
    .OnAction = "SetDefaults"
End With

With ctButton3
    .Style = msoButtonIconAndCaption
    .Caption = "&Visibility Settings"
    .FaceId = 2174
    .OnAction = "VisibilitySettings"
End With


With cbToolbar
    .Visible = True
    .Protection = msoBarNoChangeVisible
End With

'OnAction'控制运行的宏... 如果你想要将其扩展为在特定工作簿上运行宏,请使用“whatever.xls!MacroName”


还是可以使用"'"和thisworkbook.name&"'!MacroName"吗?(这是双引号内的单引号...然后感叹号前面是单引号) - Simon
3
虽然在Excel 2007+中这个方法可行,但是CommandBars并不能真正地自定义Ribbon。要真正自定义Ribbon,需要使用CustomUI XML编辑器修改工作簿的XML。 - David Zemens

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接