ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   Identifying a cell that has changed (https://www.excelbanter.com/excel-programming/339958-identifying-cell-has-changed.html)

[email protected]

Identifying a cell that has changed
 
I have an external DDE connection that updates a range of cells in a
sheet.
I need to verify the data sent. I'm trying to do this in the
Worksheet_Calculate() subroutine. However it requires that I verify
every cell every time even if only a single cell has been updated. Is
there a way to identify the delta without iterating through all the
cells?

Thanks

Avian


Vacation's Over

Identifying a cell that has changed
 
Lots of ways to approach this. Need more information to point to best way.
How many cells are likely to change each update?,
how often do you update?
Do you want just to know what changed or both old and new values for cell?
Is it values you need to track or include format, font, settings?
Are values strings, values, other?
Precision? - does new value of 12.6 = old value of 13


" wrote:

I have an external DDE connection that updates a range of cells in a
sheet.
I need to verify the data sent. I'm trying to do this in the
Worksheet_Calculate() subroutine. However it requires that I verify
every cell every time even if only a single cell has been updated. Is
there a way to identify the delta without iterating through all the
cells?

Thanks

Avian



[email protected]

Identifying a cell that has changed
 
There are about 50 cells that can change as a result of prices being
pushed to us from an external vendor.
The rate at which they change range from about one a minute to 1 or 2 a
second.
We don't need to know the old value.
We don't care about formatting.
The values should all be numbers.

The values that get send to us need to validated as numeric and then
rounded up or down before being copied to another area in the sheet
where another 3rd party picks them up via DDE.
The input numbers have a precision of 6 decimals and are rounded to 3
decimals with the final digit always being either 0 or 5.
The code I have now iterates through the range 'swapRateBid' each time
calculate is called - which is every time one of the prices changes and
is pushed to us. I'd like to validate just the cell that changed as
you could with Worksheet_Change but but I can't see a way to do this in
Worksheet_Calculate(). The issue is that at times when there is a lot
of price changes going on we hit 100% CPU....

The bones of the code is

Private Sub Worksheet_Calculate()
roundDown ("swapRateBid")
roundUp("swapRateOffer")
........
End Sub

Sub roundDown(rngStr As String)
'Round to half ticks
Dim c As Range
Dim val
For Each c In Range(rngStr)
Debug.Print ("A")
If IsNumeric(c) Then
val = c.Value * 100
If ((val - Int(val)) 0.5) Then
val = 0.5 + Int(val)
ElseIf ((val - Int(val)) < 0.5) Then
val = Int(val)
End If
val = val / 100
c.Offset(0, -4).Value = val
End If
Next c
End Sub


Thanks!

Avian


Vacation's Over

Identifying a cell that has changed
 
Two approaches come to mind

First: use worksheet_Change event instead of calculation event
worksheet_change returns a range named Target
which is the range that was changed
check if target is in your monitored range then
recalculate only dependents of the changed cell

Second: with CPU maxing and possible 1 - 2 changes per second
you may want to build a delay into the routine. How timely does the info
really need to be? 1 second, 3 seconds - 15 seconds?
Then you could accumulate changes and send through in a batch
remember that your clock speed is churning faster than you can possibly see
on the screen

Even resetting to updating at most once per second could address your CPU
issue

If these seem appropriate post back and we can proceed with code


" wrote:

There are about 50 cells that can change as a result of prices being
pushed to us from an external vendor.
The rate at which they change range from about one a minute to 1 or 2 a
second.
We don't need to know the old value.
We don't care about formatting.
The values should all be numbers.

The values that get send to us need to validated as numeric and then
rounded up or down before being copied to another area in the sheet
where another 3rd party picks them up via DDE.
The input numbers have a precision of 6 decimals and are rounded to 3
decimals with the final digit always being either 0 or 5.
The code I have now iterates through the range 'swapRateBid' each time
calculate is called - which is every time one of the prices changes and
is pushed to us. I'd like to validate just the cell that changed as
you could with Worksheet_Change but but I can't see a way to do this in
Worksheet_Calculate(). The issue is that at times when there is a lot
of price changes going on we hit 100% CPU....

The bones of the code is

Private Sub Worksheet_Calculate()
roundDown ("swapRateBid")
roundUp("swapRateOffer")
........
End Sub

Sub roundDown(rngStr As String)
'Round to half ticks
Dim c As Range
Dim val
For Each c In Range(rngStr)
Debug.Print ("A")
If IsNumeric(c) Then
val = c.Value * 100
If ((val - Int(val)) 0.5) Then
val = 0.5 + Int(val)
ElseIf ((val - Int(val)) < 0.5) Then
val = Int(val)
End If
val = val / 100
c.Offset(0, -4).Value = val
End If
Next c
End Sub


Thanks!

Avian



[email protected]

Identifying a cell that has changed
 
The problem with using worksheet_change is that it's not fired as a
result of calculations; and the problem with using a timer is that
we're producing a live pricing feeds to a third party and cannot to
miss a single price. I ascertained - through some helpful debug code
that Microsoft forgot to remove from their YIELD function, that we were
calculating a yield curve and interpolating far more often that needed.
I fixed this and it looks good now. Thanks very much for your help
though!

Avian



All times are GMT +1. The time now is 04:50 AM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
ExcelBanter.com