【发布时间】:2015-02-06 19:39:02
【问题描述】:
我正在将一组使用 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 问题,并且不限于我们的安装。
谢谢
【问题讨论】: