Quantumation

loop in a loop Error

10 posts in this topic

#1 ·  Posted (edited)

#include <AD.au3>
#include <Array.au3>

;~ GUI INCLUDES
#include <GuiEdit.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
Global $Form1_1 = GUICreate("Get Managers", 592, 516, -1, -1)
Global $Edit1 = GUICtrlCreateEdit("", 16, 112, 177, 361)
GUICtrlSetData(-1, "")
Global $Edit2 = GUICtrlCreateEdit("", 200, 112, 385, 177)
GUICtrlSetData(-1, "")
Global $Label1 = GUICtrlCreateLabel("GROUP NAMES", 16, 88, 135, 24)
GUICtrlSetFont(-1, 12, 800, 4, "MS Sans Serif")
Global $Label2 = GUICtrlCreateLabel("Group Name - Manager Names", 200, 88, 251, 24)
GUICtrlSetFont(-1, 12, 800, 4, "MS Sans Serif")
Global $Button1 = GUICtrlCreateButton("Get Managed By", 32, 52, 163, 31)
GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
Global $Button2 = GUICtrlCreateButton("Copy Automated", 456, 296, 99, 25)
Global $Button3 = GUICtrlCreateButton("CLEAR ALL", 440, 24, 83, 25)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
Global $Label3 = GUICtrlCreateLabel("Created by - Clint Smith", 185, 480, 212, 24)
GUICtrlSetFont(-1, 12, 800, 0, "Century")
Global $Label4 = GUICtrlCreateLabel("Enter group names with no leading spaces", 16, 8, 244, 17)
GUICtrlSetFont(-1, 8, 800, 4, "MS Sans Serif")
Global $Label5 = GUICtrlCreateLabel("Each Group name should be on its own line", 16, 32, 250, 17)
GUICtrlSetFont(-1, 8, 800, 4, "MS Sans Serif")
Global $Edit4 = GUICtrlCreateEdit("", 200, 328, 385, 145)
GUICtrlSetData(-1, "")
Global $Label8 = GUICtrlCreateLabel("Automated Groups", 200, 304, 156, 24)
GUICtrlSetFont(-1, 12, 800, 4, "MS Sans Serif")
Global $Button4 = GUICtrlCreateButton("Copy All Output", 464, 80, 99, 25)
Global $Label9 = GUICtrlCreateLabel("This will Clear all boxes", 328, 32, 112, 17)
Global $Label6 = GUICtrlCreateLabel("Input", 160, 88, 28, 17)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Button1
            GetManBy()
        Case $Button3

    EndSwitch
WEnd

Func GetManBy()
    Local $dispname[0]
    Local $groupnames = StringSplit(GUICtrlRead($Edit1), @CR)
    _ArrayDisplay($groupnames)
    _AD_Open()
    If @error Then Exit MsgBox(16, "Active Directory", "Function _AD_Open encountered a problem. @error = " & @error & ", @extended = " & @extended)

    For $i = 1 To $groupnames[0]

        $GRPname = _AD_GetObjectProperties($groupnames[$i], "displayname")
        If $GRPname = @error Then Return MsgBox(16, "Group Not Found", $groupnames[$i] & " was not found")
        $info = _AD_GetObjectProperties($groupnames[$i], "info")
        Global $Managedby = _AD_GetObjectProperties($groupnames[$i], "managedBy,msExchCoManagedByLink")
            If $Managedby = @error Then
                MsgBox(1, "No Manager for group", $groupnames[$i] & " - Has no managers")
            EndIf
            _ArrayDisplay($Managedby)
            
         
        For $f = 1 To $Managedby[0][0]
            _ArrayDisplay($Managedby)
