DeltaVMan Posted July 4, 2016 Posted July 4, 2016 Summary: I want to use AutoIT to generate a flow chart in Excel by connecting shapes. Issue: I cannot get AutoIT to manipulate connector lines to connect shapes. Details: Excel 2016, AutoIT Version 3.5.4 Background: If I create flowchart shapes in an Excel Spreadsheet: Step Shape "Step1", Decision Shape "Trans1", and Connector Shape "Step1_To_Trans1" the following Excel VBA Macro will connect "Step1" to "Trans1". Sub Macro16() ActiveSheet.Shapes.Range(Array("Step-1_To_Trans-1")).Select Selection.ShapeRange.ConnectorFormat.BeginConnect ActiveSheet.Shapes("Step1"), 3 Selection.ShapeRange.ConnectorFormat.EndConnect ActiveSheet.Shapes("Trans1"), 1 Selection.ShapeRange.RerouteConnections End Sub I cannot seem to make the "ShapeRange.ConnectorFormat.BeginConnect" Method work in AutoIT. AutoIT Function from attached code shown below: Func AddConnector_Function($Connector_Type, $Begin_X, $End_X, $Begin_Y, $End_Y, $Begin_Name, $End_Name) $oExcel.Sheets ("Flow_Diagram" ).Select Local $Connector_Name = $Begin_Name & "_To_" & $End_Name With $oExcel $BeginObject = .ActiveSheet.Shapes.Range($Begin_Name) $EndObject = .ActiveSheet.Shapes.Range($End_Name) .ActiveSheet.Shapes.AddConnector($Connector_Type, $Begin_X, $End_X, $Begin_Y, $End_Y).Select ;Connector type, Begin X location, End X location, Begin Y location, End Y location $ConnectorObject = .Selection.ShapeRange $ConnectorObject.Name = $Connector_Name $BeginObject.Select $ConnectorObject.ConnectorFormat.BeginConnect = $BeginObject.Name & ", " & 3 $EndObject.Select $ConnectorObject.ConnectorFormat.EndConnect = $EndObject.Name & ", " & 1 $ConnectorObject.Select $ConnectorObject.RerouteConnections EndWith EndFunc Flow Diagram.xlsx Connect Shapes Example.au3
water Posted July 4, 2016 Posted July 4, 2016 (edited) BeginConnect is a method so you need to pass the parameters like this: $ConnectorObject.ConnectorFormat.BeginConnect($BeginObject.Name, 3) Edited July 4, 2016 by water DeltaVMan 1 My UDFs and Tutorials: Spoiler UDFs: Active Directory (NEW 2024-07-28 - Version 1.6.3.0) - Download - General Help & Support - Example Scripts - Wiki ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki Task Scheduler (2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki Standard UDFs: Excel - Example Scripts - Wiki Word - Wiki Tutorials: ADO - Wiki WebDriver - Wiki
DeltaVMan Posted July 4, 2016 Author Posted July 4, 2016 I had tried the code shown below with no luck. I receive error message: : ==> The requested action with this object has failed.: $ConnectorObject.ConnectorFormat.BeginConnect($End_Name, 3) $ConnectorObject.ConnectorFormat^ ERROR >Exit code: 1 Time: 22.88 I even verified with a message box that the $Begin_Name is being read correctly "Step1". Func AddConnector_Function($Connector_Type, $Begin_X, $End_X, $Begin_Y, $End_Y, $Begin_Name, $End_Name) $oExcel.Sheets ("Flow_Diagram" ).Select Local $Connector_Name = $Begin_Name & "_To_" & $End_Name With $oExcel $BeginObject = .ActiveSheet.Shapes.Range($Begin_Name) $EndObject = .ActiveSheet.Shapes.Range($End_Name) .ActiveSheet.Shapes.AddConnector($Connector_Type, $Begin_X, $End_X, $Begin_Y, $End_Y).Select ;Connector type, Begin X location, End X location, Begin Y location, End Y location $ConnectorObject = .Selection.ShapeRange $ConnectorObject.Name = $Connector_Name Msgbox(0,"debug", "$Begin_Name Object Name is " & $Begin_Name) $ConnectorObject.ConnectorFormat.BeginConnect($End_Name, 3) $ConnectorObject.ConnectorFormat.EndConnect($EndObject, 1) $ConnectorObject.RerouteConnections EndWith EndFunc
AutoBert Posted July 4, 2016 Posted July 4, 2016 3 hours ago, DeltaVMan said: AutoIT Version 3.5.4 This version is unknown, use actual stable. DeltaVMan 1
water Posted July 5, 2016 Posted July 5, 2016 Add a COM error handler to your script to get more detailed error information. Check ObjEvent in the help file to get an example. DeltaVMan 1 My UDFs and Tutorials: Spoiler UDFs: Active Directory (NEW 2024-07-28 - Version 1.6.3.0) - Download - General Help & Support - Example Scripts - Wiki ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki Task Scheduler (2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki Standard UDFs: Excel - Example Scripts - Wiki Word - Wiki Tutorials: ADO - Wiki WebDriver - Wiki
DeltaVMan Posted July 5, 2016 Author Posted July 5, 2016 Thanks to "Water" for the COM error handler info! I was trying to pass text $Begin_Name instead of an object type (.ActiveSheet.Shapes($Begin_Name) in the Method $ConnectorObject.ConnectorFormat.BeginConnect. Below is the updated AddConnector_Function that works! Func AddConnector_Function($Connector_Type, $Begin_X, $End_X, $Begin_Y, $End_Y, $Begin_Name, $End_Name) ; Error monitoring. This will trap all COM errors while alive. Local $oErrorHandler = ObjEvent("AutoIt.Error", "ErrFunc") $oExcel.Sheets ("Flow_Diagram" ).Select Local $Connector_Name = $Begin_Name & "_To_" & $End_Name Local $Connector_Top = 1 Local $Connector_Right = 2 Local $Connector_Bottom = 3 Local $Connector_Left = 4 With $oExcel .ActiveSheet.Shapes.AddConnector($Connector_Type, $Begin_X, $End_X, $Begin_Y, $End_Y).Select ;Connector type, Begin X location, End X location, Begin Y location, End Y location $ConnectorObject = .Selection.ShapeRange $ConnectorObject.Name = $Connector_Name $ConnectorObject.ConnectorFormat.BeginConnect(.ActiveSheet.Shapes($Begin_Name), $Connector_Bottom) $ConnectorObject.ConnectorFormat.EndConnect(.ActiveSheet.Shapes($End_Name), $Connector_Top) $ConnectorObject.RerouteConnections ;If @error Then Return EndWith ; Check for errors If @error Then MsgBox($MB_SYSTEMMODAL, "COM Error", "@error is set to COM error number." & @CRLF & "@error = 0x" & Hex(@error)) #forceref $oErrorHandler EndFunc
water Posted July 7, 2016 Posted July 7, 2016 Glad you could solve your problem. BTW: When posting code could you please use AutoIt code tags (Button "<>" in the editor)? Makes reading your code much easier My UDFs and Tutorials: Spoiler UDFs: Active Directory (NEW 2024-07-28 - Version 1.6.3.0) - Download - General Help & Support - Example Scripts - Wiki ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki Task Scheduler (2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki Standard UDFs: Excel - Example Scripts - Wiki Word - Wiki Tutorials: ADO - Wiki WebDriver - Wiki
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now