water

ExcelChart UDF - Help & Support

113 posts in this topic

This is the "General Help and Support" thread for the ExcelChart UDF.

The UDF itself can be downloaded

So if you have any questions, suggestions or errors please post here.


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2016-08-18 - Version 1.4.6.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (2016-05-09 - Version 1.2.0.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2015-04-01 - Version 0.4.0.0) - Download - General Help & Support - Example Scripts
Excel - Example Scripts - Wiki
Word - Wiki
Tutorials:
ADO - Wiki

 

Share this post


Link to post
Share on other sites



Hi Guys,

is there the possibilty to manage "error bars" with this great UDF?

For me error bars are the better solution to achive this:

Posted Image

A scatter chart with a vertical error bar and a label: a "dynamic" vertical bar.

Suggestions?

Thanks!

Share this post


Link to post
Share on other sites

Hi maba,

not yet.

Can you create the vertical lines with Excel manually? If yes, you could create a macro and we can have alook at the VBA code and can try to translate it to AutoIt.

What version of Excel do you use?


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2016-08-18 - Version 1.4.6.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (2016-05-09 - Version 1.2.0.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2015-04-01 - Version 0.4.0.0) - Download - General Help & Support - Example Scripts
Excel - Example Scripts - Wiki
Word - Wiki
Tutorials:
ADO - Wiki

 

Share this post


Link to post
Share on other sites

:)

Something like this:

Sub ErrorBar()
'
' ErrorBar Macro
'
'
    ActiveSheet.ChartObjects("Grafico 4").Activate
    ActiveChart.SeriesCollection(2).Select
    ActiveChart.SeriesCollection.NewSeries
    ActiveChart.SeriesCollection(11).Name = "=""Error"""
    ActiveChart.SeriesCollection(11).XValues = "='Tabelle gestione grafico'!$H$9"
    ActiveChart.SeriesCollection(11).Values = "='Tabelle gestione grafico'!$I$9"
    ActiveSheet.ChartObjects("Grafico 4").Activate
    ActiveChart.SeriesCollection(11).Select
    ActiveChart.SeriesCollection(8).HasErrorBars = True
    ActiveSheet.ChartObjects("Grafico 4").Activate
    ActiveChart.SeriesCollection(11).ErrorBars.Select
    ActiveChart.SeriesCollection(11).ErrorBar Direction:=xlY, Include:= _
        xlMinusValues, Type:=xlFixedValue, Amount:=1
    ActiveChart.SeriesCollection(11).ErrorBars.EndStyle = xlNoCap
    ActiveChart.SeriesCollection(11).ErrorBar Direction:=xlY, Include:= _
        xlMinusValues, Type:=xlPercent, Amount:=5
    ActiveChart.SeriesCollection(11).ErrorBar Direction:=xlY, Include:= _
        xlMinusValues, Type:=xlPercent, Amount:=100
    ActiveSheet.ChartObjects("Grafico 4").Activate
    ActiveChart.SeriesCollection(11).ErrorBars.Select
    ActiveSheet.ChartObjects("Grafico 4").Activate
    ActiveChart.SeriesCollection(11).Select
    ActiveSheet.ChartObjects("Grafico 4").Activate
    ActiveChart.SeriesCollection(11).ApplyDataLabels
    ActiveSheet.ChartObjects("Grafico 4").Activate
    ActiveChart.SeriesCollection(11).DataLabels.Select
    Selection.Position = xlLabelPositionCenter
End Sub

I think that I can use this for now, should it work.. right?

At least Office 2007!

Share this post


Link to post
Share on other sites

If you translate it to AutoIt it should work.

ActiveChart.SeriesCollection(11).ErrorBar Direction:=xlY, Include:=xlMinusValues, Type:=xlPercent, Amount:=100
should become something like:
ActiveChart.SeriesCollection(11).ErrorBar($xlY, $xlMinusValues, $xlPercent, 100)
(but I'm not 100% sure - I will have to test it tomorrow)

Can you post a screenshot of the resulting Excel chart? So we can test that we get the same result when we put the error bars into a function of the UDF.


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2016-08-18 - Version 1.4.6.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (2016-05-09 - Version 1.2.0.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2015-04-01 - Version 0.4.0.0) - Download - General Help & Support - Example Scripts
Excel - Example Scripts - Wiki
Word - Wiki
Tutorials:
ADO - Wiki

 

Share this post


Link to post
Share on other sites

This

Sub Macro6()

    Range("A5:B5").Select
    ActiveSheet.Shapes.AddChart.Select
    ActiveChart.SetSourceData Source:=Range("'Foglio1'!$A$5:$B$5")
    ActiveChart.ChartType = xlXYScatter
    ActiveChart.SeriesCollection(1).Select
    ActiveChart.SeriesCollection(1).HasErrorBars = True
    ActiveChart.SeriesCollection(1).ErrorBars.Select
    ActiveChart.SeriesCollection(1).ErrorBars.EndStyle = xlNoCap
    ActiveChart.SeriesCollection(1).ErrorBar Direction:=xlY, Include:= _
        xlMinusValues, Type:=xlFixedValue, Amount:=1
    ActiveChart.ChartArea.Select
    ActiveChart.SeriesCollection(1).ApplyDataLabels

End Sub

generates

Posted Image

but macro does not:

  • apply the styles
  • center the label
  • delete the horizontal error bar
Posted Image

Thanks

Share this post


Link to post
Share on other sites

Not perfect, but I hope it's a good start:

#include <ExcelChart.au3>

; *****************************************************************************
; Create example environment
; *****************************************************************************
Global $aExcel = _XLChart_Example(True, 0, -1, -1, -1)
If @error = 2 Then Exit MsgBox(16, "Excel Chart Example Script", "The installed Excel version is not supported by this UDF!" & @CRLF & "Version must be >= 12 (Excel 2007).")
If @error <> 0 Then Exit MsgBox(16, "Excel Chart Example Script", "Error " & @error & " returned by _XLChart_Example on line " & @ScriptLineNumber)

$iXLC_Debug = 2
Global $iTop
_ExcelWriteCell($aExcel[0], "", "B2:B5")                                            ; Clear all cells but one
_XLChart_SeriesSet($aExcel[1] .SeriesCollection(1), $xlLine)                        ; Remove markers
$aExcel[1].SeriesCollection(1).HasErrorBars = True                                    ; Activate Error bars
$aExcel[1].SeriesCollection(1).ErrorBars.EndStyle = $xlNoCap                        ; No cap
$aExcel[1].SeriesCollection(1).ErrorBar($xlY, $xlMinusValues, $xlPercent, 100)        ; Set error bars
$aExcel[1].SeriesCollection(1).ApplyDataLabels()                                    ; Appl
$aExcel[1].SeriesCollection(1).DataLabels.Position = 0                                ; Set the data labels above
_XLChart_LineSet($aExcel[1].SeriesCollection(1).ErrorBars, 1, 0x4A7EBB)                ; Set line color for the error bar
_XLChart_LineSet($aExcel[1].SeriesCollection(1).DataLabels, 2, 0x4A7EBB)            ; Set line color of the data label
$iTop = $aExcel[1].SeriesCollection(1).Points(5).DataLabel.Top
$aExcel[1].SeriesCollection(1).Points(5).DataLabel.Top = $iTop + 5                    ; Reposition the data label
$aExcel[1].SeriesCollection(1).Points(5).DataLabel.Text = "Test"                    ; Set text of a point of the data label

My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2016-08-18 - Version 1.4.6.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (2016-05-09 - Version 1.2.0.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2015-04-01 - Version 0.4.0.0) - Download - General Help & Support - Example Scripts
Excel - Example Scripts - Wiki
Word - Wiki
Tutorials:
ADO - Wiki

 

Share this post


Link to post
Share on other sites

#8 ·  Posted (edited)

Ok, as is I have:

>Running AU3Check (1.54.22.0)  from:C:Program Files (x86)AutoIt3
Z:AutoITsamplesErrorBar.au3(15,93) : WARNING: $xlNoCap: possibly used before declaration.
$aExcel[1].SeriesCollection(1).ErrorBars.EndStyle = $xlNoCap                        ; No cap
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
Z:AutoITsamplesErrorBar.au3(16,45) : WARNING: $xlY: possibly used before declaration.
$aExcel[1].SeriesCollection(1).ErrorBar($xlY,
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^

If I declare the vars, script works but I've two "Type mismatch" debug info.. If not styles aren't applied.

Probably not important now.

Bars does not cross X axis, in fact Display -> Direction is set to Both and not Negative and Error Amount is set to Fixed value: 5.0 and not Percentage: 100. Why? ;)

Label is not set correctly.. next step :)