;~          Here is the problem below.
            $add = _AD_FQDNToDisplayname($Managedby[$f][1]) 
            _ArrayAdd($dispname, $add, 0)
        Next

        $Managers = _ArrayToString($dispname, ",")
        $str = StringInStr($info[1][1], "automated")
        If $str = 0 Then
        GUICtrlSetData($Edit2, $GRPname & " - " & $Managers & @CRLF)
        ElseIf $str > 0 Then
        GUICtrlSetData($Edit4, $GRPname & " - Automated Group" & @CRLF)
        EndIf
    Next
    _AD_Close()
EndFunc   ;==>GetManBy

I have two groups that i created with all the correct properties to make sure this script has data in all fields.

Basically i'm trying to run a for look inside a for loop and the loops aren't playing well together for some reason. Can anyone help?

Below is the error I get when i try to run this script.

"C:\Users\casmith\Documents\Autoit Scripts\GetManAndCoMan.au3" (72) : ==> Subscript used on non-accessible variable.:
For $f = 1 To $Managedby[0][0]
For $f = 1 To $Managedby^ ERROR
->04:00:21 AutoIt3.exe ended.rc:1
+>04:00:21 AutoIt3Wrapper Finished.
>Exit code: 1    Time: 10.42

Edited by Quantumation
added proper error

Share this post


Link to post
Share on other sites



Extend your script by inserting some debuglines:

ConsoleWrite('$Managedby[0][0]=' & $Managedby[0][0] & @CRLF)
        For $f = 1 To $Managedby[0][0]
            ConsoleWrite($f & ': ' & $Managedby[$f][1] & @CRLF)
            _ArrayDisplay($Managedby)
;~          Here is the problem below.
            $add = _AD_FQDNToDisplayname($Managedby[$f][1])
            ConsoleWrite($add&@TAB&@error&' '&@extended)
            _ArrayAdd($dispname, $add); the column is only in 2D necesarry: , 0)
        Next

The console output will help to find and solve the problem.

Share this post


Link to post
Share on other sites

@AutoBert Thank you, here is what i received but as i look through it i'm not quite sure why it's stopping there.

