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

use*_*330 4 excel vba ribbon excel-2010 ribbon-control

我在 Excel 上创建了一个自定义功能区选项卡,例如Excel_app_v1.xlsm,并且此功能区选项卡下的按钮连接到宏。因此,当我单击此按钮时,宏会执行一些表导入应用程序。

第一件奇怪的事情是,我只为这个 Excel 文件创建了这个功能区选项卡和按钮,但功能区选项卡和按钮出现在所有其他 Excel 文件中,即使原始 Excel 文件Excel_app_v1.xlsm没有打开。

第二个问题是我使用“另存为”选项创建了先前 Excel 文件的第二个版本。所以新的 Excel 文件就像Excel_app_v2.xlsm. 当我单击功能区选项卡下的按钮时,它会打开第一个 Excel 文件Excel_app_v1.xlsm,即使它尚未打开。我删除了第一个 Excel 文件,但随后出现“无法Excel_app_v1.xlsm在路径上找到”之类的错误。

显然,自定义功能区选项卡下的宏按钮链接到第一个 Excel 文件,但我找不到更改此设置的菜单选项。我在vba代码中添加了ThisWorkbook所有sheet表达式,但并没有解决问题。单击按钮仍在尝试打开旧的 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
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

sum*_*gai 6

roncruiser 在下面发布了快速解决此问题的线索,但有一点小小的改动。

网络上的每个人似乎都觉得这PERSONAL.XLSB是关键——不。事实上,使用该文件只会让我困惑更长时间。这是我所做的:

  1. 右键单击功能区并选择自定义功能区;
  2. 使用按钮导航到您安装的有问题的宏;
  3. 找到并单击导入/导出;
  4. 导出您的自定义按钮(宏将正常运行);
  5. 打开生成的文件,并编辑掉对另一个文件的违规引用,这些引用给您带来了如此多的痛苦 - 例如:

    <mso:button idQ="x1:HideRows_0_EA10D6" label="HideRows" imageMso="_3DPerspectiveDecrease" onAction="!HideRows" visible="true"/>
    
    Run Code Online (Sandbox Code Playgroud)

    我取出了idQ-"x1...宏实际名称之后的所有内容。onAction="...我还取出了在Take everything up to the bang mark中找到的相同外部参考。

    将其保存在您想要的任何名称下,但具有相同的扩展名(对于我的设置,它被称为ExportedCustomizations.exportedUI(是的,那么长的扩展名));

  6. 在此处重复前几个步骤,但这次导入您编辑的文件。

  7. 瞧,一切都是金色的。

不必浪费时间清理现有工作并从头开始。对我来说很有魅力,所以给 roncruiser 一个很大的提示,以获取线索。