281
MsgBox OleOb.Name
End If
Next
End Sub
Or, if you know the OLEObject name of the image control (default something like image1,
image2), you can just test for it.
Function IsImage(sName As String)
Dim vtop
On Error Resume Next
vtop = ActiveSheet.OLEObjects(sName).Top
If Err = 0 Then
IsImage = True
Else
IsImage = False
Err.Clear
End If
End Function
Sub TestImage()
MsgBox IsImage("Image1")
End Sub
14.2 WORKING WITH CHARTS
14.2.1 Loop Through All Charts
The following will loop through all the chart objects in all the sheets and present aMsgBox
displaying the name ofeach chart.  Obviously it can be modified to do whatever you need in
place of theMsgBox.
Sub FindCharts()
Dim oChart As ChartObject
Dim nSheet As Integer
Dim nChart As Integer
nSheet = 1
Do While nSheet <= Sheets.Count
nChart = 1
Do While nChart <= Sheets(nSheet).ChartObjects.Count
Set oChart = Sheets(nSheet).ChartObjects(nChart)
MsgBox (Sheets(nSheet).Name & " " & oChart.Name)
nChart = nChart + 1
Loop
nSheet = nSheet + 1
Loop
End Sub
14.2.2 Relocating Embedded Charts By Code
The following code will set the top left of chart 1 to the top left of the D10 cell:
Pdf rotate pages separately - rotate PDF page permanently in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Empower Users to Change the Rotation Angle of PDF File Page Using C#
rotate pdf pages on ipad; pdf page order reverse
Pdf rotate pages separately - VB.NET PDF Page Rotate Library: rotate PDF page permanently in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
PDF Document Page Rotation in Visual Basic .NET Class Application
pdf save rotated pages; pdf expert rotate page
282
ActiveSheet.Shapes("Chart 1").Left = Range("D10").Left
ActiveSheet.Shapes("Chart 1").Top = Range("D10").Top
The following relocates embedded charts to specified cells and makes them a certain size.  This
code uses the name of the embedded chart which you can get by selecting the chart and checking
the name that appears in the name box to the left of the formula edit box.  The easiest way to
select a chart is to display the Drawing toolbar and use the Select Objects button to select the
chart.
Sub RelocateAllGraphs()
'call the RelocateAGraph routine three times, passing to it different
'chart names and destinations
RelocateAGraph "Chart 1", "A1"
RelocateAGraph "Chart 2", "a11"
RelocateAGraph "Chart 3", "a21"
End Sub
Sub RelocateAGraph(gName As String, cellRef As String)
With ActiveSheet.Shapes(gName)
'set the position of the chart based on the cell reference
.Left = Range(cellRef).Left
.Top = Range(cellRef).Top
'set the width and height of the chart
.Width = 150
.Height = 90
End With
End Sub
14.2.3 Creating A Chart On A New Sheet
The following code will prompt for the data source for a pie chart and then draw it on a new
sheet:
Sub MakePies()
Dim dataRange As Range
'set error trap in case cancel selected
On Error GoTo errorTrap
'prompt for input range
VB Imaging - VB Code 128 Generation Guide
the created Code 128 barcode graphics separately or together 96 'set rotation barcode.Rotate = Rotate.Rotate0 barcode Create Code 128 on PDF, Multi-Page TIFF
rotate pdf page permanently; permanently rotate pdf pages
XDoc.HTML5 Viewer for .NET, All Mature Features Introductions
View, Zoom & Rotate. NET developers to search text-based documents, like PDF, Microsoft Office One is to save annotations separately from original document as
rotate pdf pages individually; rotate single page in pdf reader
283
Set dataRange = Application.InputBox _
("Where is your data for chart?", Type:=8)
'add a pie chart, supplying the above range
Charts.Add
ActiveChart.ChartWizard Source:=dataRange, _
Gallery:=xlPieFormat:=1, PlotBy:=xlColumns, _
CategoryLabels :=0, SeriesLabels:=0, HasLegend:=2, _
Title:="", CategoryTitle :="", _
ValueTitle:="", ExtraTitle:=""
Exit Sub
errorTrap:
Exit Sub
End Sub
14.2.4 Deleting All Embedded Charts On A Worksheet
The following code will delete all embedded charts on a worksheet:
Dim oCht As ChartObject
For Each oCht In ActiveSheet.ChartObjects
oCht.Delete
Next
14.2.5 Making Charts Using Visual Basic Code
The following is an example of creating a pie chart
Sub MakePies()
Dim myRange As Range
Set myRange = Application.InputBox _
(Prompt:="Where is your data for chart?", Type:=8)
Charts.Add
ActiveChart.ChartType = xlPie
ActiveChart.SetSourceData Source:=myRange, _
PlotBy:=xlColumns
ActiveChart.Location Where:=xlLocationAsNewSheet
End Sub
14.2.6 Changing The Size Of Embedded Charts
The following will re
-
size all the embedded charts on the active worksheet to the same size:
Sub Resize_charts()
Dim cObj As ChartObject
'rotate through each chart
For Each cObj In ActiveSheet.ChartObjects
C# Imaging - UPC-A Barcode Generator
A barcode can be processed separately on target Resolution = 96;// set resolution barcode.Rotate = Rotate.Rotate0;// set to document files, like PDF, TIFF, MS
pdf rotate all pages; rotate individual pdf pages reader
C#: How to Draw and Customize Annotation in HTML5 Document Viewer
PDF pages extract, copy, paste, C#.NET rotate PDF pages, C#.NET VB.NET How-to, VB.NET PDF, VB.NET One is to save annotations separately from original document
rotate pages in pdf online; how to change page orientation in pdf document
284
'set the height and width
cObj.Height = 200
cObj.Width = 250
Next
End Sub
14.2.7 Replicating Charts
Assume that you have a large number of embedded charts on a hidden worksheet, not displayed
to the user, and a single embedded chart on a visible worksheet, which acts as a place holder to
display whichever of the charts the user selects.  Due to problems with copying/pasting charts
between sheets (i.e. crashing after 80 or so), you can't just copy the selected chart from the hidden
sheet to the visible sheet.
To avoid the crashes, copy just theChartArea, rather than theChartObject as illustrated by the
following example.  This example has the user enter the number of the chart.  You could display a
small userform with a selection list instead.  The example loops until the user selects cancel (or
enters zero or fails to enter a number)
Sub DisplayCharts()
Dim chtTarget As Chart
Dim chtSource As ChartObject
Dim iChart As Integer
Do
doAgain:
iChart = Val(InputBox("Enter the number of a chart"))
If iChart = 0 Then Exit Sub
On Error GoTo eTrap
Set chtTarget = ActiveSheet.ChartObjects(1).Chart
Set chtSource = Sheets("Sheet1").ChartObjects(iChart)
chtTarget.ChartArea.ClearContents
chtSource.Chart.ChartArea.Copy
chtTarget.Paste
Loop
eTrap:
MsgBox "The chart you requested was not found."
Resume doAgain
End Sub
14.2.8 How To Export Charts To GIF Files
The following will convert a chart sheet to a GIF file:
ActiveChart.Export FileName:="c:\Mychart.gif", FilterName:="GIF"
and save it to c:\Mychart.gif.
If the chart is an object in a worksheet, then you can use the following code to convert it to a GIF
file:
C# Excel: Create and Draw Linear and 2D Barcodes on Excel Page
123456789"; linearBarcode.Resolution = 96; linearBarcode.Rotate = Rotate.Rotate0; // load Excel document and you can also load document like PDF, TIFF, Word
reverse page order pdf; rotate one page in pdf reader
Generate Image in .NET Winforms Imaging Viewer| Online Tutorials
Page: Insert PDF pages; VB.NET Page: Delete PDF pages; PDF Generator. PDF Reader. Twain Scanning. DICOM Reading. Adjust barcode quite margin size; Rotate barcode
pdf reverse page order preview; pdf rotate one page
285
ActiveSheet.ChartObjects("chart 2").Chart.Export _
FileName:="c:\myChart.gif", FilterName:="GIF"
The trick in the second approach is determining the embedded chart's name.  To do that, do the
following:
select a cell on the worksheet
display the drawing toolbar
click on the select objects button
click on the chart 
-
the name of the chart will be displayed in the Name box,
which is to the left of the formula box
You can also re
-
name the chart by clicking in the name box with the chart selected per the above
procedure and typing in a new name.
14.2.9 Value Of A Point On A Line
To get the value of a point on a line, you need to use the series object.  Use something like the
following to process the first series in a bar chart, coloring each bar greater than 100 yellow, and
those less than or equal to 100 blue:
'Use following line for embedded chart
Set cht = ActiveSheet.ChartObjects("Chart 1").Chart
'Use following line for Chart sheet (note the quote making the next
'line a comment
'
Set cht = Charts("Chart1")
Set pts = cht.SeriesCollection(1).Points
varVals = cht.SeriesCollection(1).Values
For Each pt In pts
i = i + 1
If varVals(i) > 100 Then
pt.Interior.ColorIndex = 6
Else
pt.Interior.ColorIndex = 5
End If
Next pt
14.2.10 An Add An Embedded Chart Example
The following example adds a chart on the active sheet
DICOM to PDF Converter | Convert DICOM to PDF, Convert PDF to
Start DICOM - PDF image conversion through drag &drop Apply resize, rotate, flip, mirror, contrast, brightness and Convert all pages or certain pages chosen by
how to rotate one page in pdf document; pdf rotate single page reader
BMP to Word Converter | Convert Bitmap to Word, Convert Word to
Apply resize, rotate, flip, mirror, contrast, brightness and Convert all pages or certain pages chosen by users; Save original and converted images separately;
save pdf rotate pages; rotate all pages in pdf and save
286
Sub AddChartTest()
Dim cht As ChartObject
Dim wks As Worksheet
Set wks = ActiveSheet
'add an embedded chart and set it equal to an object variable
Set cht = wks.ChartObjects.Add(0, 75, 400, 250)
'specify the data and the chart type
With cht.Chart
.SetSourceData wks.Range("B2:F4")
.ApplyCustomType xl3DColumnClustered
End With
End Sub
Where:
(0, 75, 400, 250) sets theLeft,Top,Width, andHeight respectively.
("B2:F4") identifies the range you are plotting, including the column and row headings.
Because the code sets the cht variable equal to the added chart, you can refer to it directly by it's
variable name and not by it's location and shape/chart name.
14.2.11 Changing A Chart's Size And Position
A chart embedded in a sheet is contained in aChartObject, which is the parent of aChart If
you want to position the embedded chart, you position theChartObject, the following positions
a chart over A10:H25:
Set rng = Range("A10:H25")
With ActiveSheet.ChartObjects(1)
.Top = rng.Top
.Left = rng.Left
.Width = rng.Width
.Height = rng.Height
End With
14.2.12 Determining If A Series Is Selected In A Chart
The following statement will returnTrue if a series in a chart is selected, andFalse if one is not.
Ucase(T
ypeName(Selection)) = "SERIES"
For example,
If
Ucase(T
ypeName(Selection)) = "SERIES" Then
287
'code to do if true
End If
14.2.13 Changing The Title On An Embedded Chart
The following illustrates how to change the title on an embedded chart to the text in a cell.  In
this example, cell A1 is used.
ActiveSheet.ChartObjects(1).Chart.ChartTitle.Text = _
Range("a1").Text
or
ActiveSheet.ChartObjects("Chart 1").Chart.ChartTitle.Text = _
Range("a1").Text
14.2.14 Relocating A Chart 
-
Another Example
If you have charts that you wish to selectively display on a worksheet, then you will need to
move them in and out of view.  The following code will set the top left of your chart to the top
left of the D10 cell:
ActiveSheet.Shapes("Chart 1").Left = Range("D10").Left
ActiveSheet.Shapes("Chart 1").Top = Range("D10").Top
You can name the chart with:
ActiveSheet.Shapes("Chart 1").Name = "Data"
or
ActiveSheet.Shapes(1).Name = "Data"
14.2.15 Determining What A User Has Selected In A Chart
if you have a situation where the user is to select a line in a chart and then click on a button to
run a macro, you need to determine what is selected before taking any action.  The following
statement returns what is selected and sets it to a variable.
Dim sSel As String
sSel =ExecuteExcel4Macro("SELECTION()")
which returns, for example S2 if the entire second series is selected, or S2P3
288
if the third point on the second series is selected.  Please note that there are double quotes around
Selection() in the above statement.
You can also useTypeName(Selection()) to return the type of the selection.
14.2.16 Converting Chart Series References to Values
The following code will convert the formulas in a chart series to values.  It is designed to loop
through all series of all charts, whether they are embedded charts or chart sheets:
Sub Check_And_Remove_Links()
Dim oSheet As Object
Dim cObj As Object
If MsgBox("Check for and remove chart links?", _
vbOKCancel) = vbOK Then
'rotate through all sheets
For Each oSheet In ActiveWorkbook.Sheets
'if a chart sheet, pass the sheet object
If TypeName(oSheet) = "Chart" Then
RemoveChartLinks oSheet
Else
'if a worksheet, check for chart objects and pass
'the chart object to the remove macro
For Each cObj In oSheet.ChartObjects
RemoveChartLinks cObj.Chart
Next
End If
Next
End If
End Sub
Sub RemoveChartLinks(oObj As Object)
On Error Resume Next
Dim seriesCount As Integer
Dim I As Integer
With oObj
'get number of series and rotate
seriesCount = .SeriesCollection.Count
For I = 1 To seriesCount
With .SeriesCollection(I)
'change to values
289
.Name = .Name
.XValues = .XValues
.Values = .Values
End With
Next I
End With
End Sub
14.2.17 Labeling The Points On A Line
The following code illustrates how to label the points on a line or a scatter plot:
Sub AddLabelsToPoints()
Dim oPointAs Point
Dim dataRangeAs Range
Dim IAs Long
On Error Resume Next
Set dataRange = _Application.InputBox( _
"Select the series data label range",Type:=8)
If dataRangeIs Nothing Then Exit Sub
On Error GoTo 0
For Each oPointIn ActiveChart.SeriesCollection(1).Points
I = I + 1
oPoint.HasDataLabel =True
oPoint.DataLabel.Text = dataRange.Cells(I).Value
Next oPoint
End Sub
14.2.18 Putting Charts On UserForms
Unfortunately, you can not put a chart directly on a UserForm.  However, you can save the chart
as a GIF file and then load the GIF file onto an image object that is on the userform.  Image
objects are created by using the image button on the VBE toolbox.
The following example uses an input box to get the number of the chart.  The picture is saved as
C:\temp.GIF and then loaded to the userform.
Sub ChartOnUserForm()
Dim iChart As Integer
Dim oChart As Chart
Do
iChart = Val(InputBox("Enter the number of the chart"))
If iChart = 0 Then Exit Sub
Set oChart = Sheets("Sheet1").ChartObjects(iChart).Chart
'save the chart to a file
oChart.Export Filename:="C:\temp.gif", FilterName:="GIF"
'load onto userform image
290
UserForm1.Image1.Picture = LoadPicture("C:\temp.gif")
serForm1.Show
Loop
End Sub
The following approach uses a spinner button on a userform to rotate through the charts.  In this
example, a global constant is used to specify the maximum number of charts.  Clicking on the
spinner button will rotate continually through the charts:
'set to max number of charts
Global Const maxCharts = 3
Sub ChartOnUserForm()
'make sure form is unloaded
Unload UserForm1
'display the form
UserForm1.Show
End Sub
Private Sub UserForm_Activate()
'activating the form runs this line which initializes the spin button
'this causes the Change event below to be run which loads the first chart
Me.SpinButton1.Value = 1
End Sub
Private Sub SpinButton1_Change()
Dim iChart As Integer
'make certain the number of the chart is between 1 and the max number
With Me.SpinButton1
If .Value > maxCharts Then
.Value = 1
ElseIf .Value = 0 Then
.Value = maxCharts
End If
iChart = .Value
End With
'export the selected chart
With Sheets("Sheet1").ChartObjects(iChart).Chart
.Export Filename:="C:\temp.gif", FilterName:="GIF"
End With
Documents you may be interested
Documents you may be interested