--> Press Ctrl+Alt+Break to Restart or Ctrl+Break to Stop
$Managedby[0][0]=4
1: CN=Clint Smith,OU=Service Desk
Clint Smith          0 02: CN=Tony Alzola,OU=Service Desk
Tony Alzola         0 03: CN=Ryan McIntosh,OU=Service Desk
Ryan McIntosh    0 04: CN=Kody Courter,OU=Service Desk
Kody Courter       0 0"C:\Users\casmith\Documents\Autoit Scripts\GetManAndCoMan.au3" (72) : ==> Subscript used on non-accessible variable.:
ConsoleWrite('$Managedby[0][0]=' & $Managedby[0][0] & @CRLF)
ConsoleWrite('$Managedby[0][0]=' & $Managedby^ ERROR
->04:10:46 AutoIt3.exe ended.rc:1
+>04:10:46 AutoIt3Wrapper Finished.
>Exit code: 1    Time: 27.05

 

It seems to me that when the Second loop happens for the $i loop it doesn't have anything in the $Managedby[0][0] variable.

Is there something missing that's needed for nesting For loops?

Share this post


Link to post
Share on other sites

The 2. loop is currently starting in groups with no managers. So you have to change like this:

#include <AD.au3>
#include <Array.au3>

;~ GUI INCLUDES
#include <GuiEdit.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
Global $Form1_1 = GUICreate("Get Managers", 592, 516, -1, -1)
Global $Edit1 = GUICtrlCreateEdit("", 16, 112, 177, 361)
GUICtrlSetData(-1, "")
Global $Edit2 = GUICtrlCreateEdit("", 200, 112, 385, 177)
GUICtrlSetData(-1, "")
Global $Label1 = GUICtrlCreateLabel("GROUP NAMES", 16, 88, 135, 24)
GUICtrlSetFont(-1, 12, 800, 4, "MS Sans Serif")
Global $Label2 = GUICtrlCreateLabel("Group Name - Manager Names", 200, 88, 251, 24)
GUICtrlSetFont(-1, 12, 800, 4, "MS Sans Serif")
Global $Button1 = GUICtrlCreateButton("Get Managed By", 32, 52, 163, 31)
GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
Global $Button2 = GUICtrlCreateButton("Copy Automated", 456, 296, 99, 25)
Global $Button3 = GUICtrlCreateButton("CLEAR ALL", 440, 24, 83, 25)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
Global $Label3 = GUICtrlCreateLabel("Created by - Clint Smith", 185, 480, 212, 24)
GUICtrlSetFont(-1, 12, 800, 0, "Century")
Global $Label4 = GUICtrlCreateLabel("Enter group names with no leading spaces", 16, 8, 244, 17)
GUICtrlSetFont(-1, 8, 800, 4, "MS Sans Serif")
Global $Label5 = GUICtrlCreateLabel("Each Group name should be on its own line", 16, 32, 250, 17)
GUICtrlSetFont(-1, 8, 800, 4, "MS Sans Serif")
Global $Edit4 = GUICtrlCreateEdit("", 200, 328, 385, 145)
GUICtrlSetData(-1, "")
Global $Label8 = GUICtrlCreateLabel("Automated Groups", 200, 304, 156, 24)
GUICtrlSetFont(-1, 12, 800, 4, "MS Sans Serif")
Global $Button4 = GUICtrlCreateButton("Copy All Output", 464, 80, 99, 25)
Global $Label9 = GUICtrlCreateLabel("This will Clear all boxes", 328, 32, 112, 17)
Global $Label6 = GUICtrlCreateLabel("Input", 160, 88, 28, 17)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Button1
            GetManBy()
        Case $Button3

    EndSwitch
WEnd

Func GetManBy()
    Local $dispname[0]
    Local $groupnames = StringSplit(GUICtrlRead($Edit1), @CR)
    _ArrayDisplay($groupnames)
    _AD_Open()
    If @error Then Exit MsgBox(16, "Active Directory", "Function _AD_Open encountered a problem. @error = " & @error & ", @extended = " & @extended)

    For $i = 1 To $groupnames[0]

        $GRPname = _AD_GetObjectProperties($groupnames[$i], "displayname")
        If $GRPname = @error Then Return MsgBox(16, "Group Not Found", $groupnames[$i] & " was not found")
        $info = _AD_GetObjectProperties($groupnames[$i], "info")
        Global $Managedby = _AD_GetObjectProperties($groupnames[$i], "managedBy,msExchCoManagedByLink")
        If $Managedby = @error Then
            MsgBox(1, "No Manager for group", $groupnames[$i] & " - Has no managers")
            ;EndIf              ;deleted by autoBert
        Else ;inserted by autoBert
            _ArrayDisplay($Managedby)


            ConsoleWrite('$Managedby[0][0]=' & $Managedby[0][0] & @CRLF)
            For $f = 1 To $Managedby[0][0]
                ConsoleWrite($f & ': ' & $Managedby[$f][1] & @CRLF)
                _ArrayDisplay($Managedby)
;~          Here is the problem below.
                $add = _AD_FQDNToDisplayname($Managedby[$f][1])
                ConsoleWrite($add & @TAB & @error & ' ' & @extended)
                _ArrayAdd($dispname, $add); the column is only in 2D necesarry: , 0)
            Next
        EndIf ;inserted by autoBert may be must be moved befor 91) Next
        $Managers = _ArrayToString($dispname, ",")
        $str = StringInStr($info[1][1], "automated")
        If $str = 0 Then
            GUICtrlSetData($Edit2, $GRPname & " - " & $Managers & @CRLF)
        ElseIf $str > 0 Then
            GUICtrlSetData($Edit4, $GRPname & " - Automated Group" & @CRLF)
        EndIf
    Next
    _AD_Close()
EndFunc   ;==>GetManBy

 

Share this post


Link to post
Share on other sites

Thank you for your quick replies @AutoBert

Unfortunately that code still produces the same error.

