View Single Post
  #17  
Old June 14th, 2008, 10:29 PM posted to microsoft.public.excel.charting
bart13[_7_]
external usenet poster
 
Posts: 1
Default Bug with Chart.Name?


Bingo.

Wow - a dash was the basic reason for the skipping! I never would have
figured that it was considered as punctuation, especially since an
underscore is fine... live & learn as they say.
Every O/S and language has quirks and as I've said, this was my first
VBA work ever and first Basic coding since the late '80s. Most of my
experience since the late '80s and until I retired from Disney in 2004
was as a DBA, sysadmin, *nix script jockey and mainly a Data
Architect.

Anyhow, I've changed the production code to use a counter based loop
and also added a new variable for it. That duplicate use of the Counter
variable does not exist in the production code, and was inadvertently
not commented out before sending you the file.

By the way, the full size version of that workbook is about 210MB
zipped, 640MB on disk and well over 1GB in memory. Whenever some extra
round tuits come in, I'll be exporting most of the raw data to a
database but the site has been growing so fast that the time just
hasn't been available.


Thanks very much for your patience with me, and the "above & beyond"
help. Great board for some of us that don't understand and are unaware
of specialized info.

Regards,
bart13

Peter T;680285 Wrote: [color=blue][i]
OK I got it, the stripped down version of only 14Mg !

The problem was easy to find, it was due to exactly one of the
potential
reasons I predicted when looping For Each ChartObject (or any drawing
object
type), specifically

in a reply to you
" names that include punctuation can be missed completely. "

and in my reply to Jon
" Further, For Each Drawingobject can entirely fail to reference any
names
with punctuation, eg "MyChart.1". "

You have three chartobject names like this
"dow_gold_oil_crb1900-current"
note the - dash !

Solution is either rename those objects or change your loop For Each
Chartobject loop to either of the other loop methods I've suggested
many
times in this thread.

For i = 1 to ws.ChartObjects.Count
Set chtObj = ws.ChartObjects(i)

or
For Each shp in ws.Shapes
If shp.Type = msoChart then
'etc

I'd use the index method.

BTW, in your file I see you tried in a test macro to implement an
index
style loop. Unfortunately you did it like this

For Counter = 1 to ws.ChartObjects.Count
' do stuff
Counter = Counter + 1
Next

So your loop would only process every other chart !

Regards,
Peter T



"bart13" wrote in message
...-

The email with a link to the workbook will be on the way soon. The

week[color=green][i]
was too wild to get it to you sooner.

I did not try the .Shapes loop yet, but don't have much hope for it.

Thanks,
bart13

Peter T;678958 Wrote:
I really would expect both the "for i = 1 to .chartobjects.count"

and
the
For each shp in .Shapes loop (with if msoChart test) to work
correctly.
Possibly there's something else in your own code at fault, or some
other bug
that we have all missed.

If you like you can send me a zipped stripped down non-sensitive
version of
what you have. Make a copy of your book, prune as much as possible

in[color=green][i]
terms
of data, charts, sheets and not least code; leaving just enough to
demonstrate the problem.

Regards,
Peter T
pmbthornton gmail com

"bart13" wrote in message
...-

Yes - very much so. The straight loop (as in "for i = 1 to
activesheet.chartobjects.count" ) has wrong results, just like-
every-
other attempt and regardless of whether the if test was being

used-
or-
not. There are 6 charts on the tab, only three show up in both

the
actual text file and the debug print statement.

No matter what the code is, charts are being skipped.

To state it another way, Pict.Name and Pict.Chart.Name return

the-
exact-
same matching values - every time. But both only return three

names-
and-
there are six charts, and all six have unique names in the name

box.

No matter if I look at the output in the text file or from the

debug
print statement, its the same issue. Six charts in the tab,

only-
three-
recognized.


And I do betray my ancient status as a coder. The last time I

did-
any-
Basic coding, there was no such thing as a for each loop so the

"for-
i-
= 1 to ..." is normal to me.

I did double check the name box again for all six charts, and

all-
the-
names are both unique and do not contain punctuation either

(unless-
an-
underscore is considered punctuation).

I'm obviously missing something since it appears you're saying

I-
have-
dupe names, but I have no way of which I'm aware to change the
duplicate ones nor is there any code that I can run which will
distinguish the dupes.

The only way that works on new copied charts is not to change

the-
name-
but rather hard code it into a select case set of statements

based-
on-
the "Chart ###" name.

Are you saying that this is expected behavior and an open and

old-
bug-
(or something similar), and that I should just continue to do

the-
hard-
coding and work around? I'm not trying to be accusatory, just

in-
case.-

Regards,
bart


Peter T;678438 Wrote:--
I did try the normal loop based on max chart count and the-
results--
were--
the same. Sorry, I just didn't post it since there was no

new-
data.---

I assume by "the normal loop" you mean
for i = 1 to activesheet.chartobjects.count
although most people might consider "For..Each" as the "normal"

way-
to-
loop
objects.

Are you absolutely sure the dubug results are different with

the
different
methods of looping.

Here's yet another way you can loop your charts

Sub test()
Dim shp As Shape, chtObj As ChartObject, cht As Chart
For Each shp In ActiveSheet.Shapes
If shp.Type = msoChart Then
i = i + 1
Set chtObj = shp.DrawingObject
Set cht = chtObj.Chart
Debug.Print i, chtObj.Name, cht.Name
End If
Next
End Sub

I would not expect this to work differently to a For i = 1 to
..Chartobjects.Count loop

From what you have described about chartobjects having been

renamed-
and-

copied I'm not surprised your For Each loop has failed to

reference-
all-

correctly.

I know it might seem odd but actually, as your subject line-
suggests,-
there
can be a bug of sorts when looping For Each with any object

type at-
the-

'DrawingObject' level; of which ChartObject is a sub type.

Apart-
from-
picking up the wrong object, in the case of duplicate names,

names-
that-

include punctuation can be missed completely. Remember, we

are-
talking-

about ChartObject name here, which is not (normally) same as
chartobject.Chart.Name (though chartObject & Shape names will

be-
the
same).

Regards,
Peter T






--
bart13