【问题标题】:Excel vba 2013 not supporting thisworkbook.sheets syntaxExcel vba 2013 不支持 thisworkbook.sheets 语法
【发布时间】:2016-09-21 13:08:33
【问题描述】:

背景

我正在开发一个库存管理和员工时间跟踪工具,我在其中创建了几个选项卡,即登录面板、界面、参考选项卡等。 在此工具文件的 thisworkbook 模块的 VBA 编辑器中,我在 workbook_beforeClose 事件中编写了一个代码,该代码将隐藏所有工作表并使登录面板工作表在用户尝试关闭它时关闭之前可见。这是代码:-

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 ...) 上出现错误。 我发现的另一件令人惊奇的事情是,For each 循环的第一次迭代不会发生错误......它仅在到达 Next sht 命令行然后返回到第 5 行时才会发生。

谁能帮我解决这个错误并解释这里出了什么问题.... Excel VBA 2010 和 2013 之间是否存在任何兼容性问题。最后一件事是我还看到 ListView 控件在 2013 年不起作用但是它在 excel 2010 中运行良好。

请帮忙....

问候, 普雷曼舒

【问题讨论】:

  • 任何答案都解决了您的问题吗?

标签: excel listview vba


【解决方案1】:

你能切换到这个,看看它是否有帮助?

Private Sub Workbook_BeforeClose(Cancel As Boolean)
  Application.ScreenUpdating = False
  sht_LoginPanel.Visible = xlSheetVisible
  For Each sht In ThisWorkbook.Sheets
    If sht <> sht_LoginPanel Then
      sht.Visible = xlSheetHidden
    End If
  Next sht
  Application.ScreenUpdating = True
End Sub

关于兼容性问题,到目前为止我遇到的唯一向前兼容性问题是,在 64 位版本的 excel 2013(显然是 2016)中,activeX 对象会破坏任何引用它们的代码。显然他们不会得到支持。

【讨论】:

  • 我试过你的代码,它工作得很好。对于 activeX 控件,如果它们停止支持它们将非常糟糕。许多基于 excel 的工具都是基于它们的。
  • @Premanshu 谢天谢地,我们不久前决定停止使用它们。
【解决方案2】:

它适用于所有 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

【讨论】:

  • 嗨,Moos,非常感谢您的回复。但是我使用了 Brent 建议的代码,它运行良好。再次感谢。我真的很感激。
猜你喜欢
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多