Excel - 如果我重命名 Excel 文件,VBA 代码会中断 - 有解决办法吗?

问题描述 投票:0回答:2

我猜对 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
vba excel macros filenames
2个回答
1
投票

来自 FileDialog 对象的文档

每个主机应用程序只能创建一个实例 文件对话框对象。因此,FileDialog的许多属性 即使您创建多个 FileDialog 对象,该对象仍然存在。 因此,请确保正确设置所有属性 在显示对话框之前达到您的目的。

我怀疑,如果您的 Excel 实例没有关闭,则这些属性之一会持续存在(并在您第二次使用它时给出错误)。

根据您收到的消息,最有可能的候选人是

InitialFileName
(我的重点):

如果指定无效路径,则使用上次使用的路径。 一条消息 当使用无效路径时警告用户

我添加以下代码行以确保您始终获得有效值:

With myFile
    .Title = "Choose File"
    .AllowMultiSelect = False
    'Add this.
    .InitialFileName = ActiveWorkbook.Path  'Or ThisWorkbook.Path

请注意,如果工作簿尚未保存,则默认为用户的文档文件夹。


0
投票

好吧,我弄清楚了,但搜索它并不有趣,所以因为这是第一个弹出的链接,我会在这里回答,也许可以帮助其他人更快地弄清楚。

问题在于 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”中,而不是模块或工作表中。

© www.soinside.com 2019 - 2024. All rights reserved.