padinski Posted September 17, 2015 Posted September 17, 2015 (edited) Hi all,As the title suggests. I have 2 spreadsheets with different information in both, however their is 1 common value to link the 2 spreadsheets together.What I want to do is have everything from column B in an array from workbook1, the script would loop through the array searching for that exact value in workbook2 in column A. If that value is found in workbook2, I need to copy information from 2 different cells that relate to that record from workbook2 back into workbook1.This is what I have so far but, just can't get the copying it the cell values from workbook2 into woorkbook 1.expandcollapse popup;----------------------------------------------------------------------------- ; Select filepath with message to display in FileOpenDialog. ;----------------------------------------------------------------------------- Local Const $sMessage = "Select workbook filepath." Local $sFilePath = FileOpenDialog($sMessage, "D:\Users\xxxxx\Documents\", "Excel (*.xls;*.xlsx;*.csv)|", $FD_FILEMUSTEXIST) ;----------------------------------------------------------------------------- ; Create application object or connect to an already running Excel instance ;----------------------------------------------------------------------------- Local $oAppl = _Excel_Open() If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Excel UDF:", "Error creating the Excel application object." & @CRLF & "@error = " & @error & ", @extended = " & @extended) ;----------------------------------------------------------------------------- ;open workbook1 ;----------------------------------------------------------------------------- $oWorkbook = _Excel_BookOpen($oAppl, $sFilepath, Default, Default, True) If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Excel UDF:", "Error opening '" & $oWorkbook & "'." & @CRLF & "@error = " & @error & ", @extended = " & @extended) ;----------------------------------------------------------------------------- ; Select filepath with message to display in FileOpenDialog. ;----------------------------------------------------------------------------- Local Const $sMessage2 = "Select workbook2 filepath." Local $sFilePath2 = FileOpenDialog($sMessage2, "D:\Users\xxxxx\Documents\", "Excel (*.xls;*.xlsx;*.csv)|", $FD_FILEMUSTEXIST) ;----------------------------------------------------------------------------- ;open workbook2 ;----------------------------------------------------------------------------- $oWorkbook2 = _Excel_BookOpen($oAppl, $sFilepath2, Default, Default, True) If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Excel UDF:", "Error opening '" & $oWorkbook & "'." & @CRLF & "@error = " & @error & ", @extended = " & @extended) ;----------------------------------------------------------------------------- ;Read array from workbook ;----------------------------------------------------------------------------- Local $aArray1 = _Excel_RangeRead($oWorkbook, Default) If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Excel UDF:", "Error reading from workbook." & @CRLF & "@error = " & @error & ", @extended = " & @extended) ;----------------------------------------------------------------------------- ; Turn on progress GUI ;----------------------------------------------------------------------------- ProgressOn("Progress", "data washing progress", "0%") ;----------------------------------------------------------------------------- ; counts the number of rows in the array ;----------------------------------------------------------------------------- $rows = UBound($aArray1) -1 ;----------------------------------------------------------------------------- ; script start ;----------------------------------------------------------------------------- for $c = 1 to $rows ;----------------------------------------------------------------------------- ; Progress calcualtions ;----------------------------------------------------------------------------- $p=($c-1)/$rows*100 ProgressSet($p,$c-1&" of "&$rows&" records processed") ;----------------------------------------------------------------------------- ; Find all id's as per value in column B from workbook in workbook2 ;----------------------------------------------------------------------------- _Excel_FilterSet($oWorkbook2, Default, Default, 1, ($aArray1[$c][1])) If @error Then ContinueLoop EndIf _Excel_RangeCopyPaste($oWorkbook2.Worksheets(1), "AM:AN") _Excel_FilterSet($oWorkbook, Default, Default, 2, ($aArray1[$c][1])) _Excel_RangeCopyPaste($oWorkbook.Activesheet, Default, "P", Default, $xlPasteValues) nextAnyone able to see where I have gone wrong or can suggest a better approach to do this? Edited September 17, 2015 by padinski
water Posted September 17, 2015 Posted September 17, 2015 Do you get an error or does it just not give the desired result? 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
junkew Posted September 17, 2015 Posted September 17, 2015 Why do you write this in autoit and not in vba macro. Much easier and much quicker. FAQ 31 How to click some elements, FAQ 40 Test automation with AutoIt, Multithreading CLR .NET Powershell CMDLets
padinski Posted September 17, 2015 Author Posted September 17, 2015 thanks for taking a look guys, just not the desired result Water.Junkew good point.FYI: I ended up just combining the two workbooks into one and having the data on 2 worksheets, just using the following array formula in excel:In cell P2 in Sheet1=INDEX('Sheet2'!AM:AM, MATCH(B2, 'Sheet2'!A:A, 0))In cell Q2 in Sheet1=INDEX('Sheet2'!AN:AN, MATCH(B2, 'Sheet2'!A:A, 0))
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