我猜对 VBA 来说还是新手。我想制作一个按钮,一旦单击它就会打开一个对话框,让我将文件附加到我的电子表格上。我基本上记录了一个宏并在谷歌的帮助下编辑了代码。有用。唯一的问题是文件名在发生更改时会定期更新。一旦重命名,代码就会中断。
如果我理解的话,代码会链接到文件名和工作表名称。工作表不会改变,但文件名肯定会改变。有没有办法让代码独立于文件名?
Excel 文件位于共享驱动器上,其他人可以查看/编辑,因此最好制作一个任何人都可以使用的文件附加按钮
代码非常基础。在 Excel 上,打开 VisualBasic 窗口,然后在我想要的工作表选项卡的工作表上输入以下内容:
Sub AttachEmail()
Set myFile = Application.FileDialog(msoFileDialogOpen)
With myFile
.Title = "Choose File"
.AllowMultiSelect = False
If .Show <> -1 Then
Exit Sub
End If
FileSelected = .SelectedItems(1)
End With
ActiveSheet.OLEObjects.Add(Filename:=FileSelected, Link:=False, DisplayAsIcon:=False).Select
End Sub
来自 FileDialog 对象的文档:
每个主机应用程序只能创建一个实例 文件对话框对象。因此,FileDialog的许多属性 即使您创建多个 FileDialog 对象,该对象仍然存在。 因此,请确保正确设置所有属性 在显示对话框之前达到您的目的。
我怀疑,如果您的 Excel 实例没有关闭,则这些属性之一会持续存在(并在您第二次使用它时给出错误)。
InitialFileName
(我的重点):
如果指定无效路径,则使用上次使用的路径。 一条消息 当使用无效路径时警告用户。
我添加以下代码行以确保您始终获得有效值:
With myFile
.Title = "Choose File"
.AllowMultiSelect = False
'Add this.
.InitialFileName = ActiveWorkbook.Path 'Or ThisWorkbook.Path
请注意,如果工作簿尚未保存,则默认为用户的文档文件夹。
好吧,我弄清楚了,但搜索它并不有趣,所以因为这是第一个弹出的链接,我会在这里回答,也许可以帮助其他人更快地弄清楚。
问题在于 Excel 将宏操作保存为“file_path/file_name.xlms!macro_name”。因此,解决方案是通过“自定义功能区”然后“导入/导出”然后“导出所有自定义”来导出功能区自定义。然后用文本编辑器打开它。可选:创建一个新的 xml 文件,以便您可以以可读的方式对其进行格式化。然后,对于每个宏,找到它所在的 mso:tab 和 mso:group 并进行更改
<mso:button
idQ="x1:file_path/file_name.xmls!ThisWorkbook.macro_name_0"
label="Macro Label" imageMso="ImageMso"
onAction="file_path/file_name.xmls!ThisWorkbook.macro_name"
visible="true" />
对于
<mso:button
idQ="x1:ThisWorkbook.macro_name_0"
label="Macro Label" imageMso="ImageMso"
onAction="ThisWorkbook.macro_name"
visible="true" />
注意:“本工作簿”。可能存在也可能不存在,具体取决于您保存宏的位置。我已将其保存在“ThisWorkbook”中,而不是模块或工作表中。