i've set vba code in excel asks user select second worksheet, searches value (a shared key linking 2 sets of data, found 6 columns after rng, want add retrieved value) in second table , adds value row column in original table. part of program adjust loop below.
it works fine if when leave in line activate curfile workbook. means screen flashing lot , forth between 2 workbooks. , once start getting hundreds or thousands of lines of data ridiculously slow.
when comment out line, value findcid doesn't change , seems keep on refilling same line, though value r updating. if after few loops add activate line in, resumes filling in results several lines down.
how can streamline this? using thisworkbook references explicitly defining curfile (curfile = activeworkbook.name) earlier doesn't seem go workbook next value search for, unless reactivate sheet.
do while r <= maxrows workbooks(curfile).worksheets("sheet1") set rng = .range(cells(r, c), cells(r, c)) end findcid = rng.offset(0, 6).value if trim(findcid) <> "" workbooks(fn) ' found earlier function .activate end sheets("sheet1").range("d:d") set foundcell = .find(what:=findcid) if not foundcell nothing pathlen = foundcell.offset(0, 2).value workbooks(curfile).sheets("sheet1").activate 'if comment out line doesn't work rng.value = pathlen msgbox "cid found in " & foundcell.address & " value " & pathlen else msgbox "nothing found" end if end end if on error resume next r = r + 1 loop
actually when working objects, in of cases, there no need activate workbooks\worksheets. code modifications in regard:
application.screenupdating = false '(as suggested cbrf23) '...... 'begining of code '...... while r <= maxrows workbooks(curfile).worksheets("sheet1") set rng = .cells(r, c) '(1) end findcid = rng.offset(0, 6).value2 if trim(findcid) <> "" set foundcell = workbooks(fn).sheets("sheet1").range("d:d").find(what:=findcid) if not foundcell nothing rng.value = foundcell.offset(0, 2).value2 end if r = r + 1 loop '...... 'rest of code '...... application.screenupdating = true (1) notice way range defined it’s made of once cell; if range has more 1 cell i.e. cell(r,c) cell(r,c+5) need use form:
set rng = range(.cells(r, c), .cells(r, c+5))
there no need add period . before range range defined cells within range command. using period . before cell command referred part of
with workbooks(curfile).worksheets("sheet1")
however if range defined a1:f1 period . has added before range in:
set rng = .range(“a1:f1”)
i removed msgbox commands believe testing purposes. not showing these messages hundreds or thousands lines of data. isn’t it?
Comments
Post a Comment