Screenupdating不翻转

时间:2012-10-18 15:08:38

标签: excel-vba excel-2007 excel-2010 vba excel

在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方法不能从True更改为False

3 个答案:

答案 0 :(得分:1)

您可以尝试删除条件并查看问题是否仍然存在。这就是你知道它是否与有条件或无条件或'val'有关的方式。

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

假设这会让你的错误消失,我会专注于通话......

DisableScreenUpdating(Application.ScreenUpdating)

也许这个错误与阅读ScreenUpdating属性有关,紧接着就是写。这只是一个猜测。

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

答案 1 :(得分: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

答案 2 :(得分: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