Edited by maba

Share this post


Link to post
Share on other sites

Sorry, forgot to replace this two constants with their values.

$xlNoCap = 2 and $xlY = 1

I will post a screenshot of what I got with Excel 2010 tomorrow.


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2016-08-18 - Version 1.4.6.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (2016-05-09 - Version 1.2.0.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2015-04-01 - Version 0.4.0.0) - Download - General Help & Support - Example Scripts
Excel - Example Scripts - Wiki
Word - Wiki
Tutorials:
ADO - Wiki

 

Share this post


Link to post
Share on other sites

#10 ·  Posted (edited)

Ok, is the right way :)

Posted Image

A little problem with the label.. but it is good. On Excel 2007.

Edited by maba

Share this post


Link to post
Share on other sites

The positioning of the text is not perfect in Excel 2010 too. We could either play around with changing the "left" property or to change the datalabels.position to center. But in this case the line will end in the center of the box. If we use a filling for the box then the line will be invisible and the text will be centered automatically.

I will check how much of the errorbar properties can be set by a function.


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2016-08-18 - Version 1.4.6.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (2016-05-09 - Version 1.2.0.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2015-04-01 - Version 0.4.0.0) - Download - General Help & Support - Example Scripts
Excel - Example Scripts - Wiki
Word - Wiki
Tutorials:
ADO - Wiki

 

Share this post


Link to post
Share on other sites

Yes, box filling is perfect for me.

Thanks for your time!

Share this post


Link to post
Share on other sites

I'm going to post such an example tomorrow.


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2016-08-18 - Version 1.4.6.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (2016-05-09 - Version 1.2.0.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2015-04-01 - Version 0.4.0.0) - Download - General Help & Support - Example Scripts
Excel - Example Scripts - Wiki
Word - Wiki
Tutorials:
ADO - Wiki

 

Share this post


Link to post
Share on other sites

Hi maba,

here is the enhanced version:

#AutoIt3Wrapper_UseX64=n
#AutoIt3Wrapper_AU3Check_Parameters= -d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
#AutoIt3Wrapper_AU3Check_Stop_OnWarning=Y
#include-once
#include <ExcelChart.au3>

; *****************************************************************************
; Create example environment
; *****************************************************************************
Global $aExcel = _XLChart_Example(True, 0, -1, -1, -1)
If @error = 2 Then Exit MsgBox(16, "Excel Chart Example Script", "The installed Excel version is not supported by this UDF!" & @CRLF & "Version must be >= 12 (Excel 2007).")
If @error <> 0 Then Exit MsgBox(16, "Excel Chart Example Script", "Error " & @error & " returned by _XLChart_Example on line " & @ScriptLineNumber)

$iXLC_Debug = 2
Global $iTop
_ExcelWriteCell($aExcel[0], "", "B4:B5")                                            ; Clear all cells but one
$aExcel[1].SeriesCollection(1).HasErrorBars = True                                    ; Activate Error bars
$aExcel[1].SeriesCollection(1).ErrorBars.EndStyle = 2                                ; No cap: $xlNoCap
$aExcel[1].SeriesCollection(1).ErrorBar(1, $xlMinusValues, $xlPercent, 100)            ; Set error bars: ($xlY, $xlMinusValues, $xlPercent, 100)
$aExcel[1].SeriesCollection(1).ApplyDataLabels()                                    ; Apply the datalabels
$aExcel[1].SeriesCollection(1).DataLabels.Position = -4108                            ; Set the data labels centered: $xlLabelPositionCenter
_XLChart_LineSet($aExcel[1].SeriesCollection(1), Default, Default, False, Default, Default, $xlSheetHidden) ; Set series 1 to invisible
$aExcel[1].Legend.LegendEntries.Item(1).Delete()                                     ; Remove the legend entry for dataseries 1
_XLChart_LineSet($aExcel[1].SeriesCollection(1).ErrorBars, 1, 0x4A7EBB)                ; Set line color for the error bar
_XLChart_LineSet($aExcel[1].SeriesCollection(1).DataLabels, 1, 0)                    ; Set line color of the data label
_XLChart_FillSet($aExcel[1].SeriesCollection(1).DataLabels, 0x4A7EBB)                ; Fill the datalabel
$aExcel[1].SeriesCollection(1).Points(5).DataLabel.Text = "Test3"                    ; Set text of a point of the data label
$aExcel[1].SeriesCollection(1).Points(2).DataLabel.Text = "Test2"
$aExcel[1].SeriesCollection(1).Points(1).DataLabel.Text = "Test1" & @LF & "Next line"

