背景
我正在开发一个库存管理和员工时间跟踪工具,我在其中创建了几个选项卡,即登录面板,界面,参考选项卡,......等。 在此工具文件的thisworkbook模块的VBA编辑器中,我在workbook_beforeClose事件中编写了一个代码,该代码将隐藏所有工作表,并在用户尝试关闭它之前使Login Panel工作表可见。这是代码: -
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.ScreenUpdating = False
sht_LoginPanel.Visible = xlSheetVisible
For Each sht In ThisWorkbook.Sheets
If sht.Name <> "Login Panel" Then
sht.Visible = xlSheetHidden
End If
Next sht
Application.ScreenUpdating = True
End Sub
问题
上面这段代码是用MS Excel 2010编写的,一切正常。但是,当我在具有MS Excel 2013的计算机上使用此工具时,相同的上述代码在第5行(如果sht.Name&lt;&gt; ...)上给出了错误。 我抓到的另一件令人惊奇的事情是,对于每个循环的第一次迭代都不会发生错误......只有当它到达 Next sht 命令行然后返回到第5行时才会发生。
任何人都可以帮我解决这个错误并解释这里有什么问题....还有Excel VBA 2010和2013之间的任何兼容性问题。还有一件事我也看到ListView控件在2013年不起作用在excel 2010中,它的工作非常好。
请帮忙......
此致 Premanshu
答案 0 :(得分:0)
你能切换到这个并看看它是否有帮助?
auto element = a[0];
关于兼容性问题,到目前为止我唯一遇到的向前兼容性问题是,在64位版本的excel 2013(显然是2016年)中,activeX对象会破坏引用它们的任何代码。显然他们不会得到支持,或者其他什么。
答案 1 :(得分:0)
它适用于所有Excel版本2010,2013和2016.但是:如果没有名为“登录面板”的工作表,您将尝试隐藏所有不可能的工作表,至少有一张工作表未被隐藏。此外,我强烈建议初始化变量并使用缩进 - 使生活和维护更容易。此代码适用于所有Excel平台 - 我已经尝试过:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
' create variables with data type
Dim sht As Worksheet
Dim sht_LoginPanel As Worksheet
Application.ScreenUpdating = False
Set sht_LoginPanel = ThisWorkbook.Sheets("Login Panel")
sht_LoginPanel.Visible = xlSheetVisible
For Each sht In ThisWorkbook.Sheets
If sht.Name <> "Login Panel" Then
' prevents an error if you try to hide the last worksheet
On Error Resume Next
sht.Visible = xlSheetHidden
' go back to normal error handling
On Error GoTo 0
End If
Next sht
Application.ScreenUpdating = True
End Sub