View Single Post
  #11   Report Post  
Posted to microsoft.public.excel.programming
Jeffrey Marcus Jeffrey Marcus is offline
external usenet poster
 
Posts: 2
Default VBA message box to inform user that Excel is still calculating

Application.EnableCancelKey = xlDisabled

oh yes, a glorious day. I stumbled upon this and it works!

On Feb 22, 8:46*am, Jeffrey Marcus wrote:
Hi, I am having a similar issue.

I want to prevent the user from interrumpting the
"application.calculate" command.

Auto calc is off to start, in the button, I set it to manual and save
the current calc mode state. *Throughout the subroutnie in the button
I execute application.calcualte several times and they can take a few
minutes. *The issues that if the user click the sheet during this
application.calculate the application stops the calculate and
continues to the next statement.

Dan, *Did you ever settle on a good fix for this?

Thanks,
Jeff

On Feb 18, 3:24*pm, Ryan H wrote:



Since I can't see your situation I am left to guessing. *Give this situation
a try.


1. *Set Calculate Mode to Manual for the Workbook.
2. *Put this code in the worksheet module the pivot table is located. *I
assume the name of your pivot table is "PivotTable1". *This code will fire
each time the pivot table is updated.


Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
* * If Target.Name = "PivotTable1" Then UserForm1.Show
End Sub


3. *Put this code in the Userform module. *The code will now manually
calculate your workbooks. *And Excel will test if it is still calculating
every 1 second. *If its not, it should unload the userform.


Private Sub UserForm_Initialize()
* * Application.Calculate
* * Call WaitTimer
End Sub


Private Sub WaitTimer()


* * If Application.CalculationState < xlDone Then
* * * * Application.OnTime EarliestTime:=Now + TimeValue("00:00:01"), _
* * * * * * * * * * * * * * Procedu="WaitTimer", Schedule:=True
* * Else
* * * * Unload UserForm1
* * End If


End Sub


4. *And yes, I guess you could say we get points. *I have helped over 100
people so I get this nice little silver medal next to my name. *The next step
is a gold medal, but I must help 500 people. *Hope this helps! *If so, let me
know, click "YES" below.


--
Cheers,
Ryan


"Dan" wrote:
Hi Ryan,


My workbook will calc, then show the UserForm, then calc again...and again. *
I have to manually get rid of the UserForm (however, Excel continues to
calc). *There are a few worksheets in the workbook with formulas, so I'm not
sure if that makes a difference.


I really can't send you the file as it contains confidential info. *Unless
you have any more suggestions, I guess that I'll have to throw in the towel
on this one. *I'll check back just in case, but if you want to move onto
other posts, then I'll say thanks for all of your time. *


I'm also not sure if you get points when people hit the 'yes', but I will as
a thanks for your time & effort.


Thanks again,


Dan


"Ryan H" wrote:


Excel must be calculating before it shows the userform. *I'm not sure if we
can stop that. *Give this a try. *This set of code will turn off calculation
mode, show your userform, calculate, then unload the userform (in theory).


Private Sub Worksheet_Calculate()
* * Application.Calculation = xlCalculationManual
* * UserForm1.Show
End Sub


Private Sub UserForm_Initialize()


* * Application.Calculate
* * Do
* * * * If Application.CalculationState = xlDone Then
* * * * * * Application.Calculation = xlCalculationAutomatic
* * * * * * Unload UserForm1
* * * * * * Exit Do
* * * * End If
* * Loop


End Sub


If this doesn't work send me an e-mail to with your
workbook and I will take a look at it. *I may be able to turn off calculation
mode to the workbook and take advantage of some pivot tabel events. *Hope
this helps! *If so, let me know, click "YES" below.
--
Cheers,
Ryan


"Dan" wrote:


Hi Ryan,


Thanks again for all of your help with this - I do have a follow-up though:


