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

时间:2015-11-12 14:35:39

标签: excel excel-vba excel-2010 ribbon ribbon-control vba

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

第一件奇怪的事情是我创建了此功能区选项卡和仅用于此Excel文件的按钮,但功能区选项卡和按钮显示在所有其他Excel文件中,即使原始Excel文件Excel_app_v1.xlsm不是开。

第二个问题是我使用" Save-as"创建了我以前的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

enter image description here

2 个答案:

答案 0 :(得分:1)

快速解决这个问题的线索由roncruiser发布在下面,稍作扭曲。

网络上的每个人似乎都认为PERSONAL.XLSB是关键所在 - 不。事实上,玩这个文件只会让我感到困惑甚至更长时间。这就是我做的事情:

  1. 右键单击功能区并选择“自定义功能区”;
  2. 导航到使用按钮安装的违规宏;
  3. 查找并单击“导入/导出”;
  4. 导出您的自定义按钮(宏将顺利进行);
  5. 打开生成的文件,编辑出导致你如此悲痛的另一个文件的违规引用 - 例如:

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

    我在idQ-"x1...之后取出了所有内容,直到宏的实际名称。我也在onAction="...中找到了相同的外部参考文献。把所有东西都拿到了爆炸标记上。

    将此保存在您希望的任何名称下,但使用相同的扩展名(对于我的设置,它被称为ExportedCustomizations.exportedUI(是的,那么长的扩展名));

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

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

  8. 不要乱用现有的工作并从头开始。为我带来了一种魅力,所以对于线索来说,这是一个重要的提示。

答案 1 :(得分:0)

只是要确认上面写的总结。

就像他说的那样,它工作得很好:删除指向特定工作簿的“ x1:”之后的部分,直到maccro名称的开头。 例如: 当您导出带有maccro的自定义功能区时,其内容将如下所示: idQ =“ x1:C:_FolderName_Filename.xlsm_Fill_Formulas_Cells”

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

idQ =“ x1:Fill_Formulas_Cells”

与onAction相同,仅保留Maccro名称 然后,只要您修改了宏的名称,然后您必须在exportedUI文件中对其进行修改,只要您在工作簿中的宏名称保持一致,它就可以完美地工作。

然后,当您重新加载新文件时,如果将指针放在上面,则可以在“自定义”按钮上的“ Excel选项”自定义功能区中签入,您将看到“ Maccro:您的Maccro名称”

不是maccro的文件路径。

至少不必为此使用自定义UI编辑器或其他任何东西,例如,个人宏,如果您不介意在所有woorkbook中安装自定义功能区。

很明显,但仍要提醒一下,您需要在工作簿中包含该宏,此过程仅在此位置以调用与该工作簿相关的宏,它不包含该宏的代码

欢呼 罗曼(Romain)