【发布时间】:2020-07-04 11:19:05
【问题描述】:
我遇到了一个问题,应该没什么大不了的,但即使看起来很简单,我也没有找到解决方法。
我有一个代码应该遍历文件夹中的文件并将其内容复制到 1 个最终文件中。
为避免屏幕闪烁,我在开始循环之前使用Application.ScreenUpdating = False,并在循环结束时将其恢复为 True。
我也在A1中写,“处理中请稍候”,循环结束时我清空A1。
我通过放置在 MySheet 上的活动 x 命令按钮调用函数 LoopThroughFiles。
问题是“A1”单元格上的消息并不总是出现!有时它会出现,有时它不会。大多数情况下,我第一次启动代码时它会出现,而不是在 3-4 次测试后它会停止出现,而不是在几次测试后它会再次出现,依此类推。这是随机的。 这是我注意到的:
如果我删除 Application.ScreenUpdating = False,它总是会出现。 如果我在 Application.ScreenUpdating = False 之前放置一个断点或一个消息框,它也总是出现。
我认为Application.ScreenUpdating = False,在A1.value =“Processing please wait”之后来得太快了,所以A1被填满了,但是Application.ScreenUpdating = False来得太快,所以在之前生效A1 的内容出现,屏幕不刷新。 我尝试在 Application.ScreenUpdating = False 之前放置一个 Doevents,但仍然存在同样的问题,知道如何解决这个问题并让 A1 内容始终出现在 Application.ScreenUpdating = False 之前?
这是我的代码的样子
Private Sub CommandButton1_Click()
Call LoopThroughFiles
End Sub
Public Function LoopThroughFiles() As String
'Declare Variables etc...
'I change the Value of A1
With ThisWorkbook.Sheets(MySheet).Range("A1")
.Font.Color = -16776961
.Font.Bold = True
.Value = "Processing, Please Wait ..."
End with
Application.ScreenUpdating = False
'MyLoop
'The Rest of code
Application.ScreenUpdating = True
'I clear A1
With ThisWorkbook.Sheets(MySheet).Range("A1")
.Value = vbNullString
.Font.ColorIndex = xlAutomatic
.Font.Bold = False
End with
End function
【问题讨论】: