Modify Z-index on Series object in Excel 2010 - vba

I am using excel 2010.
I have a chart diagram on which i put a rectangle to surround the highest column bar.
In order to make things more readable, i would like to place this rectangle on the chart but NOT in front of the lines/bars/etc...It has to be behind them.
Shape objects (like my rectangle) have a ZIndex property than can be modified in order to achieve that. Thing is, it seems impossible to put that behind the elements of my chart, nor the chart itself.
The main reason is because Chart objects and Series objects (which are the columns inside my chart) doesn't have a Z-Index property.
Is there a way which could allow me to achieve this ? Other than modifying ZIndex property ?

You can move the Chart in front of the Shape, or the Shape in front of the Chart. But what you are looking to do is to stuff the Shape behind some components of the chart, but still in front of the chart background.
That, as far as I know cannot be done.
But you can simulate the effect by making the Chart's background and the Plot area transparent (no fill, instead of the default White fill) by simply right clicking and adjusting properties.
Also, you can highlight both the chart and the shape (Ctrl-Multiple Select) and lock the two together so your Shape will look like it's a part of the chart and is behind the components.
Of course, the shape will be behind the whole chart itself (by setting the appropriate Z-value, which you may find by simply clicking on Record Macro and running the formatting once to get sample code) but since the chart's background is transparent and so is the plot area's it'll look as if the rectangle's behind the lines and all.

Related

Legend boxes are not changing colour

I have a legend for a bar series chart. The boxes (they could be known as something else) stay the original colour instead of changing when a bar changes colour. The same program has another bar chart with a legend that works correctly. I have tried a lot of setting changes. I can't see any difference between my two charts.
I have tried many settings and still can't get it working.

Nature of Excel 2010 VBA Embedded Chart Container

I searched Google and on many different forums but cannot find the Physical Nature (I don't know to say it) of an Embedded Chart's container window, I mean the canvas like rectangular area which serves as, well, the chart container.
I know that it is a ChartObject.
The main clarifications that I needed is:
Is it a Shape as in Autoshape or Freeform shape? (I suspect so)
It does show up as a shape in Selection Pane.
Copy/Pasting Freeform shapes onto it causes pasted shapes to stick onto it while doing the same with any other two shapes won't stick to each other.
Is it a Userform? (I am skeptical)
But Userforms are always in front of the shapes and shapes cannot be pasted onto userforms obviously.
The ChartObject is also a Shape that can be reached via the Shapes collection.
?Sheet1.Shapes("Chart 1").Type = msoShapeType.msoChart
True

Using the Form Scrollbar to Control Image Transparency in Excel VBA

I'm struggling in making a form scrollbar to control the image transparency. To be specific, I've got two images that I'm linking to two buttons. Hide/show buttons, and I want the scrollbar to control the image transparency as shown in the image below. Your help would be appreciated. I can't wrap my head around to code it.
Here is a low-tech approach.
1) Create a rectangle and fill it with your picture. This doesn't require any VBA.
2) Insert the scrollbar and, using the properties, link your scrollbar to a cell with the default 0-100 range of the scrollbar's values. For example, in the following picture I linked it to J20:
Then, in a standard code module put:
Sub SetTransparency()
Sheets(1).Shapes("Rectangle 1").Fill.Transparency = Sheets(1).Range("J20") / 100
End Sub
(With of course things like Sheets(1), "Rectangle 1" and "J20" to be adjusted to match your situation)
Then - all you have to do is right click on the control and select Assign Macro to assign this macro to your control. It can be used like:
Possibly unfortunately (depending on your desires) the transparency doesn't change continuously as you scroll. AKAIK, you would need to use Active-X controls for that.

Dynamically creating multiple chart areas

I am creating a program which given some data files, creates charts based on these files. Rather than creating multiple charts, I have chosen to create multiple chart areas in a loop and add the various data to the chart areas. When using some sample data, which is small, the program creates 3 chart areas within a chart and works fine.
However using larger data, the program creates the chart areas but because there are over 10 chart areas to create, they do not fit into the size of the chart and also are aligned vertically rather than horizontally.
What I would like to do is increase the size of the chart fitting in all the chart areas for large data, aligning all the chart areas vertically and allowing the user to view all the chart areas via a scroll bar, since there will be a lot of chart areas using the real data files, any help will be appreciated.
The below are examples of alignment types you can switch to
Chart1.ChartAreas(0).AlignmentOrientation = AreaAlignmentOrientations.Horizontal
Chart1.ChartAreas(0).AlignmentOrientation = AreaAlignmentOrientations.Vertical
As for a scroll bar, the chart control doesn't support scroll bars. What I would do is have my original chart contained in some sort of panel/tab [any container that supports scroll bars] and then is number of charts required reaches a certain level add another chart below your original and then allow the container to build the scroll bar
'when charts required is now 5 create new chart
If Chart1.ChartAreas.Count =4 Then
Dim OverflowChart As New Chart
'add a new chart below your current chart and let the container
'have the scroll bar and not your chart control
End if
I managed to figure it soon after I posted here which is ironic. For the sake of anyone with similar problems in the future. The way I did it was to:
- Add a scrollbar to the form
- Make the blank chart as big as possible to fit whatever data which was going to be used
- Manually set the position of each chart area using ChartArea.Position and changing the posY for each chart in a loop
This worked great and gave me a lot of control as to how big I wanted the chart areas since ChartAreas.Position also has a width and height attribute and allowed me to easily align the chart areas horiziontally using the y coordinates of each chart area.

Copying shapes between PowerPoint 2007 presentations along with their animations

I programmatically copy the shapes of an entire slide to a new slide in another presentation by performing origShape.Copy and then newSlide.Shapes.Paste().
(copy/paste the entire slide is unfortunately not an option for me here)
My problem is that Animation effects get really warped. Some are lost, others appear in the wrong order.
I thought that maybe after copying all the shapes I'll go over origSlide.TimeLine and will copy each animation effect to newSlide.TimeLine with the corresponding Shapes.
Is there a way of copying Animation effects between shapes without manually setting each and every parameter? (there are LOTS of these).
When copying shape-by-shape to a new slide, naturally the order of the animations gets ruined.
If we had for example the following animation sequence:
Rectangle flying in
Triangle flying in
Rectangle flying out
And we copy first the Rectangle and then the Triangle to a new slide, we'll get first both animations of the rectangle and then of the triangle.
My mistake was trying to solve this disorder by using Shape.AnimationSettings.
BEWARE OF SHAPE.ANIMATIONSETTINGS!!
This Property is kept only for backward compatibility with old versions of PowerPoint. If you modify any of its fields, all animations of a shape except the first one get AUTOMATICALLY ERASED !
So, the solution is this:
Copy shape by shape to new slide (no animations are lost, just mis-ordered). Then use Slide.TimeLine to go over the animation Effects and order them correctly using Effect.MoveTo, or Sequence.Clone and Effect.Delete.