Excel – VBA代码中断,如果我重命名我的Excel文件 – 有没有解决?

我猜测VBA是新的。 我想做一个button,一旦点击它将打开一个对话框,让我附加一个文件到我的电子表格。 我基本上logging了一个macros,并在谷歌的帮助下编辑了代码。 有用。 唯一的问题是文件名会在更改时经常更新。 一旦重命名代码中断。

如果我明白,代码链接到文件名和工作表名称。 工作表不会改变,但文件名肯定会。 有没有办法使代码独立于文件名?

excel文件在其他人可以查看/编辑的共享驱动器上,所以最好能制作一个文件附加button,任何人都可以使用

代码是非常基本的。 在Excel中,打开VisualBasic窗口,然后在我想要的工作表选项卡的表单上input以下内容:

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对象的文档 :

每个主机应用程序只能创build一个FileDialog对象的单个实例。 因此,即使创build多个FileDialog对象,FileDialog对象的许多属性仍然存在。 因此,在显示对话框之前,请确保已为所需目的适当地设置所有属性。

我怀疑,如果你的Excel实例没有closures,其中一个属性是持久的(并在第二次使用它时给出错误)。

根据您收到的消息最可能的候选人是InitialFileName (我的重点):

如果指定了无效path,则使用最后使用的path。 当使用无效path时,消息会警告用户

我会添加下面的代码行,以确保您总能得到一个有效的值:

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

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