我正在尝试隔离导致的问题
Excel 4.0 函数存储在定义的名称中。
不要碰旧线程,但我也遇到了同样的问题,并想发布我的解决方案,以防其他人遇到与我相同的事情。
我的问题最终是由 MySQL Workbench 包中包含的一个组件 MySQL Excel COM 插件引起的。禁用该插件会导致宏提示在保存电子表格时消失。
对我来说,这条消息是由 MySQL For Excel COM 加载项引起的。当我卸载 COM 加载项时,该消息停止出现。
已经指出的解决方案是正确的:禁用 MySQL for Excel COM 插件。
该消息的原因是此加载项将隐藏名称添加到工作簿。这些名称在 Excel 名称管理器中不可见。但是,如果将此代码添加到工作簿模块,则可以在 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)
在您单击加载项按钮(打开任务窗格)时,这些名称将添加到活动工作簿中。不幸的是,我还没有发现为什么 MySQL 插件有时会自行添加这些名称而没有被激活。
补充:这是 MySQL for Excel 加载项中的一个已知错误,截至http://bugs.mysql.com/bug.php?id=73467
我在 Excel 2013 中遇到了同样的问题,通过卸载 MySQL 插件解决了这个问题 - 我通过转到文件 - 选项 - 插件来解决这个问题
创建以下定义的名称后,我遇到了此警告:
姓名: wsNamesArray
指: =RIGHT(GET.WORKBOOK(1),LEN(GET.WORKBOOK(1))-FIND("]",GET.WORKBOOK(1)))
此公式返回一个数组,其中包含工作簿中每个工作表的名称。我用它来返回各种工作表的名称(第一张、最后一张、上一张和下一张)。
问题是这个公式使用了GET.WORKBOOK
Excel 4 函数。据我了解,这类似于嵌入在函数中的 VBA 宏。要保存该功能,Excel 工作簿必须以允许宏的格式保存,例如 .xlsm 或 .xlsb(或任何其他几种文件类型)。
我的选择是删除包含 Excel 4 函数的已定义名称,或者将已定义名称替换为没有 Excel 4 函数的公式,
正如 ChipsLetten 的回答,在我的计算机上使用相同的解决方案:在保存一些(实际上是无宏的)工作簿时,我收到一个警报“Excel 4.0 函数存储在定义的名称中”,以及一个将工作簿保存为“启用宏”的选项。在停用“MySQL for Excel”COM-Add-in 时,警报不再出现。
为了禁用“MySQL for Excel”插件(如果你曾经安装过它):选项卡“开发人员”,然后按钮“COM插件”,你会得到一个插件列表,你可以启用或每个刻度线禁用。
您是否为 excel 安装了一些连接器?,也许这是导致问题的原因,只需将其卸载,错误就会消失。
对我来说,在 2020 年,这个问题是由于您想将其保存为.xlsx
格式而引起的。它需要保存在一个.xls
.xlsm
或.xlsb
文件中,这是启用宏的文件。.xlsm
是首选。
如果您有 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