在VBA子活动时,文本框不被更新

我有一个包含几个文本控件的“main”表单中的大单元格。 这些链接到工作表“Refs”中的命名单元格。 在“main”中有一个启动VBA子的button。

在开始时,子…

Application.ScreenUpdating = False Application.DisplayAlerts = False Application.Calculation = xlCalculationManual 

那么它会更新表单“Refs”中名称后面的单元格。每个更新都被包围

 Application.ScreenUpdating = True Application.Calculation = xlCalculationAutomatic RefsSheet.Cells(row_downldstat, col_downldstat) = state Application.ScreenUpdating = False Application.Calculation = xlCalculationManual 

VBA sub需要一段时间才能完成,所以我们的想法是向用户提供反馈意见。 不幸的是,文本框不会更新,直到VBA子返回。

如果我把公式= Down_State放在“main”工作表的一个单元格中,我会在VBA例程运行时看到它更新。 Down_State与RefsSheet.Cells(row_downldstat,col_downldstat)是同一个单元格。 我不喜欢使用这种方法,因为有几个文本框,整个想法是从这样的devise迁移。

请注意,文本框只是在一个单元格中,而不是一个表单。

我知道application.statusbar,但这不是很明显。

如何在VBA子版本处于活动状态时更新这些文本框?

改变你的UpdateStatus到这个。

 Sub UpdateStatus(state As String) Application.ScreenUpdating = True Application.Calculation = xlCalculationAutomatic RefsSheet.Cells(row_downldstat, col_downldstat) = state Wait 1 Application.ScreenUpdating = False Application.Calculation = xlCalculationManual Application.DisplayStatusBar = True Application.StatusBar = state End Sub 

在上面添加这个新的子。

 Private Sub Wait(ByVal nSec As Long) nSec = nSec + Timer While nSec > Timer DoEvents Wend End Sub 

现在testing它;)

我不确定这是不是你正在寻找的东西:

你说

这个想法是向用户提供反馈意见

如果你不能让单元格更新,也许创build一个在运行代码时出现的用户表单可能是有用的。

这里是一个你可以使用的用户表单types的链接,它只是显示一个进度条(当你做了很多循环时,这是最容易使用的,但是只要你不关心,就可以用在线性代码中关于百分比准确度)

http://spreadsheetpage.com/index.php/tip/displaying_a_progress_indicator/

从链接:

  PctDone = Counter / (RowMax * ColMax) With UserForm1 .FrameProgress.Caption = Format(PctDone, "0%") .LabelProgress.Width = PctDone * (.FrameProgress.Width - 10) End With 

“DoEvents声明负责表单更新DoEvents

如果你想你可以编辑用户窗体和代码来简单地更新

  .frameprogress.caption =format(pctdone, "0%") 

  .frameprogress.caption = "String of desired text" 

这是一种方式,您可以让用户反馈一个子正在运行,但它可能不是您的需求最佳