--> Press Ctrl+Alt+Break to Restart or Ctrl+Break to Stop
$Managedby[0][0]=4
1: CN=Clint Smith,OU=Service Desk
Clint Smith    0  02: CN=Tony Alzola,OU=Service Desk
Tony Alzola    0  03: CN=Ryan McIntosh,OU=Service Desk,
Ryan McIntosh    0  04: CN=Kody Courter,OU=Service Desk
Kody Courter    0  0"C:\Users\casmith\Documents\Autoit Scripts\GetManAndCoMan.au3" (73) : ==> Subscript used on non-accessible variable.:
ConsoleWrite('$Managedby[0][0]=' & $Managedby[0][0] & @CRLF)
ConsoleWrite('$Managedby[0][0]=' & $Managedby^ ERROR
->04:45:06 AutoIt3.exe ended.rc:1
+>04:45:06 AutoIt3Wrapper Finished.
>Exit code: 1    Time: 4.911

 

It's as though the 2nd loop just wants to keep going even after it's met its threshold. It hits 4 but then it does one more and I can't figure out why.

i've tested the second loop in a different script all by itself and it works just fine.

#include <AD.au3>
#include <Array.au3>
_AD_Open()
Global $Managedby = _AD_GetObjectProperties("TESTGROUP1", "managedBy,msExchCoManagedByLink")
    Global $dispname[0]
    For $f = 1 To $Managedby[0][0]
        $add = _AD_FQDNToDisplayname($Managedby[$f][1])
        _ArrayAdd($dispname, $add, 0)
        $strarray = _ArrayToString($dispname, ",")
    Next
    $strarray = _ArrayToString($dispname, ",")
_AD_Close()
;~This works like a charm

 

This one is really baffling.

 

Share this post


Link to post
Share on other sites
#include <AD.au3>
#include <Array.au3>

;~ GUI INCLUDES
#include <GuiEdit.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
Global $Form1_1 = GUICreate("Get Managers", 592, 516, -1, -1)
Global $Edit1 = GUICtrlCreateEdit("", 16, 112, 177, 361)
GUICtrlSetData(-1, "")
Global $Edit2 = GUICtrlCreateEdit("", 200, 112, 385, 177)
GUICtrlSetData(-1, "")
Global $Label1 = GUICtrlCreateLabel("GROUP NAMES", 16, 88, 135, 24)
GUICtrlSetFont(-1, 12, 800, 4, "MS Sans Serif")
Global $Label2 = GUICtrlCreateLabel("Group Name - Manager Names", 200, 88, 251, 24)
GUICtrlSetFont(-1, 12, 800, 4, "MS Sans Serif")
Global $Button1 = GUICtrlCreateButton("Get Managed By", 32, 52, 163, 31)
GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
Global $Button2 = GUICtrlCreateButton("Copy Automated", 456, 296, 99, 25)
Global $Button3 = GUICtrlCreateButton("CLEAR ALL", 440, 24, 83, 25)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
Global $Label3 = GUICtrlCreateLabel("Created by - Clint Smith", 185, 480, 212, 24)
GUICtrlSetFont(-1, 12, 800, 0, "Century")
Global $Label4 = GUICtrlCreateLabel("Enter group names with no leading spaces", 16, 8, 244, 17)
GUICtrlSetFont(-1, 8, 800, 4, "MS Sans Serif")
Global $Label5 = GUICtrlCreateLabel("Each Group name should be on its own line", 16, 32, 250, 17)
GUICtrlSetFont(-1, 8, 800, 4, "MS Sans Serif")
Global $Edit4 = GUICtrlCreateEdit("", 200, 328, 385, 145)
GUICtrlSetData(-1, "")
Global $Label8 = GUICtrlCreateLabel("Automated Groups", 200, 304, 156, 24)
GUICtrlSetFont(-1, 12, 800, 4, "MS Sans Serif")
Global $Button4 = GUICtrlCreateButton("Copy All Output", 464, 80, 99, 25)
Global $Label9 = GUICtrlCreateLabel("This will Clear all boxes", 328, 32, 112, 17)
Global $Label6 = GUICtrlCreateLabel("Input", 160, 88, 28, 17)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Button1
            GetManBy()
        Case $Button3

    EndSwitch
WEnd

Func GetManBy()
    _AD_Open()
    Local $dispname[0]
    Local $groupnames = StringSplit(GUICtrlRead($Edit1), @CR)
;~  _ArrayDisplay($groupnames)

    If @error Then Exit MsgBox(16, "Active Directory", "Function _AD_Open encountered a problem. @error = " & @error & ", @extended = " & @extended)

    For $i = 1 To $groupnames[0]

        $GRPname = _AD_GetObjectProperties($groupnames[$i], "displayname")
        If $GRPname = @error Then Return MsgBox(16, "Group Not Found", $groupnames[$i] & " was not found")
        $info = _AD_GetObjectProperties($groupnames[$i], "info")
        Global $Managedby = _AD_GetObjectProperties($groupnames[$i], "managedBy,msExchCoManagedByLink")
        If $Managedby = @error Then
            MsgBox(1, "No Manager for group", $groupnames[$i] & " - Has no managers")
;~      EndIf
        Else
;~      _ArrayDisplay($Managedby)
            ConsoleWrite('$Managedby[0][0]=' & $Managedby[0][0] & @CRLF)
            For $f = 1 To $Managedby[0][0]
                ConsoleWrite($f & ': ' & $Managedby[$f][1] & @CRLF)
                _ArrayDisplay($Managedby)
;~          Here is the problem below.
                $add = _AD_FQDNToDisplayname($Managedby[$f][1])
                ConsoleWrite($add & @TAB & @error & '||' & @extended)
                _ArrayAdd($dispname, $add)
            Next
        EndIf
        $Managers = _ArrayToString($dispname, ",")
        $str = StringInStr($info[1][1], "automated")
        If $str = 0 Then
            GUICtrlSetData($Edit2, $GRPname & " - " & $Managers & @CRLF)
        ElseIf $str > 0 Then
            GUICtrlSetData($Edit4, $GRPname & " - Automated Group" & @CRLF)
        EndIf
    Next
    _AD_Close()
EndFunc   ;==>GetManBy

Just for reference here is the code i used with the last error I posted.

Share this post


Link to post
Share on other sites

Sorry, i was a little bit to quick. Changine line 68 to

If @error Then

should solve the problem. I have no AD so i can not test it myself.

Share this post


Link to post
Share on other sites

That got me past that error. But I'm so curious...........How?

Why would that make such a difference?

Share this post


Link to post
Share on other sites

#9 ·  Posted (edited)

I don't know this specific function for AD but it is probably because if there is no manager only the first value of the array 0 is created to show 0 results.  Then your loop tries to access 1 as in "for 1 to ..." and there is no element in the array at that position so it throws the error.  If wondering why the specific change made a difference then I think it is because the array did not have a value of @error.  Instead, I think the @error flag was set.  

Edited by Jfish

Build your own poker game with AutoIt: pokerlogic.au3 | Learn To Program Using FREE Tools with AutoIt

Share this post


Link to post
Share on other sites

#10 ·  Posted (edited)

I have no Ad so i don't know the returned value of _AD_GetObjectProperties. But fact is $Managedby is no Array in case no managers found. And usualy when a function don't give the ecpected result @error and @extended are used to show show the error occured. 

The other way for you to solve is to test if returned variable type is the excpeted:

If Not IsArray($Managedby) Then
            MsgBox(1, "No Manager for group", $groupnames[$i] & " - Has no managers")
;~      EndIf
        Else
;~      _ArrayDisplay($Managedby)
            ConsoleWrite('$Managedby[0][0]=' & $Managedby[0][0] & @CRLF)
;.....

Your try for errorchecking:

If $Managedby = @error Then

only works if _AD_GetObjectProperties sets in case of an error return value of >=1 instead of a array.

As i saw you are using same (not working) method for errorchecking in line 65:

If $GRPname = @error Then Return MsgBox(16, "Group Not Found", $groupnames[$i] & " was not found")

you have to change it here also, may be in future a group with no displayname throw a error without (correct) handled.

In line 66 you use _AD_GetObjectProperties without any errorhandling, this may cause also future problems.

Edited by AutoBert

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

    • rootx
      By rootx
      I write this script to compare to array, well Do you have a better way to do it?
      #include <Constants.au3> #include <Array.au3> #include <File.au3> #include <MsgBoxConstants.au3> $a = FileSelectFolder("seleziona cartella A",@ScriptDir) $fold_A = _FileListToArrayRec($a,"*",2,1,0,1) $b = FileSelectFolder("seleziona cartella B",@ScriptDir) $fold_B = _FileListToArrayRec($b,"*",2,1,0,1) $tota = UBound($fold_A)-1 $totb = UBound($fold_B)-1 If $tota > $totb Then findx($fold_A,$fold_B) Else findx($fold_B,$fold_A) EndIf Func findx($min,$max) For $i = 0 To UBound($min)-1 $found = _ArraySearch($max, $min[$i]) If $found = -1 Then ConsoleWrite($min[$i]&@CRLF) EndIf Next EndFunc  
    • Jibberish
      By Jibberish
      I am trying to add data to an array and I keep getting the error "Subscript used on non-accessible variable ".
      #include <array.au3> ; Includes, etc ~ ~ ~ Local $aOptionsArray[3] $aOptionsArray = CheckboxesAndRadioButtons() _ArrayDisplay($aOptionsArray) Func CheckboxesAndRadioButtons() ; Create Checkboxes and Radio Buttons and read the results ~ ~ ~ ; Radio Buttons to Array ; $aOptions[0] = $bTestSelectForever ; $aOptions[1] = $bTestSelect3Times ; $aOptions[2] = $bTestSelectOnce If $bSelect1 = 1 Then $aOptions[0] = "True" Else $aOptions[0] = "False" <<< This is where the error occurs. EndIf If $bSelect2 = 1 Then $aOptions[1] = "True" Else $aOptions[1] = "False" EndIf If $bSelect3 = 1 Then $aOptions[2] = "True" Else $aOptions[2] = "False" EndIf Return $aOptions EndFunc Is putting data into an array while in a If - Then - Else illegal?
    • Nareshm
      By Nareshm
      How to repeat my script when my control class does not match ?
       
      My Script : winActivate ( " PS :: Version - 2.2.0.0  - [PS Bill]")                   ControlClick ( "PS :: Version - 2.2.0.0  - [PS Bill]", "", "[NAME:btnSavebyFP]")                   ControlSend(" PS :: Version - 2.2.0.0  - [PS Bill]", "", "[NAME:btnSavebyFP]", "{enter}")                   WinActive ("Verification Number Entry ::")                   ControlClick("Next >", "","[NAME:btnNext]") ;if   >>>> Control <<<<  does not match repeat my script, ;if match exit script  

      Class:    WindowsForm734a
      Instance:    15
      ClassnameNN:    WindowsForm34a15
      Name:    BillPrint
      Advanced (Class):    [NAME:BillPrint]
      ID:    7875
      Text:    
      Position:    39, 310
      Size:    1221, 306
      ControlClick Coords:    745, 20
      Style:    0x56010000
      ExStyle:    0x00000000
      Handle:    0x00000000000C0468
    • anoig
      By anoig
      Hi all, 

      First, I want to give a huge shout-out to the community. I'm completely self-taught, and have never had to actually ask a question before because the forum is that good at answering questions and explaining things. However, I'm kind of stumped here, and I've been stuck on this problem for almost a full day.

      I'm working on a script to populate drafts of deeds at work. I have the main GUI and  a function (ctrl($n) and read()) for adding fields to find and data to replace it with to an array for later use with _word_docfindreplace. All of that works. However, due to the way I have the forms set up, I need to create additional fields and info based on the data that's there. Specifically, if there's only one buyer, I need to add the field [Buyer1&2] and the data in $aArray_Base for [Buyer 1]. I also need to add a field [Buyer 2] and have a blank data set in the next column over in the array, and I need to do the same for the Seller. To this end, the function parties() sets boolean variables $2buyers and $2sellers accordingly. Then, I have buyers() and sellers() to populate the data. 

      The problem that I'm running into is that each function works... when ONLY the buyer 1 name field is filled, and when ONLY the seller 1 field is filled.

      So if I fill Buyer 1 Name and save it, the data is populated correctly. But when I fill Buyer 1 and Seller 1 name, only the buyer 1 data populates correctly. Worse, when I fill several fields, neither populate correctly. I have no idea why this happens. I've added messageboxes to debug throughout the entire process and can't pinpoint what's causing the issue. The entire script is below. The function(s) in question are buyers() and sellers(). Only Sellers() has messageboxes throughout.

      Can someone help walk me through what might be causing this and help me find a solution? Thanks a ton in advance, and sorry for the wall of text.
      -Anoig
       
    • SkysLastChance
      By SkysLastChance
      I am not sure why I am getting the this error on my second pass of the code.
      1 - $oWorkbook is not an object or not a workbook object
      Any help or advice on my code appreciated. 
      #include <Excel.au3> #include <Array.au3> #include <MsgBoxConstants.au3> Global $sExcelFile1 = FileOpenDialog("Choose/Create Excel File", @ScriptDir, "(*.xlsm)") Global $sExcelFile2 = FileOpenDialog("Choose/Create Excel File", @ScriptDir, "Excel Sheet (*.xlsx;*.xls)|All (*.*)") Global $vRow = 2 If FileExists($sExcelFile2) Then Global $oExcel2 = _Excel_Open () $oExcel2 = _Excel_BookOpen($oExcel2,$sExcelFile2) EndIF If FileExists($sExcelFile1) Then Global $oExcel1 = _Excel_Open () $oExcel1 = _Excel_BookOpen($oExcel1,$sExcelFile1,Default,Default,"2007") EndIF $oRead = _Excel_RangeRead ($oExcel2,"Untitled","A2",3) $oFind = _Excel_RangeFind ($oExcel1,$oRead,"E4:FD92",Default,$xlWhole) $Clip = _ArrayToClip($oFind,"",0,0,"",2,2) Send("{ScrollLock Off}") $hWnd = WinWait("[CLASS:XLMAIN]") ControlSend($hWnd, "", "", ("^g")) WinWait("[CLASS:bosa_sdm_XL9]") ; Go To ControlSend($hWnd, "", "", ("^v")) ControlSend($hWnd, "", "", ("{Enter}")) ControlSend($hWnD, "", "", "{Down " & $vRow & "}") Do $oTime = _Excel_RangeRead ($oExcel2,"Untitled","B2",3) If @error Then Exit MsgBox(0, "Error", "Error" & @CRLF & "@error = " & @error & ", @extended = " & @extended) MsgBox(0,"Test",$oTime) IF $oTime = "7:10:00 AM" Then $oCalls1 = _Excel_RangeRead ($oExcel2,Default,"C" & $vRow,3) $oCalls2 = _Excel_RangeRead ($oExcel2,Default,"D" & $vRow,3) ControlSend($hWnd, "", "", $oCalls1) ControlSend($hWnd, "", "", ("{RIGHT}")) ControlSend($hWnd, "", "", $oCalls2) $vRow = $vRow + 1 ContinueLoop Else $vRow = $vRow + 1 EndIf Until $vRow = 4 1.xlsm
      2.xlsx