The macro that you wrote worked great except that it only fires once
calculation is complete (so the window pops-up just after calculation stops).
*My goal is to get the window to pop-up once calculation starts and then go
away after it stops so the user doesn't start clicking on the worksheet and
interrupt the calc process. *Is there some way to start the userform when
calculation state = xlpending or xlcalculating? and then have it stop once
calculation is complete?


Again - I appreciate all of your time!


Thanks,


Dan


"Ryan H" wrote:


You should be able to accomplish what you are looking for using a Userform. *
I will assume you just have a Label on the userform that says, "Excel is
still calculating...Please Wait." or something like that. *Since I can't
duplicate your pivot table situation I was not able to test this code. *So
let me know if you have any issues. *Please give specifics of the errors if
any. *Let me know if this helps, click "YES" below.


Put this in the worksheet that is being calculated. *This code will show the
userform when the worksheet beings to calculate.


Private Sub Worksheet_Calculate()
* * UserForm1.Show
End Sub


Put this in the userform module. *This code will fire when the userform is
shown. *It will continue the loop until Excel is done calculating.


Private Sub UserForm_Activate()


* * Do
* * * * If Application.CalculationState = xlDone Then
* * * * * * Unload UserForm1
* * * * * * Exit Do
* * * * End If
* * Loop


End Sub


--
Cheers,
Ryan


"Dan" wrote:


Hi Ryan,


Thanks for the reply - I appreciate it. *The reason behind my original
question is a pretty sizable model that I have built around a couple of data
sources that link to a data warehouse (downloaded into Pivot and data tables
within the model). *The model takes raw data from numerous sources and
combines it into a simple user-friendly analytical format that the user can
manipulate via simple drop-downs. *Given the amount of data involved, a
couple of the user selections on the Dashboard tab require about 10-20
seconds for Excel to calculate. *However, users are sometimes too impatient
and will start clicking on the worksheet if the calc is not instantaneous,
which will interrupt the calculation process. *Hence, my desire to have a
window pop-up that informs the user that calculation is going on and to be
patient (the Excel status bar in the lower-right hand corner is not obvious
enough). *I have discovered the following VBA code (see below) that initiates
a pop-up window upon calculation, however, I cannot get the window to
disappear once calculation stops (have tried a few IF THEN statements, but in
vain) - the only way to get rid of it with the code below is to manually
close it, which i do not want the user to have to do...


Private Sub Worksheet_Calculate()
* * msg = "Calculating...Please Wait"
* * MsgBox msg
* * Do
* * Loop Until Application.CalculationState = xlDone '
*End Sub


Is there a way to get the message box to automatically go away once
calculation has stopped?


Also, I have created a UserForm (UserForm1) to replace the message box (so I
can format it), however, i cannot get the message to show-up in the user
form, only the UserForm itself - can you help?


Thanks in advance!


Dan


"Ryan H" wrote:


Excel should not take but a second to calculate everything. *I'm not sure why
you want to do what you are wanting to do. *Do you have a macro that is
taking a long time to run? *If so, here is a tip to speed up your macro.


Sub YourMacro()


* * With Application
* * * * .ScreenUpdating = False
* * * * .Calculation = xlCalculationManual
* * * * .StatusBar = "Excel is still calculating....Please Wait."
* * End With


* * ' your code here


* * With Application
* * * * .ScreenUpdating = True
* * * * .Calculation = xlCalculationAutomatic
* * * * .StatusBar = False
* * End With


End Sub


Note: You can't easily use a MsgBox to tell the user Excel is still
calculating. *But you can change the text in the Status Bar in the lower left
corner in Excel.


Hope this helps! *If so, let me know, click "YES" below.
--
Cheers,
Ryan


"Dan" wrote:


Hi - I am new to VBA and am trying to figure out how to get a message box to
pop-up whenever Excel calculates so the user waits and does not interrupt the
calculation process. *Specifically, it would remain on the screen until the
calculation process stops.


Thanks!- Hide quoted text -


- Show quoted text -- Hide quoted text -


- Show quoted text -