vba - Excel 2013 到 2010 与 ActiveX 的向后兼容性问题(不是 12 月 14 日更新问题)

标签 vba excel activex

我正在将一组使用 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/

相关文章:

ms-access - Excel 工作表名称不允许使用 VBA - DAO 将数据导入 Access

excel - 如果陈述让我难住了

excel - 如何在VBA中安排邮件发送到特定时间

c# - 如何在网站中部署 win32 dll 以便它可以在 activex 对象中使用?

c# - 如何检查我的应用程序是否安装在客户端机器上?

python - 如何从 Python 运行 Excel VBA/宏

vba - excel:比较日期的vba类型不匹配

excel - “Unable to set the Width property of the Range class”

excel - 我可以通过索引匹配或 Hlookup 从不同的工作表中提取迷你图吗

c++ - 如何使我的 C++ ActiveX 控件在 Excel 中很好地打印?