My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2016-08-18 - Version 1.4.6.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (2016-05-09 - Version 1.2.0.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2015-04-01 - Version 0.4.0.0) - Download - General Help & Support - Example Scripts
Excel - Example Scripts - Wiki
Word - Wiki
Tutorials:
ADO - Wiki

 

Share this post


Link to post
Share on other sites

Yep! It works well!

When I'll finish my charts I'll post a full example.

THANKS!

Share this post


Link to post
Share on other sites

I'm just writing the _XLChart_ErrorBarSet function. The next version of the UDF will have this function.


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2016-08-18 - Version 1.4.6.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (2016-05-09 - Version 1.2.0.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2015-04-01 - Version 0.4.0.0) - Download - General Help & Support - Example Scripts
Excel - Example Scripts - Wiki
Word - Wiki
Tutorials:
ADO - Wiki

 

Share this post


Link to post
Share on other sites

One thing: error bars series is always in "background": both SeriesCollection(1) and SeriesCollection(n) are always set behind other series.

Share this post


Link to post
Share on other sites

You can change the plotorder of a data series within a chartgroup. It didn't work for the example - the markers of data series 2 always overwrite the errorbar.

Maybe this helps for your chart:

$aExcel[1].ChartGroups(1).SeriesCollection(2).PlotOrder = 1

My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2016-08-18 - Version 1.4.6.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (2016-05-09 - Version 1.2.0.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2015-04-01 - Version 0.4.0.0) - Download - General Help & Support - Example Scripts
Excel - Example Scripts - Wiki
Word - Wiki
Tutorials:
ADO - Wiki

 

Share this post


Link to post
Share on other sites
:) no way to set errorbar PlotOrder for now.

Share this post


Link to post
Share on other sites

Just for the records. When the error bars are moved to the secondary value axis they overwrite even the markers.

