我正在将一组使用 VBA 代码进行查找、数据操作和计算的相互关联的 Excel 文档从 Excel 2010 转换为 Excel 365。我的开发机器上都有这两个文档,但是这些文档会(通过电子邮件)发送给各地的客户,然后返回.我使用 .xlmb 文件格式来节省文件大小,但这似乎不会影响结果。
目前的问题
当我在我的开发机器上使用 365 保存工作簿时,当从仅安装了 2010 的机器上运行运行我的 VBA 代码的操作时,用户会遇到错误(如果安装了两个版本,则该行为似乎不会发生)。我将问题集中在模块中有代码并且工作表上有 ActiveX 控件时。只有这种组合似乎会造成问题。
我创建的始终显示问题的测试文件/代码是一个模块中包含以下代码的工作簿:
Dim strBook As String
' Worksheet Names
Public Const wksTest = "Sheet1"
Public Function TestMe(PassedSheet As String)
strBook = ActiveWorkbook.Name
Workbooks(strBook).Worksheets(PassedSheet).Protect
Workbooks(strBook).Worksheets(PassedSheet).Unprotect
MsgBox "Worked from function", vbOKOnly, "Response"
End Function
和工作表中的代码。它使用此代码并选择单元格 B2 保护然后取消保护工作表,同时显示消息框:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Row = 2 And Target.Column = 2 Then
strBook = ActiveWorkbook.Name
Me.Protect
Me.Unprotect
MsgBox "Worked from sheet", vbOKOnly, "Response"
Call TestMe(wksTest)
End If
End Sub
但是,如果将名为“TestButton”的 ActiveX 命令按钮添加到 Sheet1 并添加以下代码:
Private Sub TestButton_Click()
strBook = ActiveWorkbook.Name
Me.Protect
Me.Unprotect
MsgBox "Worked from Button", vbOKOnly, "Response"
Call TestMe(wksTest)
End Sub
如果从 365 保存并在仅安装 2010 的计算机上使用 2010 打开,则该工作簿将不再起作用。
这是非常独特的,以至于很难测试。目前,我似乎唯一的选择是用表单控件替换我的所有命令按钮。这也是安全更新之外的一个单独问题(这确实使水变得困惑)。
我很想获得有关此问题的可能修复的反馈,甚至只是从其他人那里确认这是一个 Excel 问题,并且不限于我们的安装。
谢谢
最佳答案
我正在寻求有关类似问题的帮助,并在 Microsoft 帮助网站上偶然发现了此信息。如果这不能解决您遇到的问题,则可能是朝着正确方向迈出的一步:
“如果工作簿包含被认为初始化不安全 (UFI) 的 ActiveX 控件,则当您将工作簿保存为较早的 Excel 文件格式时,它们会丢失。您可能希望将这些控件标记为初始化安全 (SFI)。
怎么做:如果您打开一个包含未初始化 ActiveX 控件的工作簿,并且该工作簿设置为高安全性,您必须先使用消息栏启用它们,然后才能对其进行初始化。”
关于vba - Excel 2013 到 2010 与 ActiveX 的向后兼容性问题(不是 12 月 14 日更新问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28373463/