Excel问题“存储在已定义的名称中的excel 4.0函数”

我正在尝试隔离导致的问题

“以定义名称存储的excel 4.0函数”

我无法弄清楚的是这背后的原因。

保存期间的Excel问题

这个问题最近才开始到来,无法弄清楚为什么。

不要碰到一个旧的线程,但我也有同样的问题,并希望发布我的决议,以防其他人经历与我自己一样的事情。

我的问题最终是由MySQL Workbench软件包中包含的一个MySQL Excel COM插件引起的。 禁用该加载项导致macros提示在保存电子表格时消失。

对于我来说这个消息是由MySQL的Excel的COM加载项引起的。 当我卸载COM加载项时,消息停止显示。

已经指出的解决scheme是正确的:禁用MySQL的Excel的COM加载项。

该消息的原因是此加载项将隐藏名称添加到工作簿。 这些名称在Excel名称pipe理器中不可见。 但是,如果将此代码添加到工作簿模块,则可以在VBA直接窗口中看到它们:

Public Sub DEV_CheckNames() Dim n As name For Each n In ActiveWorkbook.Names If Not n.Visible Then Debug.Print n.NameLocal, n.RefersToLocal 'If you want to delete the name, uncomment this line: 'n.Delete End If Next End Sub 

结果(对于Excel 2013的德语实例):

 LOCAL_DATE_SEPARATOR =INDEX(ARBEITSBEREICH.ZUORDNEN(37);17) LOCAL_DAY_FORMAT =INDEX(ARBEITSBEREICH.ZUORDNEN(37);21) LOCAL_HOUR_FORMAT =INDEX(ARBEITSBEREICH.ZUORDNEN(37);22) LOCAL_MINUTE_FORMAT =INDEX(ARBEITSBEREICH.ZUORDNEN(37);23) LOCAL_MONTH_FORMAT =INDEX(ARBEITSBEREICH.ZUORDNEN(37);20) LOCAL_MYSQL_DATE_FORMAT =WIEDERHOLEN(LOCAL_YEAR_FORMAT;4)&LOCAL_DATE_SEPARATOR&WIEDERHOLEN(LOCAL_MONTH_FORMAT;2)&LOCAL_DATE_SEPARATOR&WIEDERHOLEN(LOCAL_DAY_FORMAT;2)&" "&WIEDERHOLEN(LOCAL_HOUR_FORMAT;2)&LOCAL_TIME_SEPARATOR&WIEDERHOLEN(LOCAL_MINUTE_FORMAT;2)&LOCAL_TIME_SEPARATOR&WIEDERHOLEN(LOCAL_SECOND_FORMAT;2) LOCAL_SECOND_FORMAT =INDEX(ARBEITSBEREICH.ZUORDNEN(37);24) LOCAL_TIME_SEPARATOR =INDEX(ARBEITSBEREICH.ZUORDNEN(37);18) LOCAL_YEAR_FORMAT =INDEX(ARBEITSBEREICH.ZUORDNEN(37);19) 

点击加载项(打开任务窗口)的button时,这些名称将被添加到活动工作簿中。 不幸的是,我还没有发现为什么MySQL加载项有时自己添加这些名称而不被激活。

补充 :这是MySQL for Excel加载项中的一个已知的bug,从http://bugs.mysql.com/bug.php?id=73467开始

我在Excel 2013中遇到了同样的问题,并通过卸载MySQL Add来解决 – 我通过转到FILE – OPTIONS – Add Ins

就像在ChipsLetten的回答中一样,我的计算机上也有同样的解决scheme:在保存一些(实际上是免费的)工作簿时,我得到一个警告“存储在已定义名称中的Excel 4.0函数”,以及将工作簿保存为“已启用macros”的选项。 在closures“MySQL for Excel”COM加载项时,警报不再出现。

为了禁用“MySQL for Excel”加载项(如果你曾经安装过):选项卡“开发者”,然后button“COM加载项”,你会得到一个你可以启用的加载项列表或禁用每个刻度线。

你有没有安装一些连接器的Excel ?,也许这是造成这个问题,只是卸载它,错误将消失。

如果您有domke咨询的答案中所述的具有隐藏范围的工作表,则可以使用以下代码将其删除:

 Public Sub Remove_Hidden_MySQL_Names() Dim n As Name For Each n In ActiveWorkbook.Names If Not n.Visible Then 'Delete Names added by MySQL for Excel add-in If (InStr(n.NameLocal, "LOCAL_") <> 0 And (InStr(n.NameLocal, "_FORMAT") <> 0 Or _ InStr(n.NameLocal, "_SEPARATOR") <> 0)) Then Debug.Print "Would delete", n.NameLocal, n.RefersToLocal 'If you want to delete the name, uncomment this line: 'n.Delete Else Debug.Print "Keeping", n.NameLocal, n.RefersToLocal End If End If Next End Sub