1

在 Excel 2010 中,如下所述的方法,ScreenUpdating 工作正常。但在 2007 年,它没有翻转,并且工作表操作可以直观地看到。

VBA 用法:

Dim scrup As Boolean: scrup = DisableScreenUpdating(Application.ScreenUpdating)

方法声明:

Function DisableScreenUpdating(val As Boolean) As Boolean
   '''''''''''''''''''''''''''''''''''''''''''''''''
   ' Disable ScreenUpdating, for seemless operation
   If val Then
      Application.ScreenUpdating = False
   End If
   '''''''''''''''''''''''''''''''''''''''''''''''''

   DisableScreenUpdating = val
End Function

问题:

我在 2007 年缺少什么 2010 年假设或正常工作?

  • 仍在跟踪该错误,因为它仍在文件的 1 个版本上发生,但其他两个版本不会。这些版本都具有相同的代码库,但基于各种设置更改最终用户的表示。

笔记:

  • 请不要专注于“我为什么要这样做”,以及更多什么情况会导致 ScreenUpdating 方法不会从 更改TrueFalse.
4

3 回答 3

1

您可以尝试消除条件,看看问题是否仍然存在。这样你就会知道它是否与条件或'val'有关。

Function DisableScreenUpdating() As Boolean
  Application.ScreenUpdating = False
  DisableScreenUpdating = True
End Function

假设这会使您的错误消失,那么我将专注于通话....

DisableScreenUpdating(Application.ScreenUpdating)

也许这个错误与读取 ScreenUpdating 属性有关,然后是 write。这只是一个猜测。

另外,我会在您的项目中搜索 Application.ScreenUpdating 的任何其他用法。可能有一些其他代码导致更新返回 True。

于 2012-10-22T20:44:42.813 回答
0

我已经看到了这个错误......但是该语句有效,只有 VBA 编辑器没有看到更改。但是,您可以通过分配一个变量然后在 VBA 编辑器中读取它来查看更改。

    >Sub testing()
    >Dim i As Long
    >
    >Application.ScreenUpdating = False
    >i = Application.ScreenUpdating
    >MsgBox "Assigned to i...real value = " & CBool(i)
    >
    >Application.ScreenUpdating = True
    >i = Application.ScreenUpdating
    >MsgBox "Value of Application.ScreenUpdating = " & CBool(i)
    >End Sub
于 2013-02-18T17:54:15.907 回答
0

一方面,是否有启用 ScreenUpdating 的功能?您的代码只会禁用它。这是用我使用的代码修改的代码:

Dim scrup As Boolean: scrup = DisableScreenUpdating(Not Application.ScreenUpdating)

'Disable ScreenUpdating, for seemless operation
Function DisableScreenUpdating(val As Boolean) As Boolean
  With Application
    If .ScreenUpdating = val Then  'Gets rid of flashes for changing it to the same
      .ScreenUpdating = Not val
    End If

    'Doesn't matter what happens above, this is based on what Excel would send back
    DisableScreenUpdating = Not .ScreenUpdating
  End With
End Function
于 2012-10-18T18:23:09.993 回答