View Full Version : Solved: Calculate cell
Hello,
   I'm trying to make a simple thing but I can't manage to do it :banghead:  [working with excel 2003]
The situation is:
- in sheet n°1 I have some data tables;
- in sheet n° 2 I have to make some calculations based upon data in sheet 1
- to do this, I created some functions with no arguments (something like "Public Function calculate_this()") because I have to take a lot of inputs from sheet 1 (with some for loops)
The problem is:
- i want to re-calculate some results in sheet 2 when the user presses a button
How can I do this? I tried Worksheets(2).Calculate but it's not working. :dunno
The general question is: how to calculate a function that has no arguments and so doesn't refresh when the input values change?
Thanks a lot for you replies :hi:
Best wishes
   Giorgio
Bob Phillips
06-15-2009, 06:54 AM
Why/how does the calculate not work?
Have you got a workbook to post, you seem to have got somewhere along the line?
I tried to make a button with the related Sub "Worksheets(x).Calculate" in it but the results don't refresh..
I attached the workbook I'm working on.
As an example, you may look at sheet "E-G-B-C", cell C54.
This cell has a formula like "=Q_calc()"
and the relative code is
Public Function Q_calc()
Q = 0
    For i = 1 To 21
        
        xi = Worksheets("Z").Range("D5").Offset(i, 0).Value
        Qi = Worksheets("TabB2").Range("G3").Offset(i, 0).Value
        Q = Q + xi * Qi
        'If Qi <> 0 Then
        'MsgBox ("Qi: " & Qi & vbCrLf & _
        '        "xi: " & xi)
        'End If
    Next i
    
    Q_calc = Q
    
End Function
 
What I'd like to have, is a button that recalculates the results on demand.
Hope this helps understanding the problem (even if the few comments in the code are in italian).
Thanks for your help  :rotlaugh:
    Giorgio
rbrhodes
06-15-2009, 07:39 PM
Hi Giorgio,
 
"how to calculate a function that has no arguments and so doesn't refresh when the input values change?"
 
You don't need a button, just make the function 'volatile' and it will recalc when the input values change.
 
Public Function Q_calc()
 
     'Application.Calculation = xlCalculationManual
 
'//Added
     Application.Volatile
 
     Q = 0
 
    For i = 1 To 21
        
        xi = Worksheets("Z").Range("D5").Offset(i, 0).Value
        Qi = Worksheets("TabB2").Range("G3").Offset(i, 0).Value
        Q = Q + xi * Qi
    Next i
    
    Q_calc = Q
    
End Function
Hi rbrhodes,
   thanks for your reply.
I tried using Application.Volatile but it has some issues and it doesn't work properly. Doesn't it cause recalculation of the cell only when there is a change in the same worksheet where the function is called?
More than that, I wanted to avoid recalculation at every change because it takes some time to run all the workbook.
That's why I was looking for a "calculate on demand".
I begin to think that it's impossible :dunno
Have a nice day
     Giorgio
rbrhodes
06-16-2009, 01:59 AM
Hi G,
 
Try this sub. I tested it with Application.calculation = xlmanual, etc but it actually ran slower. This is the fastest version I came up with.  It simply replaces all the function formulas on sheet "E-G=B-C".
 
Private Sub cmdDemand_Click()
 
Application.ScreenUpdating = False
 
Range("C51:D51").Formula = "=B_calc(C50)"
Range("C54:D54").Formula = "=Q_calc()"
Range("C57:D57").Formula = "=F_calc()"
Range("C60:D60").Formula = "=G_calc()"
Range("C64:D63").Formula = "=U_calc()"
Range("J61").Formula = "=K_calc()"
 
Application.ScreenUpdating = True
 
 
End Sub
Thanks a lot rbrhodes!
This is surely a good and simple idea that didn't come to my mind :banghead:
Best regards
    Giorgio
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions Inc. All rights reserved.