自定义功能区选项卡下的宏按钮尝试打开旧的Excel文件

3
我在Excel中创建了一个自定义的选项卡,如文件Excel_app_v1.xlsm所示,并且在该选项卡下创建了一个按钮来连接宏。因此,当我点击此按钮时,宏会执行一些表格导入应用程序。
第一个奇怪的事情是,我仅为此Excel文件创建了此选项卡和按钮,但是即使原始Excel文件Excel_app_v1.xlsm未打开,选项卡和按钮也会出现在所有其他Excel文件中。
第二个问题是,我使用“另存为”选项创建了我以前的Excel文件的第二个版本。因此,新的Excel文件就像Excel_app_v2.xlsm一样。当我单击选项卡下的按钮时,它会打开第一个Excel文件Excel_app_v1.xlsm,即使它没有打开。我删除了第一个Excel文件,但是然后出现了错误,如“在路径上找不到Excel_app_v1.xlsm”。
显然,自定义选项卡下的宏按钮链接到第一个Excel文件,但我找不到更改此内容的菜单选项。我在vba代码中的所有sheet表达式之前添加了ThisWorkbook,但无法解决问题。单击按钮仍然尝试打开旧的Excel文件。
以下是VBA代码。按钮链接到Sub ImportTable。首先询问用户是否要继续该过程。在单击按钮后立即打开以前的Excel文件,同时出现消息框。
Sub ImportTable()

  Application.ScreenUpdating = False
  YearMonth = ThisWorkbook.Sheets("tab1").Cells(11, 2).Value
  ' The Macro button opens the previous Excel file before clicking Yes or No on the message box
  answer = MsgBox("Warning! Brings the newest source file. You want to continue?", vbYesNo + vbQuestion, "")

  If answer = vbYes Then

     RunSASCodeViaBatFile  ' Another Sub which runs bat file to run a SAS-code. But it doesn't matter. Because the problem happens before I click on Yes or No.  
     InsertSASFileIntoExcel

   Else  ' Nothing happens if clicking No on the Message Box
   End If

End Sub

enter image description here


@Davesexcel,我编辑了我的问题,并添加了“main”Sub过程,当您单击按钮时,宏将进入该过程。 - user3714330
你能逐步执行代码并查看它何时转到不同的工作簿吗?当你在VB编辑器中时,按F8逐步执行代码。 - Davesexcel
@Davesexcel 在调试时它正常工作。当我在自定义功能区中点击按钮时,它打开了以前的工作簿。由于某种原因,当我使用“另存为”创建新工作簿时,它复制了所有内容,甚至是宏按钮,但该按钮链接到原始工作簿。 - user3714330
4个回答

5

下面由roncruiser发布的提示可以快速解决这个问题,但有一个小小的转折。

网络上似乎每个人都认为PERSONAL.XLSB是关键所在,但事实并非如此。实际上,调整该文件只会让我更加困惑。这是我所做的:

  1. Right click the Ribbon and select Customize The Ribbon;
  2. Navigate to the offending macros that you've installed with buttons;
  3. Find and click on Import/Export;
  4. Export your custom buttons (the macros will go right along just fine);
  5. Open that resulting file, and edit out the offending references to the other file that's causing you so much grief — example:

    <mso:button idQ="x1:HideRows_0_EA10D6" label="HideRows" imageMso="_3DPerspectiveDecrease" onAction="!HideRows" visible="true"/>
    

    I took out everything after idQ-"x1... up to the actual name of the macro. I also took out the same external reference found in onAction="... Take everything up to the bang mark.

    Save this under whatever name you wish, but with the same extension (for my setup, it was called ExportedCustomizations.exportedUI (yes, that long an extension));

  6. Repeat the first few steps here, but this time import your edited file.

  7. Voila, all is golden.

不需要删除现有的工作并重新开始。这对我非常管用,所以向roncruiser致以大大的敬意。


谢谢Nathan找到并展示了那个内联代码。下次我发帖时,我会自己想办法解决它。(读作:我会先查看帮助文件。) - sumgai
对于我的 Office 2016,它可以正常运行。谢谢!我想在第4步中添加更多信息。选择“导出所有自定义”后,您将获得一个扩展名为“ExportedCustomizations.exportedUI”的文件。您需要右键单击该文件并使用任何文本编辑器打开它,例如Notepad ++。之后,您可以像@sumgai上面提到的那样编辑引用。 - hoang tran
非常感谢您!!!这让我疯狂了两个星期。我正在使用一个Excel插件文件(.xlam),其中包含一个自定义的功能区控件,我已经将其从早期版本的Excel中的旧命令栏转换过来。当我将“源” .xlsm保存为Add-In文件时,工具栏上的宏按钮总是引用源.xlsm文件,我无法弄清楚该引用发生在哪里。我只是在导出的UI文件中进行了“xlsm”到“xlam”的搜索和替换,重新导入后问题就解决了。巨大的解脱! - rickj_65

0

仅确认sumgain上面所写的内容。

它完美地工作,只需按照他所说的做:删除“x1:”后面指向特定工作簿的部分,直到宏名称的开头。 例如: 当您导出带有附加宏的自定义功能区时,它将写成以下形式: idQ="x1:C:_FolderName_Filename.xlsm_Fill_Formulas_Cells"

然后您删除提到的部分,它将变成这样:

idQ="x1:Fill_Formulas_Cells"

对于onAction也是一样,只保留宏名称 只要您在工作簿中的宏名称保持一致,它就可以完美地工作,如果您修改了宏名称,则必须在导出的UI文件中进行修改。

然后,当您重新加载新文件时,您可以在Excel选项自定义功能区上的自定义按钮上检查,如果您将指针放在上面,您将看到“宏:您的宏名称”,而不是文件路径。

至少对于那个,您不需要使用自定义UI编辑器或任何其他东西,例如个人宏,如果您不介意在所有工作簿中都有自定义功能区。

虽然这很明显,但还是值得提醒一下,您需要在工作簿中拥有宏,此过程仅用于调用与工作簿相关联的宏,不包含宏的代码。

祝好 Romain


0

这个还能用吗?我以前成功地做过这个,但现在似乎无法让它工作。 我导出文件,编辑它,然后再导入回去。 看起来它是可以工作的,但当我关闭功能区选项窗格时,我的自定义按钮就消失了。


-1

我也遇到过同样的问题。不过有一种方法可以解决。

默认情况下,当你在Excel中创建宏并通过自定义功能区按钮运行该宏时,该功能区按钮宏仅在包含它的工作簿中有效。

为了解决这个问题,并使按钮宏在所有工作簿中起作用,你需要创建一个个人宏工作簿。然后,在计算机上存储在个人工作簿中的任何宏都可以在你在同一台计算机上启动Excel时的任何工作簿中使用。

创建个人宏工作簿

为了使相同的功能区按钮宏在另一台计算机上工作,你需要将个人宏工作簿复制到另一台计算机并将其存储在XLSTART文件夹中。上面的链接包含了你需要的所有信息。

注意:删除旧的功能区按钮宏。确保你创建引用个人宏工作簿中的宏的新功能区按钮宏。


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