An example will follow!


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2016-08-18 - Version 1.4.6.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (2016-05-09 - Version 1.2.0.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2015-04-01 - Version 0.4.0.0) - Download - General Help & Support - Example Scripts
Excel - Example Scripts - Wiki
Word - Wiki
Tutorials:
ADO - Wiki

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now

  • Similar Content

    • aiter
      _Excel_RangeFind fails
      By aiter
      I have tried to use _Excel_RangFind, but it fails. It even fails in the example in the help file (see example 1).
      This the error
      >Running AU3Check (3.3.14.2) from:C:\Program Files (x86)\AutoIt3 input:C:\Program Files (x86)\AutoIt3\Examples\Helpfile\_Excel_RangeFind.au3 +>12:09:10 AU3Check ended.rc:0 >Running:(3.3.14.2):C:\Program Files (x86)\AutoIt3\autoit3.exe "C:\Program Files (x86)\AutoIt3\Examples\Helpfile\_Excel_RangeFind.au3" --> Press Ctrl+Alt+Break to Restart or Ctrl+Break to Stop "C:\Program Files (x86)\AutoIt3\Include\Excel.au3" (656) : ==> The requested action with this object has failed.: $aResult[$iIndex][1] = $oMatch.Name.Name $aResult[$iIndex][1] = $oMatch^ ERROR My own code fails with a similar message
      Local $aResult = _Excel_RangeFind($oWorkbook, "john") _ArrayDisplay($aResult) Help please.
       
    • jloyzaga
      _ExcelReadSheetToArray
      By jloyzaga
      I used to be able to do this below - I obviously have updated my copy of autoit so what do I use in its place?
       
      Dim $aArrayAUT = _ExcelReadSheetToArray($oExcel1)
    • SorryButImaNewbie
      ExcelUDF _RangeInsert (SOLVED)
      By SorryButImaNewbie
      Hello esteem users of this forum!
      I have a little problem with the _excel_rangeinsert.
      I organize an array in the excel (like from A:8 to S:114) with rangesort. I make it ascending according to a code first, then by a country as follow:
      _Excel_RangeSort($ExcelObject, Default, $ColumnOfArrayStart & $CellNumb & ":" & $EndColumnOfArray & $MelysegSzamlalo, $KNKODoszlop & ":" & $KNKODoszlop,$xlAscending,Default,$xlYes,Default,$xlSortColumns,$RENDTAGALLAMoszlop & ":" & $RENDTAGALLAMoszlop,$xlAscending) If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeSort Example 1", "Error sorting data." & @CRLF & "@error = " & @error & ", @extended = " & @extended) ;MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeSort Report", "Data successfully sorted in range" & $ColumnOfArrayStart & $CellNumb & ":" & $EndColumnOfArray & $MelysegSzamlalo) where $KNKODoszlop is holding the latter of the ID code or somethingcolumn, while $RENDTAGALLAMoszlop is the country code columns latter (PL, UK etc.). This happens without a glitch.
      Now I try to insert 2 new rows everywhere where a) the KNKOD changes, or b ) if the KNKOD the same but the country code is different.
      To do this I played around with this code: (after failing first to do both I try to make it work with one for start)
      Local $CellaOlvasoSzamlalo = $CellNumb + 1 ;MsgBox($MB_SYSTEMMODAL, "Értesítés", "A $CellaOlvasoSzamlalo : " & $CellaOlvasoSzamlalo ) Do Local $KNKODOlvaso1 = _Excel_RangeRead($ExcelObject, Default, $KNKODoszlop & $CellaOlvasoSzamlalo) Local $KNKODOlvaso2 = _Excel_RangeRead($ExcelObject, Default, $KNKODoszlop & $CellaOlvasoSzamlalo + 1) If $KNKODOlvaso1 <> $KNKODOlvaso2 Then _Excel_RangeInsert($ExcelObject, $CellaOlvasoSzamlalo + 1 & ":2") EndIf $CellaOlvasoSzamlalo = $CellaOlvasoSzamlalo + 1 Until $KNKODOlvaso2 = "" ;and $RENDTAGALLAMOlvaso2 = "" So I have the $Cellnumb which contains the first row of the array im working with (the header, with titels like countrycode) from before this part of the code (Local, in the same function, I tried to cast it to Int, results are the same if I do, It should be int anyway) from it, I "calculate" "$CellaOlvasoSzamlalo" (sorry for Hungarian names ) Then use that to create a Do Until loop to check if the result of a cell is different from the cell beneth it in the KNKOD column, if its different, it should insert 2 rows between them. At least in my mind. After that it incrase the CellaOlvasoSzamlalo to go down to the next cell, and do this until the cell it reads is empty (and of the array).
       
      I tried to play around with a few different ways, the best I could achive was that it inserted 9 rows to the 2. row. (there were 9 different KNKOD in my test excel). 
      I'm not sure what mi missing, I think that the rangeinsert $Range is read as: "number1:number2" where number1 is the row where I want to insert while number2 is how many rows correct?
      Anyway, I welcome any help or nudge of direction or insight if someone is willing to help.
      Thank you, and have a nice life
    • PINTO1927
      GUICtrlCreateListView Excel
      By PINTO1927
      Hello guys,
      I built a gui where a GUICtrlCreateListView with two columns is present.
      Through an "Import" button I would be able to import the contents of an .xls or .txt.
      Can you help me?
      Thank's
    • jloyzaga
      trying to do this in vbs - no go - creat dropdown list
      By jloyzaga
      I'm trying to read an excel spreadsheet(SWW_TestFlow, Worksheet=Controller) and creating a dropdown list from all the cell values within a specific column("G").   
      I would like to have the dropdown behave in such a way as to allow multiple selections and for all those selections to be written to a file.
      I attached a file I started with to experiment with gui and controls etc but got totally lost.......
      Can somebody help me?
      Joe
      multi-new.au3