Votre panier est actuellement vide !
Étiquette : excel_vba
Line Sparkline In Excel VBA
The following program creates a sparkline of the line type:
Sub CreateLineSparkline() ThisWorkbook.Worksheets("Sheet8").Activate Range("A11").SparklineGroups.Add xlSparkLine, "A1:A10" End Sub
Explanation:
The Add() method of the SparklineGroups collection creates a SparklineGroup object in the target cell (here, cell A11).The first parameter, Type, is set to xlSparkLine from the xlSparkType enumeration, specifying a line sparkline.
The second parameter is a string representing the source data range for the sparkline values (here, cells A1 through A10).
Icon Set In Excel VBA
Instead of using data bars or color scales, the relative sizes of a series of numbers can also be visually represented using different symbols, as shown in the following program:
Sub IconSetExample() Dim Rg As Range ThisWorkbook.Worksheets("Sheet6").Activate Set Rg = Range("A2:A11") ' Remove existing conditional formats Rg.FormatConditions.Delete ' Add icon set conditional formatting Rg.FormatConditions.AddIconSetCondition ' Modify icon set settings With Rg.FormatConditions(1) .IconSet = ActiveWorkbook.IconSets(1) .IconCriteria(2).Value = 45 .IconCriteria(3).Value = 90 End With Set Rg = Nothing End Sub
Explanation:
The AddIconSetCondition() method creates an object of the class IconSetCondition, which is a conditional formatting rule using an icon set.The type of icon set can be changed by assigning an element from the IconSets collection of the active workbook to the IconSet property of the conditional format.
Icon sets can contain three, four, or five different icons. In this example, a three-icon set is used.
New threshold values are set for the second and third icons by modifying the Value property of the second and third elements in the IconCriteria collection.
For example, if a cell contains a value at least 45% of the maximum value in the range, the second icon is displayed; for 90% or more, the third icon is shown. By default, the thresholds are 34% and 67%.
Excel 2007 already includes 17 different icon sets, and Excel 2010 added three more. The following program displays all 20 icon sets neatly:
Sub DisplayAllIconSets() Dim Rg As Range Dim i As Integer ThisWorkbook.Worksheets("Sheet7").Activate For i = 1 To 20 Range("A2:A11").Copy Cells(2, i) Cells(1, i).Value = "S " & i Set Rg = Range(Cells(2, i), Cells(11, i)) Rg.FormatConditions.Delete Rg.FormatConditions.AddIconSetCondition Rg.FormatConditions(1).IconSet = ActiveWorkbook.IconSets(i) Next i Set Rg = Nothing End Sub
Explanation:
The values in the first column are copied into the subsequent columns.For each column, a range of ten cells is selected for conditional formatting.
An icon set conditional format is created for each range, with the icon set type assigned from the 20 available options.
Three-Color Scale In Excel VBA
The following example demonstrates a three-color scale:
Sub ThreeColorScale() Dim Rg As Range ThisWorkbook.Worksheets("Sheet6").Activate Set Rg = Range("A2:A11") ' Remove any existing conditional formats Rg.FormatConditions.Delete ' Add a three-color scale conditional formatting Rg.FormatConditions.AddColorScale 3 ' Modify the three-color scale settings With Rg.FormatConditions(1) .ColorScaleCriteria(1).Type = xlConditionValueLowestValue .ColorScaleCriteria(1).FormatColor.Color = vbGreen .ColorScaleCriteria(2).Type = xlConditionValuePercentile .ColorScaleCriteria(2).FormatColor.Color = vbYellow .ColorScaleCriteria(3).Type = xlConditionValueHighestValue .ColorScaleCriteria(3).FormatColor.Color = vbRed End With Set Rg = Nothing End Sub
Explanation of Differences from Two-Color Scale:
The method AddColorScale() is called with the parameter value 3 to specify a three-color scale.When modifying the scale, the middle color corresponds to the percentile value (xlConditionValuePercentile), which represents a statistical intermediate value.
This middle color is set to yellow, while the lowest and highest values are colored green and red respectively.
Two-Color Scale In Excel VBA
It is possible to format a range of cells using either a two-color or three-color scale. Here is an example using a two-color scale:
Sub TwoColorScale() Dim Rg As Range ThisWorkbook.Worksheets("Sheet6").Activate Set Rg = Range("A2:A11") ' Remove any existing conditional formats Rg.FormatConditions.Delete ' Add a two-color scale conditional formatting Rg.FormatConditions.AddColorScale 2 ' Modify the two-color scale settings With Rg.FormatConditions(1) .ColorScaleCriteria(1).Type = xlConditionValueLowestValue .ColorScaleCriteria(1).FormatColor.Color = vbYellow .ColorScaleCriteria(2).Type = xlConditionValueHighestValue .ColorScaleCriteria(2).FormatColor.Color = vbRed End With Set Rg = Nothing End Sub
Explanation:
First, any existing conditional formats in the specified range are deleted.The method AddColorScale() creates a ColorScale object, which is a conditional formatting rule using a color gradient. The first parameter (ColorScaleType) determines whether the scale is two-colored or three-colored.
Additional formatting criteria can be set on a ColorScale object via its ColorScaleCriteria collection.
For the first criterion, the lowest value in the range is assigned the color yellow. This is done by setting the Type property to xlConditionValueLowestValue (from the xlConditionValueTypes enumeration) and assigning the desired color to the FormatColor.Color property.
For the second criterion, the highest value is assigned the color red, using the xlConditionValueHighestValue enumeration.
Data Bars In Excel VBA
The following program illustrates the relative sizes of a series of numbers using data bars:
Sub CreateDataBars() Dim Rg As Range ThisWorkbook.Worksheets("Sheet6").Activate Set Rg = Range("A2:A11") ' Remove any existing conditional formats Rg.FormatConditions.Delete ' Add data bars conditional formatting Rg.FormatConditions.AddDatabar ' Modify the data bar color Rg.FormatConditions(1).BarColor.Color = vbRed Set Rg = Nothing End Sub
Explanation:
Conditional formatting rules applied to a cell or a range are stored in the FormatConditions collection.The Delete() method removes any existing conditional formats in the specified range.
The AddDatabar() method adds a data bar conditional formatting rule, which creates a bar inside each cell reflecting the relative value within the range.
Since this is the first conditional format applied, it is accessed by the index 1. Additional conditional formats could later be added and accessed by higher indices.
The color of the data bar is modified through the BarColor.Color property.
Figure shows the resulting data bars visualization.
WordArt In Excel VBA
WordArt allows you to create decorative text effects, such as shadowed or mirrored text. Using the method AddTextEffect(), the following example displays an overview of the 30 different predefined effect types available up to Excel 2010. Since Excel 2013, 20 additional effect types have been introduced. Each resulting object is of the class Shape.
Code:
Sub DisplayAllWordArt() Dim Sh As Shape Dim i As Integer, lf As Integer, tp As Integer ' Select the worksheet ThisWorkbook.Worksheets("Sheet5").Activate ' Hide gridlines for clearer display ActiveWindow.DisplayGridlines = False ' Delete all existing shapes For Each Sh In ActiveSheet.Shapes Sh.Delete Next Sh ' Initial position values lf = 5 tp = 5 ' Create all available WordArt presets For i = 0 To 49 Set Sh = ActiveSheet.Shapes.AddTextEffect( _ i, CStr(i), "Arial", 48, False, False, lf, tp) Sh.TextFrame.Characters.Font.Color = RGB(255, 0, 0) ' Calculate position for next WordArt object lf = lf + 70 If i Mod 6 = 5 Then lf = 10 tp = tp + 70 End If Next i Set Sh = Nothing End Sub
Explanation:
As in the previous program, gridlines on the worksheet are hidden, and any existing shapes are deleted.After setting the initial position, the loop calls the method AddTextEffect(), which has eight mandatory parameters:
- Type of predefined text effect
- Text to display
- Font name
- Font size
- Bold: True/False
- Italic: True/False
- Left position
- Top position
The font color of the text inside the shape’s text frame is set to red.
At the end of each loop iteration, the position for the next WordArt object is calculated.
The effect can be further customized using the parameters.
Figure shows a small excerpt displaying WordArt types.
All Shapes In Excel VBA
For better clarity, this section demonstrates all the different AutoShapes using the following VBA program:
Sub DisplayAllShapes() Dim Sh As Shape Dim i As Integer, lf As Integer, tp As Integer ' Select the worksheet ThisWorkbook.Worksheets("Sheet4").Activate ' Hide gridlines for clearer display ActiveWindow.DisplayGridlines = False ' Delete all existing shapes For Each Sh In ActiveSheet.Shapes Sh.Delete Next Sh ' Initial position values lf = 5 tp = 5 ' Create all possible shapes For i = 1 To 137 Set Sh = ActiveSheet.Shapes.AddShape(i, lf, tp, 30, 30) ' Format the shape With Sh .Line.Weight = 1 .Line.ForeColor.RGB = RGB(0, 0, 0) .Fill.ForeColor.RGB = RGB(255, 255, 255) End With ' Add the shape type number as text inside the shape With Sh.TextFrame.Characters .Font.Color = vbBlack .Font.Size = 7 .Text = i End With ' Calculate position for next shape lf = lf + 35 If i Mod 15 = 0 Then lf = 5 tp = tp + 35 End If Next i Set Sh = Nothing End Sub
Explanation:
First, gridlines on the worksheet are hidden to improve visibility. Then, any existing shapes on the sheet are deleted.Initial coordinates for placing the AutoShapes are set.
Within the loop, all 137 different AutoShapes are created using the AddShape() method.
Each shape is sized 30 by 30 points, drawn with a thin black border and a white fill.
Inside each shape, its Type number (the current loop index) is displayed as text.
At the end of each loop iteration, the position for the next shape is calculated, moving horizontally by 35 points and moving down a row every 15 shapes.
The Figure shows a small excerpt of the shapes. Depending on the shape’s design, the type number may only be partially visible, but can always be inferred by the neighboring shapes.
Freeform Shape In Excel VBA
A freeform shape is a path composed of straight or curved line segments connecting vertices (called nodes). If the last node coincides with the first, the freeform is closed, creating an enclosed area.
The method BuildFreeform() creates a FreeformBuilder object starting with the first node. Additional nodes are added with AddNodes(). Finally, ConvertToShape() converts the freeform into a Shape object.
Two examples follow: a closed freeform and an open freeform polyline.
Closed Freeform Example:
Sub ClosedFreeform() Dim FB As FreeformBuilder Dim Sh As Shape ThisWorkbook.Worksheets("Sheet3").Activate ' Initialize freeform with first node Set FB = ActiveSheet.Shapes.BuildFreeform(msoEditingAuto, 330, 30) ' Add curved nodes FB.AddNodes msoSegmentCurve, msoEditingAuto, 390, 60 FB.AddNodes msoSegmentCurve, msoEditingAuto, 390, 120 FB.AddNodes msoSegmentCurve, msoEditingAuto, 430, 40 ' Close the freeform by returning to the first node FB.AddNodes msoSegmentCurve, msoEditingAuto, 330, 30 ' Convert freeform to shape and format Set Sh = FB.ConvertToShape Sh.Line.Weight = 3 Sh.Fill.ForeColor.RGB = RGB(91, 155, 213) Sh.Line.ForeColor.RGB = RGB(65, 113, 156) Set Sh = Nothing Set FB = Nothing End Sub
Explanation of Closed Freeform:
The method BuildFreeform() requires three parameters:
- EditingType: defines the editing behavior of the first node and must be a value from the msoEditingType enumeration. The value msoEditingAuto means the editing mode adapts automatically to connected segments, providing a universal setting.
- X1 and Y1: specify the coordinates of the first node.
The AddNodes() method requires at least four parameters:
- SegmentType: defines the type of connection to the new node, from the msoSegmentType enumeration. Possible values include msoSegmentCurve for curved segments and msoSegmentLine for straight lines.
- EditingType: as described above.
- The next two parameters specify the coordinates of the new node when EditingType is set to msoEditingAuto.
The method ConvertToShape() converts the built freeform into a Shape, which can then be manipulated with standard shape properties and methods, such as Line.Weight for line thickness.
Open Freeform Polyline Example:
The node coordinates are taken from the worksheet (see Figure 7.16).
Sub OpenFreeformPolyline() Dim FB As FreeformBuilder Dim Sh As Shape Dim i As Integer ThisWorkbook.Worksheets("Sheet3").Activate ' Initialize freeform with first node from cells I1 (col 9), J1 (col 10) Set FB = ActiveSheet.Shapes.BuildFreeform(msoEditingAuto, Cells(1, 9), Cells(1, 10)) ' Add line segments for nodes in rows 2 to 10 For i = 2 To 10 FB.AddNodes msoSegmentLine, msoEditingAuto, Cells(i, 9), Cells(i, 10) Next i ' Convert freeform to shape and format Set Sh = FB.ConvertToShape Sh.Line.Weight = 3 Sh.Line.ForeColor.RGB = RGB(91, 155, 213) Set Sh = Nothing Set FB = Nothing End Sub
Explanation:
The coordinates for the first node come from the first row of the specified columns, and subsequent nodes come from the rows below. The connection type used here is a straight line (msoSegmentLine).Connector In Excel VBA
A connector provides a flexible link between two graphic objects. When one or both of these objects change position or size, the connector’s properties adjust accordingly. The connection can originate from one of several possible connection points on an object. Typically, it is desirable for the connection points on both objects to be as close to each other as possible.
In the following example, two rectangles are first created. Then, these two shapes are connected by a straight connector. Rectangles have four possible connection points, each located at the midpoint of their four sides.
Sub CreateConnector() Dim Sh1 As Shape, Sh2 As Shape Dim Con As Shape ThisWorkbook.Worksheets("Sheet3").Activate ' Shapes to be connected Set Sh1 = ActiveSheet.Shapes.AddShape(msoShapeRectangle, 80, 130, 40, 30) Set Sh2 = ActiveSheet.Shapes.AddShape(msoShapeRectangle, 180, 100, 40, 30) ' Connector Set Con = ActiveSheet.Shapes.AddConnector(msoConnectorStraight, 1, 1, 1, 1) Con.Line.Weight = 3 Con.ConnectorFormat.BeginConnect Sh1, 1 Con.ConnectorFormat.EndConnect Sh2, 1 Con.RerouteConnections ' Colors Sh1.Fill.ForeColor.RGB = RGB(91, 155, 213) Sh2.Fill.ForeColor.RGB = RGB(91, 155, 213) Con.Line.ForeColor.RGB = RGB(91, 155, 213) Set Con = Nothing Set Sh1 = Nothing Set Sh2 = Nothing End Sub
Explanation:
The AddConnector() method creates a connector, returning an object of type Shape.The first parameter specifies the connector type, which is a value from the msoConnectorType enumeration. Here, msoConnectorStraight indicates a straight connector.
The next four parameters define the starting point (BeginX, BeginY) and ending point (EndX, EndY) coordinates of the connector, similar to a line. However, once the connector is connected, these values are overridden by the positions of the connected objects. Thus, only nonzero placeholder values are required here.
Additional line properties such as Weight (line thickness) can be set for the connector.
The actual connection is made using the BeginConnect() and EndConnect() methods of the ConnectorFormat property. Both methods take two parameters:
- The first parameter is the shape to connect to.
- The second parameter is the index number of the connection point on that shape.
As noted, it is generally desirable for the connection points on the two objects to be as close as possible. Therefore, placeholder nonzero values suffice initially.
The RerouteConnections() method automatically adjusts the connector to use the optimal connection points between the two shapes.
Line In Excel VBA
The AddLine() method creates a line shape. The return value is an object of type Shape. For a line, the Line property of the Shape object controls the properties of the line itself. For larger shapes (such as rectangles), this property controls the border line characteristics.
Data arrays can contain not only variables but also references to objects. In this example, an array of references to three similar line shapes is created:
Sub CreateLines() Dim Sh(1 To 3) As Shape Dim i As Integer ThisWorkbook.Worksheets("Sheet3").Activate For i = 1 To 3 Set Sh(i) = ActiveSheet.Shapes.AddLine(240, 30, 280, 30) Sh(i).Line.ForeColor.RGB = RGB(255, 0, 0) Sh(i).Line.Weight = 3 Sh(i).Rotation = (i - 1) * 30 Set Sh(i) = Nothing Next i End Sub
Explanation:
The AddLine() method requires four parameters:- BeginX and BeginY specify the coordinates of the line’s starting point.
- EndX and EndY specify the coordinates of the line’s ending point.
Inside the loop, the color and thickness of each line are set uniformly.
The Rotation property is set differently for each line, increasing in increments of 30 degrees for each successive line.