ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   OLE Object on Sheet updates Value in Code but not its Display (https://www.excelbanter.com/excel-programming/406119-ole-object-sheet-updates-value-code-but-not-its-display.html)

SteveM

OLE Object on Sheet updates Value in Code but not its Display
 
This is pretty simple, but puzzling. I placed a Label control on a
worksheet. I read in a range of text values that I want to display as
the Label caption after a brief delay. The delay time is read in
seconds. The For Each loop is supposed to update the caption.
However, the caption value does indeed update because I tested it by
putting it out in a MsgBox. But the caption graphic does not update.
Code below. Any ideas appreciated.

Thanks,

SteveM

Sub PlayAff()

Dim affRng As Range
Dim affCell As Range
Dim startTime As Variant
Dim delayTime As Integer
Dim ws As Worksheet

Range("AffAnchor").Select
Range(Selection, Selection.End(xlDown)).Select

Set affRng = Selection
delayTime = Range("DelayTime")
Set ws = Sheets("Play")
ws.Activate
ws.OLEObjects("AffLabel").Object.Caption = ""

For Each affCell In affRng
startTime = Timer
ws.OLEObjects("AffLabel").Object.Caption = affCell
MsgBox ws.OLEObjects("AffLabel").Object.Caption ' Shows
correct text value
Do While Timer <= startTime + delayTime ' caption display
not updated.
Loop
Next

End Sub

Chip Pearson

OLE Object on Sheet updates Value in Code but not its Display
 
Try adding a DoEvents statement within your Do loop:

Do While Timer <= startTime + delayTime ' caption display
DoEvents
Loop

As a general principle, using a tight loop to wait an elapsed time isn't the
best way. You should probably use Application.Wait or the Win32
Sleep/SleepEx function.


--
Cordially,
Chip Pearson
Microsoft Most Valuable Professional
Excel Product Group, 1998 - 2008
Pearson Software Consulting, LLC
www.cpearson.com
(email on web site)


"SteveM" wrote in message
...
This is pretty simple, but puzzling. I placed a Label control on a
worksheet. I read in a range of text values that I want to display as
the Label caption after a brief delay. The delay time is read in
seconds. The For Each loop is supposed to update the caption.
However, the caption value does indeed update because I tested it by
putting it out in a MsgBox. But the caption graphic does not update.
Code below. Any ideas appreciated.

Thanks,

SteveM

Sub PlayAff()

Dim affRng As Range
Dim affCell As Range
Dim startTime As Variant
Dim delayTime As Integer
Dim ws As Worksheet

Range("AffAnchor").Select
Range(Selection, Selection.End(xlDown)).Select

Set affRng = Selection
delayTime = Range("DelayTime")
Set ws = Sheets("Play")
ws.Activate
ws.OLEObjects("AffLabel").Object.Caption = ""

For Each affCell In affRng
startTime = Timer
ws.OLEObjects("AffLabel").Object.Caption = affCell
MsgBox ws.OLEObjects("AffLabel").Object.Caption ' Shows
correct text value
Do While Timer <= startTime + delayTime ' caption display
not updated.
Loop
Next

End Sub



SteveM

OLE Object on Sheet updates Value in Code but not its Display
 
On Feb 14, 11:35 am, "Chip Pearson" wrote:
Try adding a DoEvents statement within your Do loop:

Do While Timer <= startTime + delayTime ' caption display
DoEvents
Loop

As a general principle, using a tight loop to wait an elapsed time isn't the
best way. You should probably use Application.Wait or the Win32
Sleep/SleepEx function.

--
Cordially,
Chip Pearson
Microsoft Most Valuable Professional
Excel Product Group, 1998 - 2008
Pearson Software Consulting, LLCwww.cpearson.com
(email on web site)

"SteveM" wrote in message

...

This is pretty simple, but puzzling. I placed a Label control on a
worksheet. I read in a range of text values that I want to display as
the Label caption after a brief delay. The delay time is read in
seconds. The For Each loop is supposed to update the caption.
However, the caption value does indeed update because I tested it by
putting it out in a MsgBox. But the caption graphic does not update.
Code below. Any ideas appreciated.


Thanks,


SteveM


Sub PlayAff()


Dim affRng As Range
Dim affCell As Range
Dim startTime As Variant
Dim delayTime As Integer
Dim ws As Worksheet


Range("AffAnchor").Select
Range(Selection, Selection.End(xlDown)).Select


Set affRng = Selection
delayTime = Range("DelayTime")
Set ws = Sheets("Play")
ws.Activate
ws.OLEObjects("AffLabel").Object.Caption = ""


For Each affCell In affRng
startTime = Timer
ws.OLEObjects("AffLabel").Object.Caption = affCell
MsgBox ws.OLEObjects("AffLabel").Object.Caption ' Shows
correct text value
Do While Timer <= startTime + delayTime ' caption display
not updated.
Loop
Next


End Sub


Chip,

Thanks for the response. I tried this three second delay:

Application.Wait (Now + TimeValue("0:00:03"))

But it did not work. I interrupted code execution as a test and the
display Label did update to the interrupt value.

I'm not a programmer, but I have been able to update Label controls on
Forms with ShowModal set to False as things happened in the
background. So I guess I could choose that cowardly way out. But I
sure would like to know what's happening here.

Thanks Again,

SteveM

Dave Peterson

OLE Object on Sheet updates Value in Code but not its Display
 
Did you notice that Chip add the DoEvents line in your loop?

Did you try that?

if that doesn't work, maybe turning screenupdating off, then back on would be
worth a try???

SteveM wrote:

On Feb 14, 11:35 am, "Chip Pearson" wrote:
Try adding a DoEvents statement within your Do loop:

Do While Timer <= startTime + delayTime ' caption display
DoEvents
Loop

As a general principle, using a tight loop to wait an elapsed time isn't the
best way. You should probably use Application.Wait or the Win32
Sleep/SleepEx function.

--
Cordially,
Chip Pearson
Microsoft Most Valuable Professional
Excel Product Group, 1998 - 2008
Pearson Software Consulting, LLCwww.cpearson.com
(email on web site)

"SteveM" wrote in message

...

This is pretty simple, but puzzling. I placed a Label control on a
worksheet. I read in a range of text values that I want to display as
the Label caption after a brief delay. The delay time is read in
seconds. The For Each loop is supposed to update the caption.
However, the caption value does indeed update because I tested it by
putting it out in a MsgBox. But the caption graphic does not update.
Code below. Any ideas appreciated.


Thanks,


SteveM


Sub PlayAff()


Dim affRng As Range
Dim affCell As Range
Dim startTime As Variant
Dim delayTime As Integer
Dim ws As Worksheet


Range("AffAnchor").Select
Range(Selection, Selection.End(xlDown)).Select


Set affRng = Selection
delayTime = Range("DelayTime")
Set ws = Sheets("Play")
ws.Activate
ws.OLEObjects("AffLabel").Object.Caption = ""


For Each affCell In affRng
startTime = Timer
ws.OLEObjects("AffLabel").Object.Caption = affCell
MsgBox ws.OLEObjects("AffLabel").Object.Caption ' Shows
correct text value
Do While Timer <= startTime + delayTime ' caption display
not updated.
Loop
Next


End Sub


Chip,

Thanks for the response. I tried this three second delay:

Application.Wait (Now + TimeValue("0:00:03"))

But it did not work. I interrupted code execution as a test and the
display Label did update to the interrupt value.

I'm not a programmer, but I have been able to update Label controls on
Forms with ShowModal set to False as things happened in the
background. So I guess I could choose that cowardly way out. But I
sure would like to know what's happening here.

Thanks Again,

SteveM


--

Dave Peterson


All times are GMT +1. The time now is 05:48 PM.

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